summaryrefslogtreecommitdiffstats
path: root/sca-cpp/tags
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-11-16 06:33:33 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2009-11-16 06:33:33 +0000
commitb72b7e219af9b9c6826372eeb581ee85ca653d75 (patch)
treeaae8306f2fa82b755681935bc0315d775490c9d1 /sca-cpp/tags
parentc0a2dcce89b1f374fc1987753dd28c6541bbbfe5 (diff)
Cleaning up SVN structure, moving tag under sca-cpp/tags.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880617 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp/tags')
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/build.sh47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/build.txt107
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sca.bat153
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sdo.bat133
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/AUTHORS0
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/COPYING203
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/ChangeLog0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Developers Guide.txt346
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/GettingStarted.html244
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/INSTALL2
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/LICENSE177
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Makefile.am36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NEWS0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NOTICE2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/README69
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/autogen.sh14
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.bat30
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.sh40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/configure.ac55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/CreatingSCACPPComponents.txt281
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/WSEntrypoint.txt272
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-base.css147
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-theme.css125
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makebindist.sh47
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makedist.sh42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/build.cmd19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.dsw98
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.ncbbin0 -> 844800 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.optbin0 -> 70144 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/Build Instructions.txt30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.dsp537
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.mak669
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl65
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl120
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.dsp104
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.mak353
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.dsp133
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.mak264
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.dsp153
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.mak284
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.dsp125
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.mak283
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service_axis2/tuscany_sca_ws_service_axis2.vcproj145
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.sln52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.suobin0 -> 15360 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/Build Instructions.txt30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/tuscany_sca.vcproj520
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.dllbin0 -> 9216 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.pdbbin0 -> 470016 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.dllbin0 -> 15360 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.pdbbin0 -> 519168 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl65
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl120
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/tuscany_sca_test.vcproj142
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.vcproj166
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.vcproj181
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.vcproj161
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/Makefile.am103
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.cpp132
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.h105
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.cpp270
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.h120
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.cpp93
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.h80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.cpp102
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.h71
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/SCA.cpp21
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.cpp105
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.h84
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.cpp208
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.h236
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/export.h39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/sca.h29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.cpp204
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.h156
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.cpp102
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.h81
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.cpp266
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.h177
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.cpp210
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.h122
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.cpp355
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.h195
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.cpp121
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.h89
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.cpp55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.h73
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.cpp100
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.h85
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.cpp44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.h85
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.cpp54
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.h125
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.cpp67
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.h143
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.cpp305
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.h202
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.cpp101
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.h158
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.cpp55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.h97
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.cpp44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.h66
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.cpp44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.h65
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.cpp1702
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.h105
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.cpp235
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.h235
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.cpp47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.h81
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.cpp89
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.h136
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.cpp122
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.h131
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.cpp118
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.h89
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.cpp127
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.h106
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.cpp46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.h91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.cpp49
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.h106
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.cpp356
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.h129
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.cpp56
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.h141
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.cpp43
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.h46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Exceptions.h48
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.cpp221
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.h133
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.cpp49
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.h53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.cpp122
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.h97
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.cpp32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.h47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.cpp107
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.h89
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logging.h57
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.cpp215
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.h61
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.cpp677
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.h63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/WSServiceWrapper.h47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtbuild41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtproject15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.project19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.settings/org.eclipse.cdt.managedbuilder.core.prefs9
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfo.h30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.cpp80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp72
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/Makefile.am15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/Makefile.am28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtbuild43
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtproject15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.project19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.settings/org.eclipse.cdt.managedbuilder.core.prefs9
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/Makefile.am18
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValue.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.cpp150
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.h39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/StockQuoteService.h32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtbuild69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtproject15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.project19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs9
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/Makefile.am12
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/TestSCA.cpp86
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl135
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/sca.module50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/subsystems/SubSystem1/sca.subsystem27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.cpp362
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.h68
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Makefile.am26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/WSServiceWrapper.cpp71
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2EntryPointService_skeleton.cpp253
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.cpp66
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Makefile.am27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/AUTHORS0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.cpp130
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.dsp102
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataService.h62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.componentType26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.cpp140
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.h61
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.cpp87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.cpp86
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.h58
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.wsdl97
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.componenttype39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp186
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.h58
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.cpp87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.cpp67
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.cpp73
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.cpp67
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/Accounts.dsp250
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteExternalService.h24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.h24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.wsdl68
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.componentType32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.h25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.cpp67
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.cpp67
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.cpp74
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.module53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.subsystem27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.dsw53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.ncbbin0 -> 230400 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/Tuscany-model.config24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.cpp179
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.dsp109
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.cpp106
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.h66
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/services.xml30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/deploy.bat16
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/COPYING203
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.h31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.wsdl161
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.componentType30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.cpp85
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.h37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.cpp64
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.cpp97
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.cpp94
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideService.h29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.componentType10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.cpp44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.cpp64
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.cpp73
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Makefile.am35
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Tuscany-model.config23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module.lin42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/services.xml42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorSubsystem/sca.subsystem23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calc.cpp172
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calculator.h32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Makefile.am27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/readme.txt64
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.cmd51
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.sh47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Makefile.am4
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Calculator_Client.cpp181
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Makefile.am24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.cpp173
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.h80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.cmd28
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.sh30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ChangeLog0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/GettingStarted.html261
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/INSTALL2
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/LICENSE177
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Makefile.am3
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/Makefile.am11
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/MyValueClient.cpp179
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Makefile.am23
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo.fragment36
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfo.h30
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.componentType30
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.cpp79
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/Makefile.am15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Makefile.am10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/Makefile.am17
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValue.h30
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.componentType36
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.cpp143
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.h32
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.wsdl65
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.xsd39
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.h32
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.wsdl157
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Tuscany-model.config25
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/sca.module51
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueSubsystem/sca.subsystem27
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/runMyValueClient.sh51
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/server.wsdd22
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NEWS0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NOTICE2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/README0
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/autogen.sh14
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/build.sh39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/configure.ac26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.dsw62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.ncbbin0 -> 189440 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.optbin0 -> 69120 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.dsp189
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.mak254
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.dsp115
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.mak262
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/BuildInstructions.txt95
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.dsp122
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.mak298
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/build.cmd20
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/deploy.cmd61
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/wsdeploy.cmd63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.sln35
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.suobin0 -> 11264 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator/Calculator.vcproj219
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Client/Client.vcproj146
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/BuildInstructions.txt95
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/WSClient.vcproj152
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/deploy.cmd61
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/wsdeploy.cmd63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.bat45
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.sh45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.c414
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.vcproj136
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/Tuscany-model.config24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.h53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.wsdl526
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.componentType10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.cpp159
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.h57
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.cpp187
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.h50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.cpp145
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestModule.vcproj173
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/sca.module19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/services.xml62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestSubsystem/sca.subsystem23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/Tuscany-model.config24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.h53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.wsdl526
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.componentType10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.h57
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/sca.module19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/subsystems/WSEntryPointTestSubsystem/sca.subsystem23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.c148
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.vcproj135
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/Tuscany-model.config24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.cpp38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.cpp70
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCModule.vcproj170
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/sca.module19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/services.xml30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCSubsystem/sca.subsystem23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/Tuscany-model.config24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/sca.module19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/subsystems/WSEntryPointTestRPCSubsystem/sca.subsystem23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/Makefile.am1
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/LICENSE177
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/NOTICE2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/README19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/Makefile.am19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/build.xml151
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/CalculatorTest.java29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/EnvHandlerTest.java44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceButNotInClassAttrTest.java88
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceTest.java44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceButNotInClassAttrTest.java44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceTest.java44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/MissingModuleAndFragmentTest.java44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/SimplePublicPrivateProtectedTest.java45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestAllModulesTest.java83
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestDeployAssistTool.java91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TuscanyTestCase.java337
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go.cmd2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_dir_option.cmd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_input_dir.cmd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_output_dir.cmd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/refresh-tools-jar.cmd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/Calculator.h32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.componentType25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.h33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/sca.module28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorBack.h31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorForward.h30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/sca.module31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.componentType25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.h33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.componentType25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.h32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.fragment39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.h94
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.componentType33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.fragment39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.h89
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.componentType33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.h43
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.fragment38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.componentType32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.h46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValue.h35
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.componentType38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.hpp38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl_stockQuote_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/StockQuoteService.h33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/sca.module59
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.fragment38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.h37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.componentType32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.h47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValue.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.componentType38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.hpp38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl_stockQuote_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/StockQuoteService.h32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/sca.module59
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValue.h72
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType56
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp86
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/sca.module96
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValue.h39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.componentType28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.hpp38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/sca.module48
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValue.h37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/sca.module48
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/CustomerInfo.fragmentX38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/sca.moduleX60
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.fragment38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.componentType32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.h45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValue.h35
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.componentType38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.hpp38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl_stockQuote_Proxy.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/StockQuoteService.h32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/sca.module59
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.fragment39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.componentType32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.h34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.cpp64
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.cpp73
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.cpp75
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.h39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.cpp80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.cpp75
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.h39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.cpp80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp593
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp411
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp503
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h83
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp339
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp72
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp72
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp182
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h82
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp182
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp70
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.cpp91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.h41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.cpp89
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.cpp63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.h38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp86
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/lib/readme.txt4
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.cmd15
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.sh17
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java90
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java119
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java126
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java100
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java75
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java162
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java420
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java82
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java128
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java159
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Parameter.java211
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/ParsingException.java42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/PrototypePart.java51
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Signature.java501
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Utils.java543
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/package.html39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentDomNodeHandler.java360
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentTypeFileHandler.java124
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DirectoryScanner.java87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomHandler.java77
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomNodeHandler.java40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/GenericDomNodeHandler.java214
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/LittleClass.java27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ModuleOrFragmentFileHandler.java85
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ReferenceDomNodeHandler.java67
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/Scagen.java170
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServiceDomNodeHandler.java62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServicesGenerator.java825
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/XMLFileActor.java202
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/package.html140
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl274
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyHeader.xsl222
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperCPP.xsl276
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperHeader.xsl185
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/readme.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-sca.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-webservice.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-core.xsd240
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-cpp.xsd40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-java.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-cpp.xsd50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-java.xsd39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-wsdl.xsd39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca.xsd34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/tuscany.xsd48
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/AUTHORS0
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/COPYING203
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/ChangeLog0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Committers Guide.txt69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/GettingStarted.html207
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/INSTALL2
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/LICENSE177
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Makefile.am33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NEWS0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NOTICE2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/README100
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/autogen.sh14
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.bat25
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.sh41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/configure.ac45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-base.css147
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-theme.css125
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makebindist.sh40
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makedist.sh36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build.cmd20
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build_instructions.txt31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.dsp125
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.mak277
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.dsp116
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.mak317
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.dsp763
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.mak987
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/tuscany_sdo.ilkbin0 -> 2617388 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.dsp136
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.mak303
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.dsw80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.ncbbin0 -> 5325824 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.optbin0 -> 64512 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/build_instructions.txt28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom/sdo_axiom.vcproj165
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.vcproj147
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_runtime/sdo_runtime.vcproj657
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_samples/sdo_samples.vcproj169
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_test/sdo_test.vcproj163
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.sln44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.suobin0 -> 13824 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/Makefile.am22
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.cpp264
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.h85
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom_export.h37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/Makefile.am23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.cpp132
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.h36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtbuild43
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtproject15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.project19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs9
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/Makefile.am4
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/Makefile.am1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.cpp28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.h207
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.cpp1144
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.h300
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.cpp1589
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.h403
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectList.h91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.cpp248
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.h97
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.cpp264
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.h69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.cpp32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.h46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.cpp32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.h53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.cpp52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.h52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.cpp68
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.h57
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.cpp52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.h806
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.cpp2271
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.h716
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.cpp33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.h99
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.cpp117
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.h106
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.cpp31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.h550
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.cpp4307
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.h683
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.cpp69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.h62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.cpp41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.h194
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.cpp1102
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.h207
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.cpp53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.h52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.cpp370
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.h97
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.cpp34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.h57
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.cpp62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.h68
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.cpp47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.h65
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.cpp32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.h44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.cpp100
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.h69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logging.h170
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Makefile.am87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.cpp38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h48
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.cpp42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.h205
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.cpp285
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.h122
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.cpp44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.h87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.cpp581
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.h291
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.cpp93
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.h87
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.cpp42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.h61
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.cpp74
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.h59
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.cpp153
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.h181
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.cpp49
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.h64
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp96
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h74
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.cpp93
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.h67
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.cpp516
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.h115
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDO.h60
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.cpp52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.h77
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.cpp227
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.h517
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.cpp1476
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.h170
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSPI.h25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp1337
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h232
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.cpp50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.h79
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.cpp228
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.h63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.cpp55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.h51
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.cpp44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.h52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.cpp50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.h54
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.cpp223
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.h91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp1171
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.h117
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.cpp53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.h52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.cpp43
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.h51
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.cpp51
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.h55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.cpp840
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.h75
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.cpp35
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.h59
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.cpp27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.h33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.cpp64
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.h74
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.cpp36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.h309
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.cpp977
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.h375
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.cpp303
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.h149
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.cpp113
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.h75
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.cpp36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.h230
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.cpp225
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.h109
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.cpp43
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.h81
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.cpp81
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.h62
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.cpp39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.h54
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.cpp3719
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.h325
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.cpp84
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.h56
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.cpp31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.h145
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.cpp69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.h96
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.cpp34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.h142
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.cpp308
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.h143
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.cpp84
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.h66
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.cpp35
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.h130
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp589
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.h145
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.cpp53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.h59
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.cpp52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.h52
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.cpp50
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.h53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/disable_warn.h27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/export.h47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtbuild59
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtproject15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.project19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs9
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog-out.xsd70
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xml18
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xsd31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Customer.xsd47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Order.xsd63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48601.xsd42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xml27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xml27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xsd46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xml.txt42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xsd.txt29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Atom1.0.xsd202
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xml25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xsd99
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Catalog.xsd31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Customer.xsd44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Makefile.am16
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xml24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xsd99
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Order.xsd55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/SdoGenerate.cpp166
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/StockQuoteService.wsdl157
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style1.xsd69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style2.xsd71
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style3.xsd71
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style4.xsd76
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingSchema.xsd99
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingUsingSchema.xml63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/axis.xsd36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xsd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xml24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xsd70
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46633.txt8
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46693.xsd173
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.txt6
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.xsd29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137_out.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.txt31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.xsd55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b_out.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47293.txt27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48602.xsd25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xml26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633_xml.txt10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b.xsd22
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b_xsd.txt31
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xml26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xsd33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xml.txt36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xsd.txt26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xml27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xml.txt46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xsd.txt28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/badelement.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups.xsd40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups_xsd.txt29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename.xsd40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename_xsd.txt29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug2.txt9
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xml170
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xsd80
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xml.txt424
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xsd.txt58
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xml37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xsd60
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/include.xsd65
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok1.xsd29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok2.xsd29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok3.xsd29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.txt1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd_safe.txt53
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-outxml.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xsd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator.xsd28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2.wsdl70
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2a.wsdl69
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/carotest3.txt36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company.xsd46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xml27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xsd45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyabs.xsd60
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyref.xsd63
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companysubs.xsd60
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/datetest.txt4
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/defaults.txt10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xml24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xsd44
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/employee.xsd41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xml27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xsd45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/extension.xsd54
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gCustomer.xsd47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xml18
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xsd55
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g3.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/getproptest.txt8
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham1.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham2.xsd36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham3.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup.xsd42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup_xsd.txt25
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup.xsd42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup_xsd.txt29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate.xsd34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate_xsd.txt26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix.xsd34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix_xsd.txt26
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwrongname.xsd34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc1.txt22
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc2.txt21
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include.xsd30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include1.xsd34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include2.xsd33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/includeother3.xsd30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xml29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xsd36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xml.txt70
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xsd.txt28
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/main.cpp175
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/maintest.txt188
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xml30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xsd17
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/matttest1.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/merle1.txt10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-core.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-implementation-local-java.xsd40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my.xsd27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/nulltest.txt91
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/oddchars.txt22
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xml29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xsd49
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xml29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xsd24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openseq.txt3
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order1.txt19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order2.txt20
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/partial.xml30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xml36
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xsd39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/querytest.txt17
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xml2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xsd1
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-sca.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-webservice.xsd37
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-ws.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-core.xsd230
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-dll.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-java.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-local-java.xsd40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-cpp.xsd65
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-java.xsd40
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-wsdl.xsd39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-java.xsd39
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-xsd.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca.xsd38
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario1.txt10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario2.txt8
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario3.txt22
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario4.txt108
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario5.txt8
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.cpp8835
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.h192
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest2.cpp1445
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sequence.txt45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setmany.txt24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setnull.txt42
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault1.txt15
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault2.txt18
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.txt8
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xml18
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xsd19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.wsdl387
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.xml41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_wsdl.txt47
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_xml.txt127
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/include3.xsd30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother.xsd30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother1.xsd34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother2.xsd33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/include3.xsd30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother.xsd30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother1.xsd34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother2.xsd33
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test2/includeother3.xsd30
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testabstract.txt5
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testerrors.txt7
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testinc2.txt21
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen.txt24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen3.xml17
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testorder.txt19
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/teststyles.txt93
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testsubsload.txt7
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testutils.txt100
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.txt2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.xml18
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/travel.txt146
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/userdata.txt10
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/utils.cpp551
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml1.xsd2245
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_in.xml57
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_out.txt41
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/AUTHORS0
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/COPYING203
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ChangeLog0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/GettingStarted.html173
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/INSTALL0
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/LICENSE177
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/Makefile.am3
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NEWS0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NOTICE2
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/README0
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/autogen.sh14
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/build.sh32
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/configure.ac23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/build.cmd23
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.dsw29
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.ncbbin0 -> 66560 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.optbin0 -> 53760 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/BuildInstructions.txt0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.dsp156
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.mak266
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.sln21
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.suobin0 -> 7680 bytes
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/BuildInstructions.txt0
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/sdo_misc.vcproj182
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.cpp186
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.xsd46
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Makefile.am24
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ObjectCreation.cpp249
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Query.cpp176
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Substitutes.cpp119
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.cpp108
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xml27
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xsd45
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/companysubs.xsd61
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.cpp34
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.h51
-rw-r--r--sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.bat41
-rwxr-xr-xsca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.sh27
1115 files changed, 124229 insertions, 0 deletions
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/build.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build.sh
new file mode 100755
index 0000000000..bb049617bb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TOPDIR=`pwd`
+
+if [ x$LIBXML2_INCLUDE = x ]; then
+echo "LIBXML2_INCLUDE not set"
+exit;
+fi
+if [ x$LIBXML2_LIB = x ]; then
+echo "LIBXML2_LIB not set"
+exit;
+fi
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+# Build SDO
+cd sdo
+./build.sh
+cd $TOPDIR
+
+# Build SCA
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+ export TUSCANY_SDOCPP=$TOPDIR/sdo/deploy
+fi
+
+cd sca
+./build.sh
+cd $TOPDIR
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/build.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build.txt
new file mode 100644
index 0000000000..2158457d6e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build.txt
@@ -0,0 +1,107 @@
+Tuscany C++ Build Instructions for Developers
+=============================================
+
+Download the source from http://svn.apache.org/repos/asf/incubator/tuscany/cpp
+The download location is <tuscany_cpp_root>
+
+Linux Build
+===========
+
+Prereqs:
+- Axis2C (version 0.92)
+- libxml2 (version 2.6.20 or whichever version is prereq'd by axis2c)
+
+Environment:
+- export LIBXML2_INCLUDE=<path to libxml2 headers. e.g. /usr/include/libxml2>
+- export LIBXML2_LIB=<path to libxml2 libraries. e.g. /usr/lib>
+- export AXIS2C_HOME=<axis2c_deploy>
+
+
+Build:
+- cd <tuscany_cpp_root>
+- ./build.sh
+
+This first builds the SDO subproject then SCA. The results are installed in
+ <tuscany_cpp_root>/sdo/deploy
+ <tuscany_cpp_root>/sca/deploy
+
+SDO Test
+--------
+
+Run:
+- cd <tuscany_cpp_root>/sdo
+- ./sdotest.sh
+
+
+SCA Test
+--------
+
+Run:
+- cd <tuscany_cpp_root>/sca
+- ./scatest.sh
+
+Linux distribution build
+========================
+To build the distro zips for linux:
+
+1. Download the source from http://svn.apache.org/repos/asf/incubator/tuscany/cpp
+The download location is <tuscany_cpp_root>
+
+2. cd <tuscany_cpp_root>/sdo
+
+3. set the environment
+ - export LIBXML2_INCLUDE=<path to libxml2 headers. e.g. /usr/include/libxml2>
+ - export LIBXML2_LIB=<path to libxml2 libraries. e.g. /usr/lib>
+ - export AXIS2C_HOME=<axis2c_deploy>
+
+4. ./makedist.sh
+ This produces a src and bin zip for Tuscany SDO
+
+5. cd <tuscany_cpp_root>/sca
+
+6. set the environment
+ - export TUSCANY_SDOCPP=<tuscany_cpp_root>/sdo/tucany_sdo-bin-${PACKAGE-VERSION}
+
+7. ./makedist.sh
+ This produces a src and bin zip for Tuscany SCA
+
+
+Windows Build
+=============
+
+Microsoft Visual Studio 6.x projects are provided for building on Windows.
+
+SDO
+---
+
+Prereqs:
+
+- libxml2 (tested with version 2.6.19)
+- Axis2C (version 0.92)
+
+Set the following environment variables to point to the location of the dependencies:
+ LIBXML2_INCLUDE=<libxml2 include location>
+ LIBXML2_LIB=<libxml2 lib location>
+ AXIS2C_HOME=<axis2c_deploy>
+
+Open the build workspace tuscany\cpp\sdo\runtime\projects\tuscany_sdo\tuscany_sdo.dsw
+and follow the build instructions.
+
+Note for users of Microsoft Visual Studio 7.x
+---------------------------------------------
+You can convert the projects supplied to a solution for Studio 7 by opening them in VS 7.x and selecting to convert. There are a number of small differences between VC6 and VC7 which may require additional changes to get the SDO code to compile, link and run.
+
+All the projects must be built multi-threaded: Project Properties/Configuration properties/C/C++/Code Generation/Runtime Library - select MultiThreaded Debug DLL /MDd (for debug build).
+
+The test project runs in the projects directory, where in C6 it ran in the Debug directory, so all the
+test comparison files are in the wrong place. You can copy the entire contents of runtime/core/test/Debug to projects/tuscany_sdo/sdo_test
+
+
+
+SCA
+---
+
+Set the environment variable TUSCANY_SDOCPP to the path of an SDO build
+
+Open the build workspace tuscany\cpp\sca\projects\tuscany_sca\tuscany_sca.dsw
+and follow the instructions.
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sca.bat b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sca.bat
new file mode 100644
index 0000000000..6da1b0de19
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sca.bat
@@ -0,0 +1,153 @@
+@echo off
+
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+setlocal
+if "%LIBXML2_HOME%" == "" (
+echo "LIBXML2_HOME not set"
+goto end
+)
+echo using LIBXML2: %LIBXML2_HOME%
+
+if "%ICONV_HOME%" == "" (
+echo "ICONV_HOME not set"
+goto end
+)
+echo using ICONV: %ICONV_HOME%"
+
+if "%AXIS2C_HOME%" == "" (
+echo "AXIS2C_HOME not set"
+goto end
+)
+echo using Axis2C: %AXIS2C_HOME%"
+
+call vcvars32
+
+echo Build of SCA started....
+set PACKAGE=tuscany_sca_cpp
+set VERSION=0.1.incubating-M1
+set SRC_PACKAGE=%PACKAGE%-%VERSION%-src
+set BIN_PACKAGE=%PACKAGE%-%VERSION%-bin
+
+if "%TUSCANY_SDOCPP%" == "" (
+echo "TUSCANY_SDOCPP not set"
+set TUSCANY_SDOCPP=%CD%\tuscany_sdo_cpp-%VERSION%-bin
+)
+
+echo using TUSCANY_SDOCPP: %TUSCANY_SDOCPP%
+
+set FROM_DIR=%cd%\sca
+set TO_SRC=%cd%
+
+set TO_BIN=%cd%
+
+echo Copying SCA source...
+
+if not exist %TO_SRC% mkdir %TO_SRC%
+
+rmdir /S /Q %TO_SRC%\%SRC_PACKAGE%
+if not exist %TO_SRC%\%SRC_PACKAGE% mkdir %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\INSTALL %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\LICENSE %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\COPYING %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\NOTICE %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\README %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\GettingStarted.html %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\build.bat %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\scatest.bat %TO_SRC%\%SRC_PACKAGE%
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\deploy mkdir %TO_SRC%\%SRC_PACKAGE%\deploy
+xcopy /t /e %FROM_DIR%\deploy %TO_SRC%\%SRC_PACKAGE%\deploy
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\projects mkdir %TO_SRC%\%SRC_PACKAGE%\projects
+xcopy/s %FROM_DIR%\projects %TO_SRC%\%SRC_PACKAGE%\projects
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\projectsvc7 mkdir %TO_SRC%\%SRC_PACKAGE%\projectsvc7
+xcopy/s %FROM_DIR%\projectsvc7 %TO_SRC%\%SRC_PACKAGE%\projectsvc7
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\runtime mkdir %TO_SRC%\%SRC_PACKAGE%\runtime
+xcopy/s %FROM_DIR%\runtime %TO_SRC%\%SRC_PACKAGE%\runtime
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\tools mkdir %TO_SRC%\%SRC_PACKAGE%\tools
+xcopy/s %FROM_DIR%\tools %TO_SRC%\%SRC_PACKAGE%\tools
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\doc mkdir %TO_SRC%\%SRC_PACKAGE%\doc
+xcopy/s %FROM_DIR%\doc %TO_SRC%\%SRC_PACKAGE%\doc
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\samples mkdir %TO_SRC%\%SRC_PACKAGE%\samples
+if not exist %TO_SRC%\%SRC_PACKAGE%\samples\Calculator mkdir %TO_SRC%\%SRC_PACKAGE%\samples\Calculator
+if not exist %TO_SRC%\%SRC_PACKAGE%\samples\ides mkdir %TO_SRC%\%SRC_PACKAGE%\samples\ides
+
+xcopy/s %FROM_DIR%\samples\Calculator %TO_SRC%\%SRC_PACKAGE%\samples\Calculator
+xcopy/s %FROM_DIR%\samples\ides %TO_SRC%\%SRC_PACKAGE%\samples\ides
+copy %FROM_DIR%\samples\INSTALL %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\LICENSE %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\COPYING %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\NOTICE %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\README %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\GettingStarted.html %TO_SRC%\%SRC_PACKAGE%\samples
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\xsd mkdir %TO_SRC%\%SRC_PACKAGE%\xsd
+xcopy/s %FROM_DIR%\xsd %TO_SRC%\%SRC_PACKAGE%\xsd
+
+
+echo Building SCA....
+
+cd %FROM_DIR%
+call build
+
+copy %FROM_DIR%\tools\scagen\bld\scagen.jar %FROM_DIR%\deploy\bin
+copy %FROM_DIR%\tools\scagen\bld\scagen.cmd %FROM_DIR%\deploy\bin
+
+echo Installing SCA....
+
+if not exist %TO_BIN% mkdir %TO_BIN%
+rmdir /S /Q %TO_BIN%\%BIN_PACKAGE%
+if not exist %TO_BIN%\%BIN_PACKAGE% mkdir %TO_BIN%\%BIN_PACKAGE%
+if not exist %TO_BIN%\%BIN_PACKAGE%\doc mkdir %TO_BIN%\%BIN_PACKAGE%\doc
+
+xcopy/s %FROM_DIR%\deploy %TO_BIN%\%BIN_PACKAGE%
+xcopy/s %FROM_DIR%\doc %TO_BIN%\%BIN_PACKAGE%\doc
+copy %FROM_DIR%\INSTALL %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\LICENSE %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\COPYING %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\NOTICE %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\README %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\GettingStarted.html %TO_BIN%\%BIN_PACKAGE%
+
+echo Building calculator....
+
+set TUSCANY_SCACPP=%FROM_DIR%\deploy
+cd %FROM_DIR%\samples\ides\devstudio6\projects\Calculator
+
+call build
+
+if not exist %TO_BIN%\%BIN_PACKAGE%\samples mkdir %TO_BIN%\%BIN_PACKAGE%\samples
+if not exist %TO_BIN%\%BIN_PACKAGE%\samples\ides mkdir %TO_BIN%\%BIN_PACKAGE%\samples\ides
+if not exist %TO_BIN%\%BIN_PACKAGE%\samples\Calculator mkdir %TO_BIN%\%BIN_PACKAGE%\samples\Calculator
+
+xcopy/s %FROM_DIR%\samples\ides %TO_BIN%\%BIN_PACKAGE%\samples\ides
+xcopy/s %FROM_DIR%\samples\Calculator %TO_BIN%\%BIN_PACKAGE%\samples\Calculator
+copy %FROM_DIR%\samples\INSTALL %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\LICENSE %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\COPYING %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\NOTICE %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\README %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\GettingStarted.html %TO_BIN%\%BIN_PACKAGE%\samples
+
+:end
+echo SCA Build complete.
+endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sdo.bat b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sdo.bat
new file mode 100644
index 0000000000..11e095faf1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/build_tuscany_sdo.bat
@@ -0,0 +1,133 @@
+@echo off
+
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+setlocal
+if "%LIBXML2_HOME%" == "" (
+echo "LIBXML2_HOME not set"
+goto end
+)
+echo using LIBXML2: %LIBXML2_HOME%
+
+if "%ICONV_HOME%" == "" (
+echo "ICONV_HOME not set"
+goto end
+)
+echo using ICONV: %ICONV_HOME%"
+
+if "%AXIS2C_HOME%" == "" (
+echo "AXIS2C_HOME not set"
+goto end
+)
+
+echo using AXIS2C: %AXIS2C_HOME%
+
+call vcvars32
+
+echo Build of SDO started....
+set PACKAGE=tuscany_sdo_cpp
+set VERSION=0.1.incubating-M1
+set SRC_PACKAGE=%PACKAGE%-%VERSION%-src
+set BIN_PACKAGE=%PACKAGE%-%VERSION%-bin
+
+set FROM_DIR=%cd%\sdo
+set TO_SRC=%cd%
+set TO_BIN=%cd%
+
+echo Copying SDO source... %TO_SRC%\%SRC_PACKAGE%
+
+if not exist %TO_SRC% mkdir %TO_SRC%
+rmdir /S /Q %TO_SRC%\%SRC_PACKAGE%
+if not exist %TO_SRC%\%SRC_PACKAGE% mkdir %TO_SRC%\%SRC_PACKAGE%
+if not exist %TO_SRC%\%SRC_PACKAGE%\projects mkdir %TO_SRC%\%SRC_PACKAGE%\projects
+if not exist %TO_SRC%\%SRC_PACKAGE%\projectsvc7 mkdir %TO_SRC%\%SRC_PACKAGE%\projectsvc7
+if not exist %TO_SRC%\%SRC_PACKAGE%\runtime mkdir %TO_SRC%\%SRC_PACKAGE%\runtime
+if not exist %TO_SRC%\%SRC_PACKAGE%\deploy mkdir %TO_SRC%\%SRC_PACKAGE%\deploy
+if not exist %TO_SRC%\%SRC_PACKAGE%\doc mkdir %TO_SRC%\%SRC_PACKAGE%\doc
+
+xcopy /t /e %FROM_DIR%\deploy %TO_SRC%\%SRC_PACKAGE%\deploy
+xcopy/s %FROM_DIR%\runtime %TO_SRC%\%SRC_PACKAGE%\runtime
+xcopy/s %FROM_DIR%\projectsvc7 %TO_SRC%\%SRC_PACKAGE%\projectsvc7
+xcopy/s %FROM_DIR%\doc %TO_SRC%\%SRC_PACKAGE%\doc
+
+xcopy/s %FROM_DIR%\projects %TO_SRC%\%SRC_PACKAGE%\projects
+copy %FROM_DIR%\INSTALL %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\LICENSE %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\COPYING %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\NOTICE %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\README %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\GettingStarted.html %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\build.bat %TO_SRC%\%SRC_PACKAGE%
+copy %FROM_DIR%\sdotest.bat %TO_SRC%\%SRC_PACKAGE%
+
+
+if not exist %TO_SRC%\%SRC_PACKAGE%\samples mkdir %TO_SRC%\%SRC_PACKAGE%\samples
+if not exist %TO_SRC%\%SRC_PACKAGE%\samples\misc mkdir %TO_SRC%\%SRC_PACKAGE%\samples\misc
+if not exist %TO_SRC%\%SRC_PACKAGE%\samples\ides mkdir %TO_SRC%\%SRC_PACKAGE%\samples\ides
+copy %FROM_DIR%\samples\INSTALL %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\LICENSE %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\COPYING %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\NOTICE %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\README %TO_SRC%\%SRC_PACKAGE%\samples
+copy %FROM_DIR%\samples\GettingStarted.html %TO_SRC%\%SRC_PACKAGE%\samples
+
+xcopy /s /e %FROM_DIR%\samples\misc %TO_SRC%\%SRC_PACKAGE%\samples\misc
+xcopy/s %FROM_DIR%\samples\ides %TO_SRC%\%SRC_PACKAGE%\samples\ides
+echo Building SDO....
+
+cd %FROM_DIR%
+call build
+
+echo Installing SDO....
+
+if not exist %TO_BIN% mkdir %TO_BIN%
+rmdir /S /Q %TO_BIN%\%BIN_PACKAGE%
+if not exist %TO_BIN%\%BIN_PACKAGE% mkdir %TO_BIN%\%BIN_PACKAGE%
+if not exist %TO_BIN%\%BIN_PACKAGE%\doc mkdir %TO_BIN%\%BIN_PACKAGE%\doc
+
+xcopy/s %FROM_DIR%\deploy %TO_BIN%\%BIN_PACKAGE%
+xcopy/s %FROM_DIR%\doc %TO_BIN%\%BIN_PACKAGE%\doc
+copy %FROM_DIR%\INSTALL %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\LICENSE %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\COPYING %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\NOTICE %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\README %TO_BIN%\%BIN_PACKAGE%
+copy %FROM_DIR%\GettingStarted.html %TO_BIN%\%BIN_PACKAGE%
+
+
+echo Building samples
+
+set TUSCANY_SDOCPP=%FROM_DIR%\deploy
+cd %FROM_DIR%\samples\ides\devstudio6\projects\misc
+
+call build
+
+if not exist %TO_BIN%\%BIN_PACKAGE%\samples mkdir %TO_BIN%\%BIN_PACKAGE%\samples
+if not exist %TO_BIN%\%BIN_PACKAGE%\samples\ides mkdir %TO_BIN%\%BIN_PACKAGE%\samples\ides
+if not exist %TO_BIN%\%BIN_PACKAGE%\samples\misc mkdir %TO_BIN%\%BIN_PACKAGE%\samples\misc
+
+xcopy/s %FROM_DIR%\samples\ides %TO_BIN%\%BIN_PACKAGE%\samples\ides
+xcopy/s %FROM_DIR%\samples\misc %TO_BIN%\%BIN_PACKAGE%\samples\misc
+copy %FROM_DIR%\samples\INSTALL %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\LICENSE %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\COPYING %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\NOTICE %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\README %TO_BIN%\%BIN_PACKAGE%\samples
+copy %FROM_DIR%\samples\GettingStarted.html %TO_BIN%\%BIN_PACKAGE%\samples
+
+:end
+echo SDO Build complete.
+endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/AUTHORS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/AUTHORS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/AUTHORS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/COPYING b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/COPYING
new file mode 100755
index 0000000000..6b0b1270ff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/COPYING
@@ -0,0 +1,203 @@
+
+ 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/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/ChangeLog b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/ChangeLog
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/ChangeLog
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Developers Guide.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Developers Guide.txt
new file mode 100644
index 0000000000..96b0476174
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Developers Guide.txt
@@ -0,0 +1,346 @@
+Tuscany SCA For C++ Developers Guide
+====================================
+
+Contents:
+ Developing Services in C++
+ Running C++ Services
+
+
+See cpp/build.txt in the parent directory or the cpp/sca/INSTALL file
+for build instructions.
+
+Building the tools
+------------------
+
+NOTE: this is built and installed by the build step above.
+
+Currently, there is only one tool: "scagen". It can be built using the
+ant build script at \tuscany\cpp\sca\tools\scagen\build.xml.
+The default target "all" will build the java jars, documentation,
+scripts and a zip file of the whole thing. This is all the ant
+build tasks apart from "test" which runs all the junit tests.
+
+The ant build script can be altered to add the junit tests to the
+default target. Replace the line
+
+<property name="junit.jar.folder" value="${basedir}/lib" />
+
+The "test" task was not included in "all" as it requires a
+junit jar file to run. This jar is available here:
+http://www.junit.org/index.htm testing has been done with
+Junit version 3.8.1.
+
+Running the scagen tool
+-----------------------
+
+The scagen tool user interface is quite basic in this initial release.
+It can be run from the scagen.jar file using "java -jar scagen.jar"
+or from small scripts - scagen.cmd for Windows and scagen.sh for Unix.
+The parameters are:
+ -dir <the path to the sca module root directory>
+ -output <the path to an output directory where the generated file will be placed>
+
+e.g.
+ scagen -dir c:\mymodules\module1 -output c:\mymodules\bld\module1
+
+What scagen does
+----------------
+
+The input directory passed to the scagen tools as
+the -dir parameter method is taken to be the SCA
+module root directory. All the sca.module and .fragment
+files in that directory are inspected to resolve all
+the <component/> elements within them.
+
+Each <component/> element found is inspected
+to see if it has a <implementation.cpp/> element within it.
+
+Each <implementation.cpp/> element should have a
+header attribute that represents a C++ header file
+that contains function prototypes for the C++
+implementation of the service. An optional class
+attribute can be used to select one class if more than
+one that is present in the header file. The default
+class is the one with the same name as the header file.
+The tool will verify that the implementation header
+contains an appropriate class prototype.
+
+The directory that contains the implementation header
+should also contain a matching .componentType file for
+the equivalent SCA component. So for example, a
+MyServiceImpl.h file would have a corresponding
+MyServiceImpl.componentType file in the same directory.
+
+Each componentType file is inspected for <service/>
+and <reference/> elements. For each <service/> element
+that is found that contains a <interface.cpp/> element
+within it,
+
+the header attribute of the <interface.cpp/> is taken
+as the filename of the C++ interface header for the
+SCA service. This C++ header file is opened and used
+as a means for specifying the SCA service resulting
+in an appropriate wrapper and proxy being generated
+for this service interface. Both method bodies and h
+eaders are generated in the given output directory.
+The processing of a <reference/> element is the same
+except that only a proxy header and implementation
+re generated.
+
+
+Getting started with the code
+-----------------------------
+
+The following is a list of tasks that are performed by the scagen tool
+for each task we will describe technically how it is accomplished and
+the location of the code that can be inspected/changed to alter the
+behaviour.
+
+Here are the tasks listed, below is a paragraph for each one:
+
+ o (Overall structure of the code)
+ o Walking the input directory
+ o Scanning the .module and .fragment files
+ o finding the C++ implementation headers
+ o finding/checking the classname in the C++ implementation headers
+ o find the matching .componentTemplate files
+ o going into the componentTemplate files to extract the interface header filenames
+ o going into the interface header files and parsing them to extract the method signatures
+ into a network of objects we can inspect.
+ o taking all the meta data stored as objects and building a DOM for XSLT processing
+ o using XSLT to produce a proxy header
+ o using XSLT to produce a proxy implementation
+ o using XSLT to produce a wrapper header
+ o using XSLT to produce a wrapper implementation
+
+
+Overall structure of the code
+-----------------------------
+
+There are two packages org.apache.tuscany.sca.cpp.tools.common and
+org.apache.tuscany.sca.cpp.tools.services. The ...common package is
+taken from some existing code that was also contributed to axis that
+was used to parse C++ code and do various tasks like insert trace.
+This code was repackaged and shipped as a tuscany package but there
+has been a desire not to change it significantly from the equivalent
+org.apache.axis.tools.common package to leave the door open for
+future convergence.
+
+Where the ...common package has been amended (for example to cope with
+namespaces better or the provision of an Options.reset method to reset a static
+variable and enable the tuscany junit tests to run independently) these
+have been flagged with a "Tuscany" comment. The ...common package basically
+provides two functions - 1) the ability to go into a directory (see DirectoryTree.java)
+and process files that fit a particular filter (e.g. "*.hpp") by passing them to
+implementer of the FileActor Interface (see the classes "Headers" for the
+actor that processes C++ headers and "XMLFileActor" for the file actor that
+processes the .componentType and sca.module/fragment files.)
+
+The ...services package contains the majority of code written afresh for the
+scagen tool including the subclasses of XMLFileActor (see ComponentTypeFileHandler.java
+and ModuleOrFragmentFileHandler.java) that are the classes that tie this
+package to the ...common package and which are called by the
+DirectoryTree walker.
+
+Walking the module root input directory
+---------------------------------------
+
+The main method of the scagen class creates an instance of
+"DirectoryScanner" and registers with it a file handler of
+type "ModuleOrFragmentFileHandler" for all files that end
+in ".module" or ".fragment". On calling the "walkTree" method
+on the scanner it will in turn call the actOnFile method on the
+ModuleOrFragmentFileHandler for appropriate files.
+
+Scanning the .module and .fragment files
+----------------------------------------
+
+The scanning of these files by the respective "ModuleOrFragmentFileHandler"
+and "ComponentTypeFileHandler" is mostly handled by the superclass
+"XMLFileActor". This class will recursively goes through the whole
+XML file and considers the name of the XML element it finds.
+"XMLFileActor" contains a map of element names to element handlers
+that will "flatten out" the structure of the XML file "above" the
+level of node we are interested in.
+
+So for example the ComponentTypeFile handler sets up the handlers
+map as follows:
+
+ GenericDomNodeHandler gdnh = new GenericDomNodeHandler();
+ handlers.put("componentType", gdnh);
+ handlers.put("interface.cpp", gdnh);
+ ServiceDomNodeHandler sdnh = new ServiceDomNodeHandler();
+ handlers.put("service", sdnh);
+
+ ReferenceDomNodeHandler rdnh = new ReferenceDomNodeHandler();
+ handlers.put("reference", rdnh);
+
+The majority of processing done by these DomNOdeHandlers is to
+place the attributes and values discovered into another map that
+maps an (static version of) the XPath of a value to the value itself.
+So for example "/componentType/service/interface.cpp/@header" might contain
+the current ("root to here") value of the header attribute of the current
+interface.
+
+Particular handlers for the "leaves" of this tree
+such as ServiceDomNodeHandler and ReferenceDomNodeHandler
+can then consume these values from the map without having
+to be concerned with the actual names of things,
+like the service name, appearing in the key. It should be
+understood though that there are multiple values placed in the map
+for one "key" as the processing works its way through the
+XML tree. For example the processing of a second component will
+overlay its data over the same keys as the first component.
+(After "wiping" the appropriate subtree.)
+
+Finding the C++ implementation headers
+--------------------------------------
+
+The "/module/component/implementation.cpp/@header" and
+is used to key into the name of the implementation header
+and this is opened directly and passed to the
+actOnFileMethod of a Headers object from the ...common package
+bypassing the DirectoryScanner code. The path is relative to
+the given (-dir option) module root directory.
+
+Finding/checking the classname in the C++ implementation headers
+-----------------------------------------------------------------
+
+This implementation header is not used to define the
+methods of the SCA service but rather is opened to check
+ any given implementation.cpp/@class attribute
+(or find out the name of the implementation class
+in the header if this is not specified in the XML. This
+is done using the same method that later parses the interface
+C++ headers into java objects - we just them inspect the
+class attribute of the "Signature" objects that represent the methods
+we find in the header.
+
+Find the matching .componentType files
+------------------------------------------
+
+By SCA convention we go to the same directory as the implementation
+files and look for the XXX.componentType files with the same name.
+A instance of the ComponentDOMNodeHandler handles the data in the
+Component Element and pre-creates a ComponentTypeFileHandler that
+will eventually be called to process the .componentType file. This
+object receives a number of "setParameter" calls to poke into it
+matadata that is available prior/outside the the actual .componentType
+file it will read.
+
+Go into the componentType files to extract the interface header filenames
+-----------------------------------------------------------------------------
+
+We open up the .componentTemplateFiles with exactly the same
+mechanism as we read the sca.module/fragment file (by creating
+a DOM and descending through it this time using a ComponentTypeFileHandler that it
+has had various data values ( e.g. the implementation class and namespace used later)
+poked into it. The ComponentTypeFileHandler itself has individual
+handlers for the service and reference XML/DOM element/nodes
+that is comes across (ServiceDomNodeHandler and ReferenceDomNodeHandler
+respectively). Each these handlers will pull out the name of
+a C++ interface header and use it to resolve the interface of the
+SCA Service.
+
+Parsing the interface header files for signatures
+-------------------------------------------------
+
+The Service/Reference DOM Node hander both call the
+ ServicesGenerator.handleInterfaceHeader(parameters, true);
+method, the second parameter is used to differentiate
+the call source as we don't need wrapper files for
+SCA references (just proxies).
+
+The ServicesGenerator uses the Headers file actor from
+the ...common package to create a List of Signature
+objects that describe the interface methods in the C++
+header.
+
+Take all the meta data stored as objects and build a DOM
+--------------------------------------------------------
+We now have a List of Signature objects and a map that
+represents the flattened information that we have pulled
+from the XML files in the ServiceGenerator class.
+We call a "createDOMofMethods" method
+to consolidate all this information into one DOM
+(this task should be split into more than one method as the
+signature/parameter list of the method is too large).
+
+Use XSLT to produce the output files (Proxy/Wrapper headers and Implementations)
+--------------------------------------------------------------------------------
+
+The ServicesGenerator.handleInterfaceHeader(parameters, forReference);
+method closes of with the code:
+
+ createProxyCPPFromDom(outputDir, dom);
+ createProxyHeaderFromDom(outputDir, dom);
+
+ if (!forReference) {
+ createWrapperCPPFromDom(outputDir, dom);
+ createWrapperHeaderFromDom(outputDir, dom);
+ }
+
+
+Each of the create methods sets up the output
+file name and a different XSLT transform and calls
+"createOutputFromDom" to transform/filter the data in the
+"model" that is held in our DOM of the data to a particular
+"view" as expressed in the C++ output file.
+
+The four XSLT style sheets are in rough order of the output
+file and this corresponds very roughly to a depth first descent
+of the DOM tree so, for example, we could have in a stylesheet:
+
+...
+ void* </xsl:text>
+ <xsl:value-of select="$class"/><xsl:text>::newImplementation()
+ {
+ return new </xsl:text><xsl:value-of select="../@implClass"/><xsl:text><xsl:text>(target);
+ }
+
+which would be output as:
+
+ void* MyClassImpl_MyClass_Proxy::newImplementation()
+ {
+ return new MyClassImpl(target)
+ }
+
+given appropriate valies for $class and "../@implClass" and
+$class might be defined to be:
+xsl:variable name="clazz">
+ <xsl:value-of select="../@implClass"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="../@nameOfServiceOrReference"/>
+ <xsl:text>_Proxy</xsl:text>
+</xsl:variable>
+
+giving "MyClassImpl_MyClass_Proxy"
+
+The stylesheets can be found in the xsl subdirectory of the
+org.apache.tuscany.sca.cpp.tools.services package.
+
+Unit Testing Scagen Code Changes
+--------------------------------
+
+The junit unit test
+ /tuscany/cpp/sca/tools/scagen/
+ junit/org/apache/tuscany/sca/cpp/tools/junit/TestAllModulesTest.java
+
+will dynamically look for all the subdirectores of the directory
+path given by TuscanyTestCase.junit_modules and run the scagen
+tool on them as if they were modules roots.
+
+By convention an "expected_output" directory is located
+(see the CVS tree or the test program) and the actual
+and expected results compared. This testcase is thus a
+good first/basic regression test for any changes.
+
+New test cases can thus be added without having to write
+any new junit java code by by creating new SCA modules and
+the associated expected Scagen output - perhaps by using the tool
+initially and checking the output is satisfactory before copying
+it to the expected output directory at:
+
+/tuscany/cpp/sca/tools/scagen/junit/testoutput/<module>/expected_output
+where input data is taken from
+/tuscany/cpp/sca/tools/scagen/junit/testinput/modules/<module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/GettingStarted.html b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/GettingStarted.html
new file mode 100644
index 0000000000..3ebffdf566
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/GettingStarted.html
@@ -0,0 +1,244 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+ <META CONTENT="text/html; charset=iso-8859-1" HTTP-EQUIV="Content-Type">
+ <META CONTENT="text/css" HTTP-EQUIV="Content-Style-Type">
+ <STYLE MEDIA="all" TYPE="text/css">
+@import url("doc/css/maven-base.css");
+@import url("doc/css/maven-theme.css");
+ </STYLE>
+
+ <LINK HREF="doc/css/maven-theme.css" MEDIA="print" REL="stylesheet"
+ TYPE="text/css">
+ <TITLE>Tuscany - Getting Started</TITLE>
+</HEAD>
+
+<BODY>
+<DIV ID="bodyColumn">
+ <DIV ID="contentBox">
+ <DIV CLASS="section">
+ <H2>Tuscany - Getting Started - SCA C++ Milestone release 1</H2>
+
+ <P>Tuscany SCA C++ provides a runtime implementation for the Service Component
+ Architecture 0.9 specification, written in C++ and currently supports C++
+ component implementation types. This page describes what is needed to install and run Tuscany
+ SCA for C++.<BR/>If you haven't already done so, the first
+ step is to download the SCA C++ Milestone release 1 of Apache Tuscany from our
+ <A HREF="http://incubator.apache.org/tuscany/download.html" target='_blank'>download page</A>.<BR/>
+ </P>
+ </DIV>
+
+ <DIV CLASS="section">
+ <H2>Contents</H2>
+ <OL>
+ <LI><A HREF="#requirements">System Requirements</A></LI>
+ <LI><A HREF="#install">Installing Tuscany SCA..</A>
+ <UL>
+ <LI><A HREF="#linuxbin">..from the binary release on Linux</A></LI>
+ <LI><A HREF="#linuxsrc">..from the source release on Linux</A></LI>
+ <LI><A HREF="#winbin">..from the binary release on Windows</A></LI>
+ <LI><A HREF="#winsrc">..from the source release on Windows</A></LI>
+ </UL></LI>
+ <LI><A HREF="#samples">Samples</A></LI>
+ <LI><A HREF="#userguide">User Guide Documents</A></LI>
+ <LI><A HREF="#help">Getting Help</A></LI>
+ </OL>
+ </DIV>
+
+
+ <DIV CLASS="section">
+ <A NAME="requirements"><H2>System Requirements</H2></A>
+
+ <P>In order to run Tuscany SCA there are some
+ minimum requirements:</P>
+ <TABLE CLASS="bodyTable">
+
+ <TBODY>
+ <TR CLASS="a">
+ <TD><B>Software</B></TD>
+ <TD><B>Download Link</B></TD>
+ </TR>
+ <TR CLASS="b">
+ <TD>Operating systems:
+ <UL>
+
+ <LI>Windows XP SP2</LI>
+ <LI>Linux</LI>
+ </UL>
+ </TD>
+ <TD>
+ </TD>
+ </TR>
+ <TR CLASS="a">
+ <TD>Axis2C Release 0.92</TD>
+
+ <TD>
+ <A HREF="http://ws.apache.org/axis2/c/download.cgi"
+ TARGET="_blank">http://ws.apache.org/axis2/c/download.cgi</A><BR/>
+ Please download and follow the installation instructions. Ensure you can run the Axis2C samples
+ </TD>
+ </TR>
+ <TR CLASS="b">
+ <TD>Tuscany SDO for C++ Milestone Release 1</TD>
+
+ <TD>
+ <A HREF="http://incubator.apache.org/tuscany/download.html"
+ TARGET="_blank">http://incubator.apache.org/tuscany/download.html</A><BR/>
+ Please download and follow the installation instructions
+ </TD>
+ </TR>
+ <TR CLASS="a">
+ <TD>Java SDK 1.4 or later</TD>
+
+ <TD>
+ <A HREF="http://java.sun.com/javase/downloads/index.jsp"
+ TARGET="_blank">http://java.sun.com/javase/downloads/index.jsp</A><BR/>
+ This is required for building and running the SCAGEN code generation tool, which is used
+ when developing Tuscany SCA C++ components
+ </TD>
+ </TR>
+ <TR CLASS="b">
+ <TD>Apache Ant 1.6 or later</TD>
+
+ <TD>
+ <A HREF="http://ant.apache.org"
+ TARGET="_blank">http://ant.apache.org</A><BR/>
+ This is required for building the SCAGEN code generation tool, which is used
+ when developing Tuscany SCA C++ components
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+ </DIV>
+ <DIV CLASS="section">
+ <A NAME="install"><H2>Installing Tuscany SCA for C++</H2></A>
+ <A NAME="linuxbin"><H3>Getting Tuscany SCA for C++ working with the binary release on Linux</H3></A>
+ <OL>
+ <LI>Extract the binary tar package to a folder</LI>
+ <LI>Set the TUSCANY_SCACPP environment variable to point to the directory that was just extracted</LI>
+ <LI>Add the *install_dir*/lib directory to the LD_LIBRARY_PATH environment variable</LI>
+ </OL>
+ <A NAME="linuxsrc"><H3>Getting Tuscany SCA for C++ working with the source release on Linux</H3></A>
+ <OL>
+ <LI>Extract the source tar package to a folder &lt;tuscany_sca&gt;</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ <LI>Build the source with the following command sequence:
+ <UL>
+ <LI>./configure</LI>
+ <LI>make</LI>
+ <LI>make install</LI>
+ </UL>
+ NOTE: If you don't provide a --prefix configure option, it will by default install into
+ /usr/local/tuscany/sca</LI>
+ </OL>
+
+ <A NAME="winbin"><H3>Getting Tuscany SCA for C++ working with the binary release on Windows</H3></A>
+ <OL>
+ <LI>Unzip the supplied zip file to a folder</LI>
+ <LI>Set the TUSCANY_SCACPP environment variable to point to the directory that was just unzipped</LI>
+ <LI>Add the *install_dir*\bin directory to the PATH environment variable</LI>
+ </OL>
+ <A NAME="winsrc"><H3>Getting Tuscany SCA for C++ working with the source release on Windows</H3></A>
+ <OL>
+ <LI>Unzip the supplied source zip file</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ <LI>You must have set up the environment for Microsoft Visual C++ tools. The build command
+ will call vcvars32 to set the environment. Ensure the directory containing this is on your path.
+ This will be where you installed the compiler.</LI>
+ <LI>Build the source:
+ <UL>
+ <LI>cd &lt;to where you unzipped the source&gt;</LI>
+ <LI>build</LI>
+ </UL>
+ This will build all the projects and put the required output into the 'deploy' directory<BR/><BR/>
+ Alternatively, open the workspace tuscany_sca.dsw in Visual Studio 6 - you can build projects individually
+ or build the samples to rebuild all the projects</LI>
+ <LI>Set the TUSCANY_SCACPP environment variable to point to the 'deploy' directory that was just created</LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="samples"><H2>Samples</H2></A>
+ <TABLE CLASS="bodyTable">
+ <TBODY>
+ <TR CLASS="a">
+ <TD STYLE="vertical-align: top; white-space: nowrap;">SCA Technology samples
+ </TD>
+ <TD>Simple samples that emphasize how to to use
+ Service Component Architecture technology. Follow the
+ instructions on the samples <A HREF="samples/GettingStarted.html">Getting Started</A>
+ page to build and run the Tuscany SCA samples
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+ <BR>
+ </DIV>
+ <DIV CLASS="section">
+ <A NAME="userguide"><H2>User Guide Documents</H2></A>
+ <TABLE CLASS="bodyTable">
+ <TBODY>
+ <TR CLASS="a">
+ <TD STYLE="vertical-align: top; white-space: nowrap;"><A HREF="doc/CreatingSCACPPComponents.txt">Creating and building a Tuscany SCA C++ component</A>
+ </TD>
+ <TD>A document that describes how to create, build and run a Tuscany SCA C++ component.
+ </TD>
+ </TR>
+ <TR CLASS="a">
+ <TD STYLE="vertical-align: top; white-space: nowrap;"><A HREF="doc/WSEntrypoint.txt">Enabling Web Service access to your Tuscany SCA C++ component</A>
+ </TD>
+ <TD>A document that describes how to expose a Tuscany SCA C++ component as a Web Service via an SCA Web Service Entrypoint.
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+ <BR>
+ </DIV>
+ <DIV CLASS="section">
+ <A NAME="help"><H2>Getting Help</H2></A>
+
+ <P>First place to look is at the Tuscany FAQ at
+ <A HREF="http://incubator.apache.org/tuscany/faq.html"
+ TARGET="_blank">http://incubator.apache.org/tuscany/faq.html</A> </P>
+
+ <P>Any problem with this release can be reported to the Tuscany
+ <A HREF="http://incubator.apache.org/tuscany/mail-lists.html"
+ TARGET="_blank">mailing lists</A> or create a JIRA issue at&nbsp;<A HREF="http://issues.apache.org/jira/browse/Tuscany"
+ TARGET="_blank">http://issues.apache.org/jira/browse/Tuscany</A>.</P>
+
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+ <TABLE CLASS="bodyTable">
+ <TBODY>
+ <TR CLASS="a">
+ <TD>
+
+ <P>Thank you for your interest in Tuscany.</P> <STRONG><EM>-The
+ Tuscany Development Team</EM></STRONG>
+
+ <P></P>
+
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+
+ <P></P>
+ </DIV>
+ </DIV>
+</DIV>
+</BODY>
+
+</HTML>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/INSTALL b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/INSTALL
new file mode 100644
index 0000000000..9e0a0b758a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/INSTALL
@@ -0,0 +1,2 @@
+Please read the GettingStarted.html document for information on
+building and installing Tuscany SCA for C++
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/LICENSE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/LICENSE
new file mode 100755
index 0000000000..f433b1a53f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/LICENSE
@@ -0,0 +1,177 @@
+
+ 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
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Makefile.am
new file mode 100644
index 0000000000..3fd18bc820
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/Makefile.am
@@ -0,0 +1,36 @@
+SUBDIRS = tools runtime
+DIST_SUBDIRS = tools runtime samples
+datadir=$(prefix)
+
+data_DATA = INSTALL README LICENSE COPYING NOTICE GettingStarted.html
+nobase_data_DATA = xsd/*.*
+EXTRA_DIST = LICENSE COPYING INSTALL README NOTICE GettingStarted.html scatest.sh xsd doc
+dist-hook:
+ rm -rf `find $(distdir)/ -type d -name .svn`
+ rm -rf `find $(distdir)/ -type d -name .deps`
+
+install-data-hook:
+ rm -rf $(prefix)/samples
+ cp -r samples $(prefix)
+ rm -rf `find $(prefix)/samples -type d -name .svn`
+ rm -rf `find $(prefix)/samples -type d -name .deps`
+ rm -rf $(prefix)/doc
+ cp -r doc $(prefix)
+ rm -rf `find $(prefix)/doc -type d -name .svn`
+ rm -rf `find $(prefix)/doc -type d -name .deps`
+
+
+bindist: dist
+ rm -rf ${PACKAGE}-${PACKAGE_VERSION}
+ rm -rf ${PACKAGE}-${PACKAGE_VERSION}-src
+ rm -rf ${PACKAGE}-${PACKAGE_VERSION}-bin
+ gunzip -f ${PACKAGE}-${PACKAGE_VERSION}.tar.gz
+ tar -xf ${PACKAGE}-${PACKAGE_VERSION}.tar
+ mv ${PACKAGE}-${PACKAGE_VERSION} ${PACKAGE}-${PACKAGE_VERSION}-src
+ tar -cf - ${PACKAGE}-${PACKAGE_VERSION}-src | gzip -c > ${PACKAGE}-${PACKAGE_VERSION}-src.tar.gz
+ cd ${PACKAGE}-${PACKAGE_VERSION}-src \
+ && sh ../makebindist.sh
+ mkdir ${PACKAGE}-${PACKAGE_VERSION}-bin
+ cp -r ${PACKAGE}-${PACKAGE_VERSION}-src/deploy/* ${PACKAGE}-${PACKAGE_VERSION}-bin
+ tar -cf - ${PACKAGE}-${PACKAGE_VERSION}-bin | gzip -c > ${PACKAGE}-${PACKAGE_VERSION}-bin.tar.gz
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NEWS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NEWS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NEWS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NOTICE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NOTICE
new file mode 100644
index 0000000000..bfb81409ad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/NOTICE
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/) \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/README b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/README
new file mode 100644
index 0000000000..a286dca6e3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/README
@@ -0,0 +1,69 @@
+Apache Tuscany C++ M1 build (July, 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.
+
+
+Getting Started
+===============
+
+Documentation describing the system requirements and the steps to install
+Tuscany SCA C++ and run the samples can be found in the GettingStarted.html file.
+
+
+About Tuscany SCA C++
+=====================
+
+Tuscany SCA C++ provides a runtime implementation for the Service Component
+Architecture 0.9 specification, written in C++ and will currently support C++
+component implementation types.
+
+It is possible to interoperate with Tuscany SCA Java via the Web Service bindings
+for EntryPoint/ExternalService but restrictions apply. This is not yet a complete
+implementation and known restrictions are described below.
+
+Supported SCA Assembly Model features
+ * All features are supported unless listed under the known restrictions
+ below. See SCA Assembly Model specification.
+
+Supported language bindings
+ * Component implementations written in C++. See SCA Client and
+ Implementation Model specification.
+ * Component interfaces described by C++ classes. See SCA Client and
+ Implementation Model specification.
+
+Supported external service and entry point bindings
+ * The web service binding is supported. This implementation will support
+ web services which using document literal SOAP bindings conforming to the
+ WS-I basic profile (rpc/encoded is not yet supported).
+
+Known restrictions
+ * Subsystem wiring, entry points and external services are not supported.
+ * Local service interfaces cannot use overloaded operations (the SCA
+ specification limits remote service interfaces to not using overloaded
+ operations).
+ * Each WSDL definition for a web service binding must be in a single WSDL
+ document.
+ * No load time validation of the deployed SCA application (run time validation
+ only).
+ * No metadata API.
+ * A Web Service EntryPoint that is wired (via zero or more components) to a
+ Web Service ExternalService will fail when attempting to send the final
+ response to the originating client.
+
+
+
+Thank you for using Tuscany!
+
+The Tuscany Team.
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/autogen.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/autogen.sh
new file mode 100755
index 0000000000..3cebb0a380
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/autogen.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+for i in "libtoolize --force" aclocal autoconf autoheader
+do
+ echo -n "Running $i..."
+ $i || exit 1
+ echo 'done.'
+done
+
+echo -n 'Running automake...'
+automake --add-missing
+echo 'done.'
+exit 0
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.bat b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.bat
new file mode 100644
index 0000000000..2f6ece9b33
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.bat
@@ -0,0 +1,30 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+
+
+@setlocal
+
+echo building Java code
+cd tools\scagen
+call ant
+
+echo building C++ code
+call vcvars32
+cd ..\..\projects\tuscany_sca
+build.cmd
+
+@endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.sh
new file mode 100755
index 0000000000..cf94f1489d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/build.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TUSCANY_SCACPP_HOME=`pwd`
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"
+exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+cd ${TUSCANY_SCACPP_HOME}/samples
+./autogen.sh
+
+cd $TUSCANY_SCACPP_HOME
+./autogen.sh
+
+./configure --prefix=${TUSCANY_SCACPP_HOME}/deploy --enable-static=no
+make
+make install
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/configure.ac b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/configure.ac
new file mode 100644
index 0000000000..6f448cf832
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/configure.ac
@@ -0,0 +1,55 @@
+dnl run autogen.sh to generate the configure script.
+
+AC_PREREQ(2.59)
+AC_INIT(tuscany_sca_cpp, 0.1.incubating-M1)
+AC_CANONICAL_SYSTEM
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+AC_PREFIX_DEFAULT(/usr/local/tuscany/sca)
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_LIBTOOL
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_HEADER_DIRENT
+AC_HEADER_STDC
+AC_CHECK_HEADERS([inttypes.h stdlib.h string.h sys/time.h unistd.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_C_CONST
+AC_C_INLINE
+
+# Checks for library functions.
+AC_FUNC_CLOSEDIR_VOID
+AC_FUNC_STAT
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([getcwd putenv strdup])
+# AC_CONFIG_SUBDIRS([samples])
+AC_CONFIG_FILES([Makefile
+ tools/Makefile
+ tools/scagen/Makefile
+ runtime/Makefile
+ runtime/ws_reference/Makefile
+ runtime/ws_reference/axis2c/Makefile
+ runtime/ws_reference/axis2c/src/Makefile
+ runtime/ws_service/Makefile
+ runtime/ws_service/axis2c/Makefile
+ runtime/ws_service/axis2c/src/Makefile
+ runtime/core/Makefile
+ runtime/core/src/Makefile
+ runtime/core/test/Makefile
+ runtime/core/test/CustomerInfo/Makefile
+ runtime/core/test/MyValue/Makefile
+ runtime/core/test/src/Makefile
+ ])
+AC_OUTPUT
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/CreatingSCACPPComponents.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/CreatingSCACPPComponents.txt
new file mode 100644
index 0000000000..17f6430b79
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/CreatingSCACPPComponents.txt
@@ -0,0 +1,281 @@
+Creating SCA Components in Tuscany SCA C++
+==========================================
+
+This document describes how to create and run SCA components in Tuscany SCA C++
+milestone release 1.
+
+
+Creating and deploying an SCA C++ Component
+===========================================
+
+Each SCA C++ component needs:
+ o A service header file that defines the operations that can be invoked on the
+ component
+ o An implementation header file that defines the implementation and extends
+ the service header file
+ o A C++ implementation of the service that implements the operations defined
+ in the service header file
+ o Proxy and wrapper header and implementation files generated by the Tuscany
+ C++ SCAGEN tool
+ o A component definition in the module sca.module file
+ o A service definition in a .componentType file
+ o A module component definition in a sca.subsystem file
+
+
+In this section we will use the Calculator sample as a worked example.
+The Calculator code and files can be found at samples/Calculator and has been
+developed further than the details specified below. In the interests of
+readability, the example used below takes the simplest path.
+
+
+1. Create the service header file that defines the operations your component
+ will implement. E.g. Calculator.h contains the following:
+
+#ifndef CALCULATOR_H
+#define CALCULATOR_H
+class Calculator
+{
+public:
+ virtual float add(float arg1, float arg2) = 0;
+ virtual float sub(float arg1, float arg2) = 0;
+ virtual float mul(float arg1, float arg2) = 0;
+ virtual float div(float arg1, float arg2) = 0;
+};
+
+#endif
+
+
+2. Create the implementation header file that extends the service header file.
+ E.g. CalculatorImpl.h contains the following:
+
+#ifndef CALCULATORIMPL_H
+#define CALCULATORIMPL_H
+
+#include "Calculator.h"
+
+class CalculatorImpl : public Calculator
+{
+public:
+ CalculatorImpl();
+ virtual ~CalculatorImpl();
+
+ // Calculator interface
+ virtual float add(float arg1, float arg2);
+ virtual float sub(float arg1, float arg2);
+ virtual float mul(float arg1, float arg2);
+ virtual float div(float arg1, float arg2);
+};
+
+#endif
+
+
+3. Create the implementation for the component based on the implementation
+ header file. E.g. CalculatorImpl.cpp contains the following code:
+
+#include "CalculatorImpl.h"
+#include <stdio.h>
+
+CalculatorImpl::CalculatorImpl()
+{
+}
+
+CalculatorImpl::~CalculatorImpl()
+{
+}
+
+// Calculator interface
+float CalculatorImpl::add(float arg1, float arg2)
+{
+ float result = arg1 + arg2;
+
+ printf("CalculatorImpl::add %f + %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+float CalculatorImpl::sub(float arg1, float arg2)
+{
+ float result = arg1 - arg2;
+ printf("CalculatorImpl::sub %f - %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+float CalculatorImpl::div(float arg1, float arg2)
+{
+ float result = arg1 / arg2;
+ printf("CalculatorImpl::div %f / %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+float CalculatorImpl::mul(float arg1, float arg2)
+{
+ float result = arg1 * arg2;
+ printf("CalculatorImpl::mul %f * %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+
+4. Create the componentType file for your component to define the service that
+ your component provides. The file must be named after your implementation
+ class and specifies the name of the service and the service header file
+ (which describes the service operations). E.g. CalculatorImpl.componentType
+ contains the following XML:
+
+<?xml version="1.0" encoding="ASCII"?>
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CalculatorService">
+ <interface.cpp header="Calculator.h"/>
+ </service>
+</componentType>
+
+
+5. Create the sca.module file for your module and define your component within
+ it. The component definition specifies the implementation library to use (a
+ .dll file on Windows and a .so file on Linux) and the implementation header
+ file (which describes the implementation class). Component properties and
+ references to other services can also be specified here. E.g. the
+ Calculator sca.module file contains the following XML:
+
+<?xml version="1.0" encoding="ASCII"?>
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ name="CalculatorModule">
+
+ <!-- The Calculator component -->
+ <component name="CalculatorServiceComponent">
+ <implementation.cpp dll="Calculator.dll" header="CalculatorImpl.h"/>
+ <properties></properties>
+ <references></references>
+ </component>
+</module>
+
+
+6. Generate the proxy and wrapper classes and header files using the SCAGEN
+ tool. These classes are used by the Tuscany SCA C++ runtime to enable
+ service implementations to be invoked from a client or another component.
+ Run the SCAGEN tool, specifying the directory where your header files,
+ sca.module and componentType file are and the directory where you
+ want the generated files to be placed. E.g. on Windows, the
+ following command is run from the directory where Tuscany SCA is deployed:
+
+bin/scagen.cmd -dir samples/Calculator/CalculatorModule -output samples/Calculator/CalculatorModule
+
+ which produces the following files:
+
+CalculatorImpl_CalculatorService_Proxy.h
+CalculatorImpl_CalculatorService_Proxy.cpp
+CalculatorImpl_CalculatorService_Wrapper.h
+CalculatorImpl_CalculatorService_Wrapper.cpp
+
+
+7. Compile and link the code that has been written and generated. This will
+ produce a .dll or .so library file. The name should match the library name
+ specified in the sca.module file.
+
+
+8. Create the sca.subsystem file and define your module component within it.
+ The module component definition should specify the service name used in the
+ componentType file and the module name used in the sca.module file. E.g.
+ the Calculator sca.subsystem file contains the following XML:
+
+<?xml version="1.0" encoding="ASCII"?>
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ name="CalculatorSubsystem">
+
+ <moduleComponent name="CalculatorService" module="CalculatorModule"/>
+</subsystem>
+
+
+9. Deploy the various files into the SCA directory structure, as follows:
+
+<deploy_root>/modules/ModuleName/ServiceHeader.h
+<deploy_root>/modules/ModuleName/ImplementationHeader.h
+<deploy_root>/modules/ModuleName/sca.module
+<deploy_root>/modules/ModuleName/Implementation.componentType
+<deploy_root>/modules/ModuleName/Implementation.dll (or .so on Linux)
+<deploy_root>/subsystems/SubsystemName/sca.subsystem
+
+ E.g. for the Calculator sample the structure is:
+
+samples/Calculator/deploy/modules/CalculatorModule/Calculator.h
+samples/Calculator/deploy/modules/CalculatorModule/CalculatorImpl.h
+samples/Calculator/deploy/modules/CalculatorModule/sca.module
+samples/Calculator/deploy/modules/CalculatorModule/CalculatorImpl.componentType
+samples/Calculator/deploy/modules/CalculatorModule/Calculator.dll
+samples/Calculator/deploy/subsystems/CalculatorSubsystem/sca.subsystem
+
+
+10. Your component, module and subsystem are now ready to be invoked. Create a
+ client that will call the service. E.g. the Calculator client (in the
+ Calc.cpp file) contains code similar to the following:
+
+try
+{
+ // Define and start the Tuscany runtime:
+ // Set the system root path that contains the SCA directory structure, set
+ // the default module component that will be used based on the format
+ // <SubsystemName>/<ModuleComponentName> and then start the runtime
+ TuscanyRuntime rt;
+ rt.setSystemRoot("C:/tuscany_sca/samples/Calculator/deploy");
+ rt.setDefaultModuleComponent("CalculatorSubsystem/CalculatorService");
+ rt.start();
+
+
+ // Locate the service
+ ModuleContext myContext = ModuleContext::getCurrent();
+ Calculator *calcService = (Calculator*) myContext.locateService("CalculatorServiceComponent");
+ if (calcService == 0)
+ {
+ cout << "MyCalculatorClient.exe: Unable to find Calculator service" << endl;
+ }
+ else
+ {
+ result = calcService->add(arg1, arg2);
+ cout << "Calculator: add(" << arg1 << "," << arg2 << ") = " << result << endl;
+ }
+}
+catch (ServiceRuntimeException& ex)
+{
+ cout << "MyCalculatorClient.exe: Error whilst starting or invoking Tuscany: " <<
+ ex.getMessageText() << endl;
+}
+
+
+11. Compile, link and run the client that has been created. You should
+ (hopefully!) see your component invoked. Remember you will need to have the
+ TUSCANY_SCACPP, TUSCANY_SDOCPP and AXIS2C_HOME environment variables set,
+ as well as the SCA and SDO bin directories and the Axis2C lib directory on
+ your PATH (or LD_LIBRARY_PATH on Linux). E.g. on Windows run the following
+ commands:
+
+set TUSCANY_SCACPP=C:/tuscany_sca
+set TUSCANY_SDOCPP=C:/tuscany_sdo
+set AXIS2C_HOME=C:/axis2c-bin-0.92-win32
+set PATH=%PATH%;C:/tuscany_sca/bin;C:/tuscany_sdo/bin;C:/axis2c-bin-0.92-win32/lib
+./MyCalculatorClient.exe
+
+
+12. Optionally, enable Tuscany logging by setting the TUSCANY_SCACPP_LOGGING
+ environment variable with the level you wish to log at (0 for minimal
+ logging, up to 9 for more detailed logging) and the TUSCANY_SCACPP_LOG
+ environment variable to define the file to log to (if this is not set,
+ logging will go to the console). E.g. on Windows run the following
+ commands:
+
+set TUSCANY_SCACPP_LOGGING=5
+set TUSCANY_SCACPP_LOG=C:/tuscany/mylogfile.txt
+
+
+Further Steps
+-------------
+
+The Calculator sample has been developed further than the details specified
+above. In particular, it demonstrates how two services can be wired together
+such that one references and invokes the other. It also demonstrates how to
+expose the Calculator component service as an Axis2C Web Service. See the
+WSEntrypoint.txt document for more details on exposing components as Web
+Services.
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/WSEntrypoint.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/WSEntrypoint.txt
new file mode 100644
index 0000000000..7e59008cae
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/WSEntrypoint.txt
@@ -0,0 +1,272 @@
+Web Services EntryPoint
+=======================
+
+This section of the document describes the use of the Web Service EntryPoint
+(WS EntryPoint) support in the Apache Tuscany SCA C++ runtime.
+
+The WS EntryPoint code is based on Apache Axis2C version 0.92
+(http://ws.apache.org/axis2/c) and allows SCA components to be invoked via Web
+Service calls.
+
+WS EntryPoint currently supports Document/literal Wrapped style Web Services
+only. There are also restrictions about the parameter and return types of the
+operations in SCA components that can be exposed as Web Services, see below
+for more details.
+
+
+Defining and deploying an SCA Module with a WS EntryPoint
+=========================================================
+
+In this section we will use the Calculator sample as a worked example.
+The Calculator code and files can be found at sca/samples/Calculator.
+
+Pre-requisites:
+
+ o A working component within a module and subsystem, with SCAGEN generated
+ Proxy and Wrapper classes and a DLL or SO library compiled from these and
+ the component class files. The sca.module, *.componentType, *.fragment and
+ sca.subsystem files must also be available and working
+
+1. Create the WSDL that defines the interface of your SCA component. See the
+table "XML Schema Type to C++ Type Mapping" and "Notes on creating WSDL" below
+for mapping the parameters and return types of the component operations to XML
+schema types in the WSDL. This file needs to be accessible from the component,
+so place it in the same directory as the component or in a subdirectory.
+
+See the sca/samples/Calculator/CalculatorModule/Calculator.wsdl file as an
+example.
+
+
+2. Add an EntryPoint definition to the sca.module file, setting the
+interface.wsdl interface attribute to the WSDL file defined above, the
+reference element to the name of the component to be invoked and the binding.ws
+port attribute to the namespace, service and port name specified in the
+WSDL, in the form: "<namespace>#wsdl.endpoint(<service-name>/<port-name>)".
+Also give the EntryPoint a name and set the multiplicity.
+
+E.g. for the Calculator component, based on the Calculator.wsdl file:
+
+<!-- Expose as a web service -->
+<entryPoint name="WSCalculatorEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="Calculator.wsdl" />
+ <binding.ws port="tuscany/c/Calculator#wsdl.endpoint(CalculatorService/CalculatorServicePort)"/>
+ <reference>CalculatorServiceComponent</reference>
+</entryPoint>
+
+
+3. Create a file named Tuscany-model.config in the same directory as your
+component. This file defines which WSDL and XML Schema files to include in the
+Tuscany runtime environment for this module. Set the contents of the file
+using the example below and use the path and name of the WSDL file created
+above.
+
+E.g. for the Calculator component
+
+<?xml version="1.0" encoding="utf-8" ?>
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="Calculator.wsdl"/>
+ </wsdl>
+</tuscany-model>
+
+
+
+These changes are all that are required in the Tuscany runtime environment to
+expose a component as a Web Service; the following steps detail how to add the
+Web Service to the list of Axis2C services.
+
+
+4. Create a new directory within the Axis2C services directory. The name of
+this directory defines the URL of your service. For example, if you create a
+directory named "CalcWebService", the URL of the service will be
+http://localhost:9090/axis2/services/CalcWebService
+
+
+5. Create a file named services.xml within the new directory. This file defines
+the library to use that contains the service code and the operations that the
+service exposes. For the Tuscany WS EntryPoint, you also need to add some
+Tuscany specific parameters to identify the Tuscany System Root directory and
+the EntryPoint that will be invoked.
+
+The TuscanySystemRoot parameter requires the full path to your system root
+directory - this is the directory that contains the "modules" and "subsystem"
+directories; which in turn contain your modules and subsystems.
+
+The TuscanyEntryPoint parameter is of the form
+"<subsystem-name>/<service-name>/<entrypoint-name>", with the subsystem and
+service names defined in your sca.subsystem file and the EntryPoint name
+defined in the EntryPoint definition you added to your sca.module file above.
+
+Set the ServiceClass parameter to "tuscany_sca_ws_service" as this library
+(tuscany_sca_ws_service.dll on Windows and libtuscany_sca_ws_service.so on
+Linux) contains the service code that will invoke your component.
+
+Finally, add all of the operations that your component defines that you want
+to expose as Web Service operations.
+
+E.g. for the Calculator WS EntryPoint,
+axis2c/services/CalcWebService/services.xml contains:
+
+<service name="CalcWebService">
+
+ <parameter name="ServiceClass" locked="xsd:false">tuscany_sca_ws_service</parameter>
+ <parameter name="TuscanySystemRoot" locked="xsd:false">C:/tuscany/cpp/sca/samples/runtime</parameter>
+ <parameter name="TuscanyEntryPoint" locked="xsd:false">CalculatorSubsystem/CalculatorService/WSCalculatorEntrypoint</parameter>
+
+ <operation name="add"/>
+ <operation name="sub"/>
+ <operation name="mul"/>
+ <operation name="div"/>
+
+</service>
+
+
+6. Copy the tuscany_sca_ws_service.dll file (or the
+libtuscany_sca_ws_service.so file, if on Linux) to the new service directory
+you created above. This library contains the code that Axis2C requires to call
+a service implementation and links to the tuscany_sca.dll library (or
+libtuscany_sca.so on Linux) which manages the invocation of your component.
+
+
+7. Ensure the TUSCANY_SCACPP, TUSCANY_SDOCPP, AXIS2C_HOME and PATH environment
+variables are correctly set
+
+E.g. on Windows run the following commands with the correct directories:
+set TUSCANY_SCACPP=C:/path_to_tuscany/sca/deploy
+set TUSCANY_SDOCPP=C:/path_to_tuscany/sdo/deploy
+set AXIS2C_HOME=C:/path_to_axis2c0.92
+set PATH=%PATH%;C:/path_to_tuscany/sca/deploy/bin;C:/path_to_tuscany/sdo/deploy/bin;C:/path_to_axis2c0.92/lib
+
+
+8. Optionally, enable logging in Tuscany by setting the TUSCANY_SCACPP_LOGGING
+environment variable with the level you wish to log at (0 for minimal
+logging, up to 9 for more detailed logging) and the TUSCANY_SCACPP_LOG
+environment variable to define the file to log to (if this is not set, logging
+will go to the console)
+
+E.g. on Windows run the following commands:
+set TUSCANY_SCACPP_LOGGING=5
+set TUSCANY_SCACPP_LOG=C:/tuscany/mylogfile.txt
+
+Additionally, Axis2C automatically writes logging files to the Axis2C logs
+directory (e.g. C:/path_to_axis2c0.92/logs). In particular the Axis2.log file
+may contain useful information about your service.
+
+
+9. Start the Simple Axis server, or your Apache HTTP server if you have
+deployed Axis2C to Apache.
+
+E.g. on Windows run the following commands:
+cd C:/path_to_axis2c0.92/bin
+./axis2_http_server.exe
+
+
+Your component should now be exposed as an Axis2C Web Service, via the WS
+EntryPoint you created. See the Axis2C documentation for writing clients to
+invoke the Web Service, or you can use any other Web Service client platform
+(e.g. Axis2 for Java: http://ws.apache.org/axis2), or you can invoke your
+component from another Tuscany runtime by using Tuscany's WS External Service
+support.
+
+
+
+XML Schema Type to C++ Type Mapping
+===================================
+
+To help define the WSDL that describes the interface of your component, the
+table below lists how incoming XML data in Web Service messages is mapped to
+C++ types used in the parameters and return types of your component operations.
+
+This lists the only C++ types that can currently be used on the operations of a
+component exposed as a Web Service. For other types, use an SDO DataObject to
+wrap the data, and define that wrapping as a complexType in the WSDL. See the
+SDO specifications (available from the Tuscany website) for the C++ types that
+SDO supports.
+
+
+ XML Schema Type | C++ Type
+-------------------------------------------------------------
+ |
+ string | char*
+ |
+ int | long
+ |
+ integer | long
+ |
+ short | short
+ |
+ float | float
+ |
+ double | long double
+ |
+ boolean | bool
+ |
+ hexBinary | char*
+ |
+ base64Binary | char*
+ |
+ byte | char
+ |
+ complexType | SDO DataObjectPtr
+ |
+ any | SDO DataObjectPtr with OpenDataObjectType
+
+
+
+Notes on creating WSDL
+======================
+
+ o Currently only Document/literal Wrapped style Web Services are supported by
+ WS EntryPoint, support for RPC style Web Services is planned for future
+ releases.
+
+ See the article at http://www.ibm.com/developerworks/webservices/library/ws-whichwsdl/
+ for an explanation of Document/literal Wrapped style WSDL and Web Services
+
+ o Operation parameter and return messages that are defined in the WSDL must be
+ XML Schema elements containing a complexType - there is currently no
+ support for simpleTypes or single-level elements. Also, Document/literal
+ Wrapped services require that the operation name is used as the name of the
+ incoming element that wraps the operation parameters.
+
+ For example, a component operation defined in C++ as:
+
+ long myOperation(char* arg1, short arg2, DataObjectPtr arg3);
+
+ will need to be described in WSDL with messages like:
+
+ <wsdl:message name="myOperationRequestMsg">
+ <wsdl:part element="tns:myOperation" name="myOperationRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="myOperationResponseMsg">
+ <wsdl:part element="tns:myOperationResponse" name="myOperationResponsePart"/>
+ </wsdl:message>
+
+ and will need an XML schema to define the types like:
+
+ <xsd:element name="myOperation">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="arg1" type="xsd:string" minOccurs="1"/>
+ <xsd:element name="arg2" type="xsd:short" minOccurs="1"/>
+ <xsd:element name="arg3" minOccurs="1">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="dataObjectFloatData" type="xsd:float"/>
+ <xsd:element name="dataObjectStringData" type="xsd:string"/>
+ <xsd:element name="dataObjectIntData" type="xsd:int"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="myOperationResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="result" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-base.css b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-base.css
new file mode 100644
index 0000000000..314da3a272
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-base.css
@@ -0,0 +1,147 @@
+body {
+ margin: 0px;
+ padding: 0px;
+}
+img {
+ border:none;
+}
+table {
+ padding:0px;
+ width: 100%;
+ margin-left: -2px;
+ margin-right: -2px;
+}
+acronym {
+ cursor: help;
+ border-bottom: 1px dotted #feb;
+}
+table.bodyTable th, table.bodyTable td {
+ padding: 2px 4px 2px 4px;
+ vertical-align: top;
+}
+div.clear{
+ clear:both;
+ visibility: hidden;
+}
+div.clear hr{
+ display: none;
+}
+#bannerLeft, #bannerRight {
+ font-size: xx-large;
+ font-weight: bold;
+}
+#bannerLeft img, #bannerRight img {
+ margin: 0px;
+}
+.xleft, #bannerLeft img {
+ float:left;
+ text-shadow: #7CFC00;
+}
+.xright, #bannerRight img {
+ float:right;
+ text-shadow: #7CFC00;
+}
+#banner {
+ padding: 0px;
+}
+#banner img {
+ border: none;
+}
+#breadcrumbs {
+ padding: 3px 10px 3px 10px;
+}
+#leftColumn {
+ width: 150px;
+ float:left;
+}
+#bodyColumn {
+ margin-right: 1.5em;
+ margin-left: 177px;
+}
+#legend {
+ padding: 8px 0 8px 0;
+}
+#navcolumn {
+ padding: 8px 4px 0 8px;
+}
+#navcolumn h5 {
+ margin: 0;
+ padding: 0;
+ font-size: small;
+}
+#navcolumn ul {
+ margin: 0;
+ padding: 0;
+ font-size: small;
+}
+#navcolumn li {
+ list-style-type: none;
+ background-image: none;
+ background-repeat: no-repeat;
+ background-position: 0 0.4em;
+ padding-left: 16px;
+ list-style-position: ouside;
+ line-height: 1.2em;
+ font-size: smaller;
+}
+#navcolumn li.expanded {
+ background-image: url(../images/expanded.gif);
+}
+#navcolumn li.collapsed {
+ background-image: url(../images/collapsed.gif);
+}
+#poweredBy {
+ text-align: center;
+}
+#navcolumn img {
+ margin-top: 10px;
+ margin-bottom: 3px;
+}
+#poweredBy img {
+ display:block;
+ margin: 20px 0 20px 17px;
+ border: 1px solid black;
+ width: 90px;
+ height: 30px;
+}
+#search img {
+ margin: 0px;
+ display: block;
+}
+#search #q, #search #btnG {
+ border: 1px solid #999;
+ margin-bottom:10px;
+}
+#search form {
+ margin: 0px;
+}
+#lastPublished {
+ font-size: x-small;
+}
+.navSection {
+ margin-bottom: 2px;
+ padding: 8px;
+}
+.navSectionHead {
+ font-weight: bold;
+ font-size: x-small;
+}
+.section {
+ padding: 4px;
+}
+#footer {
+ padding: 3px 10px 3px 10px;
+ font-size: x-small;
+}
+#breadcrumbs {
+ font-size: x-small;
+ margin: 0pt;
+}
+.source {
+ padding: 12px;
+ margin: 1em 7px 1em 7px;
+}
+.source pre {
+ margin: 0px;
+ padding: 0px;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-theme.css b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-theme.css
new file mode 100644
index 0000000000..5c8e7b4abf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/doc/css/maven-theme.css
@@ -0,0 +1,125 @@
+body {
+ padding: 0px 0px 10px 0px;
+}
+body, td, select, input, li{
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ font-size: 13px;
+}
+code{
+ font-family: Courier, monospace;
+ font-size: 13px;
+}
+a {
+ text-decoration: none;
+}
+a:link {
+ color:#36a;
+}
+a:visited {
+ color:#47a;
+}
+a:active, a:hover {
+ color:#69c;
+}
+#legend li.externalLink {
+ background: url(../images/external.png) left top no-repeat;
+ padding-left: 18px;
+}
+a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
+ background: url(../images/external.png) right center no-repeat;
+ padding-right: 18px;
+}
+#legend li.newWindow {
+ background: url(../images/newwindow.png) left top no-repeat;
+ padding-left: 18px;
+}
+a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
+ background: url(../images/newwindow.png) right center no-repeat;
+ padding-right: 18px;
+}
+h2 {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #999;
+ color: #900;
+ background-color: #ddd;
+ font-weight:900;
+ font-size: x-large;
+}
+h3 {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #aaa;
+ color: #900;
+ background-color: #eee;
+ font-weight: normal;
+ font-size: large;
+}
+h4 {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #bbb;
+ color: #900;
+ background-color: #fff;
+ font-weight: normal;
+ font-size: large;
+}
+h5 {
+ padding: 4px 4px 4px 6px;
+ color: #900;
+ font-size: normal;
+}
+p {
+ line-height: 1.3em;
+ font-size: small;
+}
+#breadcrumbs {
+ border-top: 1px solid #aaa;
+ border-bottom: 1px solid #aaa;
+ background-color: #ccc;
+}
+#leftColumn {
+ margin: 10px 0 0 5px;
+ border: 1px solid #999;
+ background-color: #eee;
+}
+#navcolumn h5 {
+ font-size: smaller;
+ border-bottom: 1px solid #aaaaaa;
+ padding-top: 2px;
+ color: #000;
+}
+
+table.bodyTable th {
+ color: white;
+ background-color: #bbb;
+ text-align: left;
+ font-weight: bold;
+}
+
+table.bodyTable th, table.bodyTable td {
+ font-size: 1em;
+}
+
+table.bodyTable tr.a {
+ background-color: #ddd;
+}
+
+table.bodyTable tr.b {
+ background-color: #eee;
+}
+
+.source {
+ border: 1px solid #999;
+}
+dl {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #aaa;
+ background-color: #ffc;
+}
+dt {
+ color: #900;
+}
+#organizationLogo img, #projectLogo img, #projectLogo span{
+ margin: 8px;
+}
+#banner {
+ border-bottom: 1px solid #fff;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makebindist.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makebindist.sh
new file mode 100755
index 0000000000..8a274dc407
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makebindist.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TUSCANY_SCACPP_HOME=`pwd`
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"
+exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+cd $TUSCANY_SCACPP_HOME
+./configure --prefix=${TUSCANY_SCACPP_HOME}/deploy --enable-static=no
+make
+make install
+
+cd ${TUSCANY_SCACPP_HOME}/samples
+export TUSCANY_SCACPP=${TUSCANY_SCACPP_HOME}/deploy
+./configure --prefix=${TUSCANY_SCACPP_HOME}/deploy --enable-static=no
+make
+make install
+
+cd ${TUSCANY_SCACPP_HOME}/deploy
+for i in `find . -name "*.la"`
+do
+ rm $i
+done
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makedist.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makedist.sh
new file mode 100755
index 0000000000..b90ce68489
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/makedist.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TUSCANY_SCACPP_HOME=`pwd`
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"
+exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+cd ${TUSCANY_SCACPP_HOME}/samples
+./autogen.sh
+./configure --prefix=${TUSCANY_SCACPP_HOME}/deploy --enable-static=no
+
+cd $TUSCANY_SCACPP_HOME
+./autogen.sh
+./configure --prefix=${TUSCANY_SCACPP_HOME}/deploy --enable-static=no
+
+make bindist
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/build.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/build.cmd
new file mode 100644
index 0000000000..cd1a2eeaae
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/build.cmd
@@ -0,0 +1,19 @@
+@echo off
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+setlocal
+cd tuscany_sca_test
+nmake -f tuscany_sca_test.mak CFG="tuscany_sca_test - Win32 Release"
+cd ..
+endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.dsw b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.dsw
new file mode 100644
index 0000000000..89d7942d77
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.dsw
@@ -0,0 +1,98 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "tuscany_sca"=.\tuscany_sca\tuscany_sca.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "tuscany_sca_test"=.\tuscany_sca_test\tuscany_sca_test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name tuscany_sca
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name tuscany_sca_test_CustomerInfo
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name tuscany_sca_test_MyValue
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name tuscany_sca_ws_service
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "tuscany_sca_test_CustomerInfo"=.\tuscany_sca_test_CustomerInfo\tuscany_sca_test_CustomerInfo.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name tuscany_sca
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "tuscany_sca_test_MyValue"=.\tuscany_sca_test_MyValue\tuscany_sca_test_MyValue.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name tuscany_sca
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "tuscany_sca_ws_service"=.\tuscany_sca_ws_service\tuscany_sca_ws_service.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name tuscany_sca
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.ncb b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.ncb
new file mode 100644
index 0000000000..dc29a53257
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.ncb
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.opt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.opt
new file mode 100644
index 0000000000..3a2046245e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca.opt
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/Build Instructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/Build Instructions.txt
new file mode 100644
index 0000000000..9f298f0707
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/Build Instructions.txt
@@ -0,0 +1,30 @@
+Tuscany SCA Build Instructions
+==============================
+
+1) Set the environment variable TUSCANY_SDOCPP to the path of an SDO driver
+
+2) Set the environment variable AXIS2C_HOME to the path of Axis2C (Version 0.92)
+
+NOTE: The environment variables must be set BEFORE launching Visual Studio
+
+3) Build->Rebuild All
+
+The output for the build will be in tuscany\cpp\sca\include, lib and bin
+
+To run the test from a command prompt:
+
+1) Set the environment variable TUSCANY_SCACPP to the location of the built SCA
+ (...tuscany\cpp\sca\deploy)
+
+2) Set the environment variable TUSCANY_SCACPP_SYSTEM_ROOT to the location of the test system
+ ...tuscany\cpp\sca\projects\tuscany_sca\tuscany_sca_test\testSCASystem
+
+3) Add %TUSCANY_SCACPP%\lib and %TUSCANY_SDOCPP%\lib to the PATH
+ (ensure required libraries for SDO are also on the path. e.g. libxml2)
+
+4) cd %TUSCANY_SCACPP%\..\projects\tuscany_sca\tuscany_sca_test\Debug
+
+5) tuscany_sca_test
+
+NOTE: To run the test from the workspace the environment variables must be set
+ BEFORE launching Visual Studio
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.dsp
new file mode 100644
index 0000000000..c898f3da3f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.dsp
@@ -0,0 +1,537 @@
+# Microsoft Developer Studio Project File - Name="tuscany_sca" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=tuscany_sca - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca.mak" CFG="tuscany_sca - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tuscany_sca - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SCA_EXPORTS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 axis2_engine.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /dll /machine:I386 /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=del ..\..\..\deploy\bin\tuscany_sca.* del ..\..\..\deploy\lib\*.lib copy ..\..\..\runtime\core\src\osoa\sca\*.h ..\..\..\deploy\include\osoa\sca copy ..\..\..\runtime\core\src\tuscany\sca\core\*.h ..\..\..\deploy\include\tuscany\sca\core copy ..\..\..\runtime\core\src\tuscany\sca\model\*.h ..\..\..\deploy\include\tuscany\sca\model copy ..\..\..\runtime\core\src\tuscany\sca\util\*.h ..\..\..\deploy\include\tuscany\sca\util copy ..\..\..\runtime\core\src\tuscany\sca\ws\*.h ..\..\..\deploy\include\tuscany\sca\ws copy Release\tuscany_sca.dll ..\..\..\deploy\bin copy Release\tuscany_sca.lib ..\..\..\deploy\lib copy ..\..\..\xsd\*.* ..\..\..\deploy\xsd
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "tuscany_sca - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SCA_EXPORTS" /FD /GZ /c
+# SUBTRACT CPP /X
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 axis2_engine.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=del ..\..\..\deploy\bin\tuscany_sca.* del ..\..\..\deploy\lib\*.lib copy ..\..\..\runtime\core\src\osoa\sca\*.h ..\..\..\deploy\include\osoa\sca copy ..\..\..\runtime\core\src\tuscany\sca\core\*.h ..\..\..\deploy\include\tuscany\sca\core copy ..\..\..\runtime\core\src\tuscany\sca\model\*.h ..\..\..\deploy\include\tuscany\sca\model copy ..\..\..\runtime\core\src\tuscany\sca\util\*.h ..\..\..\deploy\include\tuscany\sca\util copy ..\..\..\runtime\core\src\tuscany\sca\ws\*.h ..\..\..\deploy\include\tuscany\sca\ws copy Debug\tuscany_sca.dll ..\..\..\deploy\bin copy Debug\tuscany_sca.pdb ..\..\..\deploy\bin copy Debug\tuscany_sca.lib ..\..\..\deploy\lib copy ..\..\..\xsd\*.* ..\..\..\deploy\xsd
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "tuscany_sca - Win32 Release"
+# Name "tuscany_sca - Win32 Debug"
+# Begin Group "osoa/sca"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ComponentContext.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ComponentContext.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ComponentContextImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ComponentContextImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\export.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ModuleContext.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ModuleContext.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ModuleContextImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ModuleContextImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\SCA.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\sca.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ServiceList.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ServiceList.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ServiceRuntimeException.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ServiceRuntimeException.h
+# End Source File
+# End Group
+# Begin Group "tuscany/sca"
+
+# PROP Default_Filter ""
+# Begin Group "core"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ComponentServiceWrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ComponentServiceWrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ExternalServiceWrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ExternalServiceWrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\Operation.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\Operation.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\SCAEntryPoint.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\SCAEntryPoint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\SCARuntime.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\SCARuntime.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ServiceProxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ServiceProxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ServiceWrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ServiceWrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\TuscanyRuntime.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\TuscanyRuntime.h
+# End Source File
+# End Group
+# Begin Group "model"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Binding.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Binding.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Component.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Component.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\CPPImplementation.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\CPPImplementation.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\CPPInterface.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\CPPInterface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\EntryPoint.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\EntryPoint.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ExternalService.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ExternalService.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Implementation.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Implementation.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Interface.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Interface.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ModelLoader.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ModelLoader.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Module.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Module.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Service.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Service.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ServiceReference.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ServiceReference.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Subsystem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Subsystem.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\System.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\System.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Wire.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Wire.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WireTarget.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WireTarget.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WSBinding.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WSBinding.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Wsdl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Wsdl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WsdlOperation.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WsdlOperation.h
+# End Source File
+# End Group
+# Begin Group "util"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\DefaultLogWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\DefaultLogWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Exceptions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\File.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\File.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\FileLogWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\FileLogWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Library.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Library.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Logger.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Logger.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Logging.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\LogWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\LogWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Utils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Utils.h
+# End Source File
+# End Group
+# Begin Group "ws"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\runtime\ws_reference\axis2c\src\Axis2Client.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\ws_reference\axis2c\src\Axis2Client.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\ws\EntryPointProxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\ws\EntryPointProxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\ws_reference\axis2c\src\WSServiceWrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\ws\WSServiceWrapper.h
+# End Source File
+# End Group
+# End Group
+# Begin Group "xsd"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-binding-sca.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-binding-webservice.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-core.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-implementation-cpp.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-implementation-java.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-interface-cpp.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-interface-java.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\xsd\sca-interface-wsdl.xsd"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\xsd\sca.xsd
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\xsd\tuscany.xsd
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=".\Build Instructions.txt"
+# End Source File
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.mak
new file mode 100644
index 0000000000..e711264c36
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca/tuscany_sca.mak
@@ -0,0 +1,669 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on tuscany_sca.dsp
+!IF "$(CFG)" == ""
+CFG=tuscany_sca - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to tuscany_sca - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "tuscany_sca - Win32 Release" && "$(CFG)" != "tuscany_sca - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca.mak" CFG="tuscany_sca - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\tuscany_sca.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\Axis2Client.obj"
+ -@erase "$(INTDIR)\Binding.obj"
+ -@erase "$(INTDIR)\Component.obj"
+ -@erase "$(INTDIR)\ComponentContext.obj"
+ -@erase "$(INTDIR)\ComponentContextImpl.obj"
+ -@erase "$(INTDIR)\ComponentServiceWrapper.obj"
+ -@erase "$(INTDIR)\CPPImplementation.obj"
+ -@erase "$(INTDIR)\CPPInterface.obj"
+ -@erase "$(INTDIR)\DefaultLogWriter.obj"
+ -@erase "$(INTDIR)\EntryPoint.obj"
+ -@erase "$(INTDIR)\EntryPointProxy.obj"
+ -@erase "$(INTDIR)\ExternalService.obj"
+ -@erase "$(INTDIR)\ExternalServiceWrapper.obj"
+ -@erase "$(INTDIR)\File.obj"
+ -@erase "$(INTDIR)\FileLogWriter.obj"
+ -@erase "$(INTDIR)\Implementation.obj"
+ -@erase "$(INTDIR)\Interface.obj"
+ -@erase "$(INTDIR)\Library.obj"
+ -@erase "$(INTDIR)\Logger.obj"
+ -@erase "$(INTDIR)\LogWriter.obj"
+ -@erase "$(INTDIR)\ModelLoader.obj"
+ -@erase "$(INTDIR)\Module.obj"
+ -@erase "$(INTDIR)\ModuleContext.obj"
+ -@erase "$(INTDIR)\ModuleContextImpl.obj"
+ -@erase "$(INTDIR)\Operation.obj"
+ -@erase "$(INTDIR)\SCA.obj"
+ -@erase "$(INTDIR)\SCAEntryPoint.obj"
+ -@erase "$(INTDIR)\SCARuntime.obj"
+ -@erase "$(INTDIR)\Service.obj"
+ -@erase "$(INTDIR)\ServiceList.obj"
+ -@erase "$(INTDIR)\ServiceProxy.obj"
+ -@erase "$(INTDIR)\ServiceReference.obj"
+ -@erase "$(INTDIR)\ServiceRuntimeException.obj"
+ -@erase "$(INTDIR)\ServiceWrapper.obj"
+ -@erase "$(INTDIR)\Subsystem.obj"
+ -@erase "$(INTDIR)\System.obj"
+ -@erase "$(INTDIR)\TuscanyRuntime.obj"
+ -@erase "$(INTDIR)\Utils.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\Wire.obj"
+ -@erase "$(INTDIR)\WireTarget.obj"
+ -@erase "$(INTDIR)\WSBinding.obj"
+ -@erase "$(INTDIR)\Wsdl.obj"
+ -@erase "$(INTDIR)\WsdlOperation.obj"
+ -@erase "$(INTDIR)\WSServiceWrapper.obj"
+ -@erase "$(OUTDIR)\tuscany_sca.dll"
+ -@erase "$(OUTDIR)\tuscany_sca.exp"
+ -@erase "$(OUTDIR)\tuscany_sca.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SCA_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=axis2_engine.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\tuscany_sca.pdb" /machine:I386 /out:"$(OUTDIR)\tuscany_sca.dll" /implib:"$(OUTDIR)\tuscany_sca.lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\ComponentContext.obj" \
+ "$(INTDIR)\ComponentContextImpl.obj" \
+ "$(INTDIR)\ModuleContext.obj" \
+ "$(INTDIR)\ModuleContextImpl.obj" \
+ "$(INTDIR)\SCA.obj" \
+ "$(INTDIR)\ServiceList.obj" \
+ "$(INTDIR)\ServiceRuntimeException.obj" \
+ "$(INTDIR)\ComponentServiceWrapper.obj" \
+ "$(INTDIR)\ExternalServiceWrapper.obj" \
+ "$(INTDIR)\Operation.obj" \
+ "$(INTDIR)\SCAEntryPoint.obj" \
+ "$(INTDIR)\SCARuntime.obj" \
+ "$(INTDIR)\ServiceProxy.obj" \
+ "$(INTDIR)\ServiceWrapper.obj" \
+ "$(INTDIR)\TuscanyRuntime.obj" \
+ "$(INTDIR)\Binding.obj" \
+ "$(INTDIR)\Component.obj" \
+ "$(INTDIR)\CPPImplementation.obj" \
+ "$(INTDIR)\CPPInterface.obj" \
+ "$(INTDIR)\EntryPoint.obj" \
+ "$(INTDIR)\ExternalService.obj" \
+ "$(INTDIR)\Implementation.obj" \
+ "$(INTDIR)\Interface.obj" \
+ "$(INTDIR)\ModelLoader.obj" \
+ "$(INTDIR)\Module.obj" \
+ "$(INTDIR)\Service.obj" \
+ "$(INTDIR)\ServiceReference.obj" \
+ "$(INTDIR)\Subsystem.obj" \
+ "$(INTDIR)\System.obj" \
+ "$(INTDIR)\Wire.obj" \
+ "$(INTDIR)\WireTarget.obj" \
+ "$(INTDIR)\WSBinding.obj" \
+ "$(INTDIR)\Wsdl.obj" \
+ "$(INTDIR)\WsdlOperation.obj" \
+ "$(INTDIR)\DefaultLogWriter.obj" \
+ "$(INTDIR)\File.obj" \
+ "$(INTDIR)\FileLogWriter.obj" \
+ "$(INTDIR)\Library.obj" \
+ "$(INTDIR)\Logger.obj" \
+ "$(INTDIR)\LogWriter.obj" \
+ "$(INTDIR)\Utils.obj" \
+ "$(INTDIR)\Axis2Client.obj" \
+ "$(INTDIR)\EntryPointProxy.obj" \
+ "$(INTDIR)\WSServiceWrapper.obj"
+
+"$(OUTDIR)\tuscany_sca.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\tuscany_sca.dll"
+ del ..\..\..\deploy\bin\tuscany_sca.*
+ del ..\..\..\deploy\lib\*.lib
+ copy ..\..\..\runtime\core\src\osoa\sca\*.h ..\..\..\deploy\include\osoa\sca
+ copy ..\..\..\runtime\core\src\tuscany\sca\core\*.h ..\..\..\deploy\include\tuscany\sca\core
+ copy ..\..\..\runtime\core\src\tuscany\sca\model\*.h ..\..\..\deploy\include\tuscany\sca\model
+ copy ..\..\..\runtime\core\src\tuscany\sca\util\*.h ..\..\..\deploy\include\tuscany\sca\util
+ copy ..\..\..\runtime\core\src\tuscany\sca\ws\*.h ..\..\..\deploy\include\tuscany\sca\ws
+ copy Release\tuscany_sca.dll ..\..\..\deploy\bin
+ copy Release\tuscany_sca.lib ..\..\..\deploy\lib
+ copy ..\..\..\xsd\*.* ..\..\..\deploy\xsd
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "tuscany_sca - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\tuscany_sca.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\Axis2Client.obj"
+ -@erase "$(INTDIR)\Binding.obj"
+ -@erase "$(INTDIR)\Component.obj"
+ -@erase "$(INTDIR)\ComponentContext.obj"
+ -@erase "$(INTDIR)\ComponentContextImpl.obj"
+ -@erase "$(INTDIR)\ComponentServiceWrapper.obj"
+ -@erase "$(INTDIR)\CPPImplementation.obj"
+ -@erase "$(INTDIR)\CPPInterface.obj"
+ -@erase "$(INTDIR)\DefaultLogWriter.obj"
+ -@erase "$(INTDIR)\EntryPoint.obj"
+ -@erase "$(INTDIR)\EntryPointProxy.obj"
+ -@erase "$(INTDIR)\ExternalService.obj"
+ -@erase "$(INTDIR)\ExternalServiceWrapper.obj"
+ -@erase "$(INTDIR)\File.obj"
+ -@erase "$(INTDIR)\FileLogWriter.obj"
+ -@erase "$(INTDIR)\Implementation.obj"
+ -@erase "$(INTDIR)\Interface.obj"
+ -@erase "$(INTDIR)\Library.obj"
+ -@erase "$(INTDIR)\Logger.obj"
+ -@erase "$(INTDIR)\LogWriter.obj"
+ -@erase "$(INTDIR)\ModelLoader.obj"
+ -@erase "$(INTDIR)\Module.obj"
+ -@erase "$(INTDIR)\ModuleContext.obj"
+ -@erase "$(INTDIR)\ModuleContextImpl.obj"
+ -@erase "$(INTDIR)\Operation.obj"
+ -@erase "$(INTDIR)\SCA.obj"
+ -@erase "$(INTDIR)\SCAEntryPoint.obj"
+ -@erase "$(INTDIR)\SCARuntime.obj"
+ -@erase "$(INTDIR)\Service.obj"
+ -@erase "$(INTDIR)\ServiceList.obj"
+ -@erase "$(INTDIR)\ServiceProxy.obj"
+ -@erase "$(INTDIR)\ServiceReference.obj"
+ -@erase "$(INTDIR)\ServiceRuntimeException.obj"
+ -@erase "$(INTDIR)\ServiceWrapper.obj"
+ -@erase "$(INTDIR)\Subsystem.obj"
+ -@erase "$(INTDIR)\System.obj"
+ -@erase "$(INTDIR)\TuscanyRuntime.obj"
+ -@erase "$(INTDIR)\Utils.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\Wire.obj"
+ -@erase "$(INTDIR)\WireTarget.obj"
+ -@erase "$(INTDIR)\WSBinding.obj"
+ -@erase "$(INTDIR)\Wsdl.obj"
+ -@erase "$(INTDIR)\WsdlOperation.obj"
+ -@erase "$(INTDIR)\WSServiceWrapper.obj"
+ -@erase "$(OUTDIR)\tuscany_sca.dll"
+ -@erase "$(OUTDIR)\tuscany_sca.exp"
+ -@erase "$(OUTDIR)\tuscany_sca.ilk"
+ -@erase "$(OUTDIR)\tuscany_sca.lib"
+ -@erase "$(OUTDIR)\tuscany_sca.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SCA_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=axis2_engine.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\tuscany_sca.pdb" /debug /machine:I386 /out:"$(OUTDIR)\tuscany_sca.dll" /implib:"$(OUTDIR)\tuscany_sca.lib" /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\ComponentContext.obj" \
+ "$(INTDIR)\ComponentContextImpl.obj" \
+ "$(INTDIR)\ModuleContext.obj" \
+ "$(INTDIR)\ModuleContextImpl.obj" \
+ "$(INTDIR)\SCA.obj" \
+ "$(INTDIR)\ServiceList.obj" \
+ "$(INTDIR)\ServiceRuntimeException.obj" \
+ "$(INTDIR)\ComponentServiceWrapper.obj" \
+ "$(INTDIR)\ExternalServiceWrapper.obj" \
+ "$(INTDIR)\Operation.obj" \
+ "$(INTDIR)\SCAEntryPoint.obj" \
+ "$(INTDIR)\SCARuntime.obj" \
+ "$(INTDIR)\ServiceProxy.obj" \
+ "$(INTDIR)\ServiceWrapper.obj" \
+ "$(INTDIR)\TuscanyRuntime.obj" \
+ "$(INTDIR)\Binding.obj" \
+ "$(INTDIR)\Component.obj" \
+ "$(INTDIR)\CPPImplementation.obj" \
+ "$(INTDIR)\CPPInterface.obj" \
+ "$(INTDIR)\EntryPoint.obj" \
+ "$(INTDIR)\ExternalService.obj" \
+ "$(INTDIR)\Implementation.obj" \
+ "$(INTDIR)\Interface.obj" \
+ "$(INTDIR)\ModelLoader.obj" \
+ "$(INTDIR)\Module.obj" \
+ "$(INTDIR)\Service.obj" \
+ "$(INTDIR)\ServiceReference.obj" \
+ "$(INTDIR)\Subsystem.obj" \
+ "$(INTDIR)\System.obj" \
+ "$(INTDIR)\Wire.obj" \
+ "$(INTDIR)\WireTarget.obj" \
+ "$(INTDIR)\WSBinding.obj" \
+ "$(INTDIR)\Wsdl.obj" \
+ "$(INTDIR)\WsdlOperation.obj" \
+ "$(INTDIR)\DefaultLogWriter.obj" \
+ "$(INTDIR)\File.obj" \
+ "$(INTDIR)\FileLogWriter.obj" \
+ "$(INTDIR)\Library.obj" \
+ "$(INTDIR)\Logger.obj" \
+ "$(INTDIR)\LogWriter.obj" \
+ "$(INTDIR)\Utils.obj" \
+ "$(INTDIR)\Axis2Client.obj" \
+ "$(INTDIR)\EntryPointProxy.obj" \
+ "$(INTDIR)\WSServiceWrapper.obj"
+
+"$(OUTDIR)\tuscany_sca.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\tuscany_sca.dll"
+ del ..\..\..\deploy\bin\tuscany_sca.*
+ del ..\..\..\deploy\lib\*.lib
+ copy ..\..\..\runtime\core\src\osoa\sca\*.h ..\..\..\deploy\include\osoa\sca
+ copy ..\..\..\runtime\core\src\tuscany\sca\core\*.h ..\..\..\deploy\include\tuscany\sca\core
+ copy ..\..\..\runtime\core\src\tuscany\sca\model\*.h ..\..\..\deploy\include\tuscany\sca\model
+ copy ..\..\..\runtime\core\src\tuscany\sca\util\*.h ..\..\..\deploy\include\tuscany\sca\util
+ copy ..\..\..\runtime\core\src\tuscany\sca\ws\*.h ..\..\..\deploy\include\tuscany\sca\ws
+ copy Debug\tuscany_sca.dll ..\..\..\deploy\bin
+ copy Debug\tuscany_sca.pdb ..\..\..\deploy\bin
+ copy Debug\tuscany_sca.lib ..\..\..\deploy\lib
+ copy ..\..\..\xsd\*.* ..\..\..\deploy\xsd
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("tuscany_sca.dep")
+!INCLUDE "tuscany_sca.dep"
+!ELSE
+!MESSAGE Warning: cannot find "tuscany_sca.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "tuscany_sca - Win32 Release" || "$(CFG)" == "tuscany_sca - Win32 Debug"
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ComponentContext.cpp
+
+"$(INTDIR)\ComponentContext.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ComponentContextImpl.cpp
+
+"$(INTDIR)\ComponentContextImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ModuleContext.cpp
+
+"$(INTDIR)\ModuleContext.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ModuleContextImpl.cpp
+
+"$(INTDIR)\ModuleContextImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\SCA.cpp
+
+"$(INTDIR)\SCA.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ServiceList.cpp
+
+"$(INTDIR)\ServiceList.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\osoa\sca\ServiceRuntimeException.cpp
+
+"$(INTDIR)\ServiceRuntimeException.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ComponentServiceWrapper.cpp
+
+"$(INTDIR)\ComponentServiceWrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ExternalServiceWrapper.cpp
+
+"$(INTDIR)\ExternalServiceWrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\Operation.cpp
+
+"$(INTDIR)\Operation.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\SCAEntryPoint.cpp
+
+"$(INTDIR)\SCAEntryPoint.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\SCARuntime.cpp
+
+"$(INTDIR)\SCARuntime.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ServiceProxy.cpp
+
+"$(INTDIR)\ServiceProxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\ServiceWrapper.cpp
+
+"$(INTDIR)\ServiceWrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\core\TuscanyRuntime.cpp
+
+"$(INTDIR)\TuscanyRuntime.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Binding.cpp
+
+"$(INTDIR)\Binding.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Component.cpp
+
+"$(INTDIR)\Component.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\CPPImplementation.cpp
+
+"$(INTDIR)\CPPImplementation.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\CPPInterface.cpp
+
+"$(INTDIR)\CPPInterface.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\EntryPoint.cpp
+
+"$(INTDIR)\EntryPoint.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ExternalService.cpp
+
+"$(INTDIR)\ExternalService.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Implementation.cpp
+
+"$(INTDIR)\Implementation.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Interface.cpp
+
+"$(INTDIR)\Interface.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ModelLoader.cpp
+
+"$(INTDIR)\ModelLoader.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Module.cpp
+
+"$(INTDIR)\Module.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Service.cpp
+
+"$(INTDIR)\Service.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\ServiceReference.cpp
+
+"$(INTDIR)\ServiceReference.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Subsystem.cpp
+
+"$(INTDIR)\Subsystem.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\System.cpp
+
+"$(INTDIR)\System.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Wire.cpp
+
+"$(INTDIR)\Wire.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WireTarget.cpp
+
+"$(INTDIR)\WireTarget.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WSBinding.cpp
+
+"$(INTDIR)\WSBinding.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\Wsdl.cpp
+
+"$(INTDIR)\Wsdl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\model\WsdlOperation.cpp
+
+"$(INTDIR)\WsdlOperation.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\DefaultLogWriter.cpp
+
+"$(INTDIR)\DefaultLogWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\File.cpp
+
+"$(INTDIR)\File.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\FileLogWriter.cpp
+
+"$(INTDIR)\FileLogWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Library.cpp
+
+"$(INTDIR)\Library.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Logger.cpp
+
+"$(INTDIR)\Logger.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\LogWriter.cpp
+
+"$(INTDIR)\LogWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\util\Utils.cpp
+
+"$(INTDIR)\Utils.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\ws_reference\axis2c\src\Axis2Client.cpp
+
+"$(INTDIR)\Axis2Client.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\tuscany\sca\ws\EntryPointProxy.cpp
+
+"$(INTDIR)\EntryPointProxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\ws_reference\axis2c\src\WSServiceWrapper.cpp
+
+"$(INTDIR)\WSServiceWrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment
new file mode 100644
index 0000000000..c2c521ed96
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo.dll" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..48651b63fe
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType
new file mode 100644
index 0000000000..ace4154966
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="customerInfo">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl
new file mode 100644
index 0000000000..f82690e1ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.myvalue.org/MyValueService/"
+ targetNamespace="http://www.myvalue.org/MyValueService/">
+ <types>
+ <xs:schema targetNamespace="http://www.myvalue.org/MyValueService/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.myvalue.org/MyValueService/"
+ elementFormDefault="qualified">
+
+ <xs:element name="getMyValue">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="customerID" type="xs:string" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="getMyValueResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="myValue" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ </xs:schema>
+ </types>
+
+ <message name="getMyValueRequestMsg">
+ <part name="body" element="tns:getMyValue"/>
+ </message>
+
+ <message name="getMyValueResponseMsg">
+ <part name="body" element="tns:getMyValueResponse"/>
+ </message>
+
+ <portType name="MyValueServicePortType">
+ <operation name="getMyValue">
+ <input message="tns:getMyValueRequestMsg"/>
+ <output message="tns:getMyValueResponseMsg"/>
+ </operation>
+ </portType>
+
+ <binding name="MyValueServiceBinding" type="tns:MyValueServicePortType">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="getMyValue">
+ <soap:operation soapAction="MyValueService#getMyValue"/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ </binding>
+
+ <service name="MyValueService">
+ <port name="MyValueServicePort" binding="tns:MyValueServiceBinding">
+ <soap:address location="http://localhost/axis/MyValueService"/>
+ </port>
+ </service>
+</definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl
new file mode 100644
index 0000000000..26e2ea5cb8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.webserviceX.NET/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.webserviceX.NET/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+ <wsdl:types>
+ <s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET/">
+ <s:element name="GetQuote">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="symbol" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+
+ </s:element>
+ <s:element name="GetQuoteResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="GetQuoteResult" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="string" nillable="true" type="s:string" />
+
+ </s:schema>
+ </wsdl:types>
+ <wsdl:message name="GetQuoteSoapIn">
+ <wsdl:part name="parameters" element="tns:GetQuote" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteSoapOut">
+ <wsdl:part name="parameters" element="tns:GetQuoteResponse" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetIn">
+
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetOut">
+ <wsdl:part name="Body" element="tns:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostIn">
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostOut">
+
+ <wsdl:part name="Body" element="tns:string" />
+ </wsdl:message>
+ <wsdl:portType name="StockQuoteSoap">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteSoapIn" />
+ <wsdl:output message="tns:GetQuoteSoapOut" />
+ </wsdl:operation>
+
+ </wsdl:portType>
+ <wsdl:portType name="StockQuoteHttpGet">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteHttpGetIn" />
+ <wsdl:output message="tns:GetQuoteHttpGetOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:portType name="StockQuoteHttpPost">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteHttpPostIn" />
+ <wsdl:output message="tns:GetQuoteHttpPostOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
+
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
+ <wsdl:operation name="GetQuote">
+ <soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuoteHttpGet" type="tns:StockQuoteHttpGet">
+ <http:binding verb="GET" />
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+ <wsdl:input>
+ <http:urlEncoded />
+ </wsdl:input>
+
+ <wsdl:output>
+ <mime:mimeXml part="Body" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuoteHttpPost" type="tns:StockQuoteHttpPost">
+ <http:binding verb="POST" />
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded" />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:mimeXml part="Body" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="StockQuote">
+
+ <wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap">
+ <soap:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet">
+ <http:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuoteHttpPost" binding="tns:StockQuoteHttpPost">
+ <http:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+
+ </wsdl:service>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd
new file mode 100644
index 0000000000..5bce3a63dc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="StockQuotes" type="tStockQuotes"/>
+ <xs:complexType name="tStockQuotes">
+ <xs:sequence>
+ <xs:element name="Stock" type="tStock" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+
+ <xs:complexType name="tStock">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1" name="Symbol" type="xs:string"/>
+ <xs:element minOccurs="0" maxOccurs="1" name="Last" type="xs:float"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config
new file mode 100644
index 0000000000..a23cc3f5cd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="MyValueService.wsdl"/>
+ <file name="StockQuoteService.wsdl"/>
+ </wsdl>
+ <xsd>
+ <file name="StockQuoteTypes.xsd"/>
+ </xsd>
+</tuscany-model> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module
new file mode 100644
index 0000000000..8cc39ce7bb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="MyValueService.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="http://www.myvalue.org/MyValueService/#wsdl.endpoint(MyValueService/MyValueServicePort)"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue.dll" header="MyValueImpl.h"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h"/>
+ <binding.ws port="http://www.webserviceX.NET/#wsdl.endpoint(StockQuote/StockQuoteSoap)"/>
+ </externalService>
+
+ <wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire>
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem
new file mode 100644
index 0000000000..1b32bf8a93
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
+
+ name="SubSystem1">
+
+ <moduleComponent name="MyValue" module="MyValueServiceModule">
+
+ </moduleComponent>
+
+</subsystem>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.dsp
new file mode 100644
index 0000000000..1929fbfc7a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.dsp
@@ -0,0 +1,104 @@
+# Microsoft Developer Studio Project File - Name="tuscany_sca_test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=tuscany_sca_test - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test.mak" CFG="tuscany_sca_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "tuscany_sca_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tuscany_sca_test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/MyValue" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\tuscany_sca_test_MyValue\Release\MyValue.dll testSCASystem\modules\MyValueServiceModule copy ..\tuscany_sca_test_CustomerInfo\Release\CustomerInfo.dll testSCASystem\modules\MyValueServiceModule copy..\tuscany_sca\Release\*.dll Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/MyValue" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\tuscany_sca_test_MyValue\Debug\MyValue.dll testSCASystem\modules\MyValueServiceModule copy ..\tuscany_sca_test_MyValue\Debug\MyValue.pdb testSCASystem\modules\MyValueServiceModule copy ..\tuscany_sca_test_CustomerInfo\Debug\CustomerInfo.dll testSCASystem\modules\MyValueServiceModule copy ..\tuscany_sca_test_CustomerInfo\Debug\CustomerInfo.pdb testSCASystem\modules\MyValueServiceModule copy..\tuscany_sca\Debug\*.dll Debug copy..\tuscany_sca\Debug\*.pdb Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "tuscany_sca_test - Win32 Release"
+# Name "tuscany_sca_test - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\src\TestSCA.cpp
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.mak
new file mode 100644
index 0000000000..d643484ff4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test/tuscany_sca_test.mak
@@ -0,0 +1,353 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on tuscany_sca_test.dsp
+!IF "$(CFG)" == ""
+CFG=tuscany_sca_test - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to tuscany_sca_test - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "tuscany_sca_test - Win32 Release" && "$(CFG)" != "tuscany_sca_test - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test.mak" CFG="tuscany_sca_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "tuscany_sca_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca_test - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\tuscany_sca_test.exe"
+
+!ELSE
+
+ALL : "tuscany_sca_ws_service - Win32 Release" "tuscany_sca_test_MyValue - Win32 Release" "tuscany_sca_test_CustomerInfo - Win32 Release" "tuscany_sca - Win32 Release" "$(OUTDIR)\tuscany_sca_test.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 ReleaseCLEAN" "tuscany_sca_test_CustomerInfo - Win32 ReleaseCLEAN" "tuscany_sca_test_MyValue - Win32 ReleaseCLEAN" "tuscany_sca_ws_service - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\TestSCA.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\tuscany_sca_test.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/MyValue" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\tuscany_sca_test.pdb" /machine:I386 /out:"$(OUTDIR)\tuscany_sca_test.exe" /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\TestSCA.obj" \
+ "..\tuscany_sca\Release\tuscany_sca.lib" \
+ "..\tuscany_sca_test_CustomerInfo\Release\CustomerInfo.lib" \
+ "..\tuscany_sca_test_MyValue\Release\MyValue.lib" \
+ "..\tuscany_sca_ws_service\Release\tuscany_sca_ws_service.lib"
+
+"$(OUTDIR)\tuscany_sca_test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "tuscany_sca_ws_service - Win32 Release" "tuscany_sca_test_MyValue - Win32 Release" "tuscany_sca_test_CustomerInfo - Win32 Release" "tuscany_sca - Win32 Release" "$(OUTDIR)\tuscany_sca_test.exe"
+ copy ..\tuscany_sca_test_MyValue\Release\MyValue.dll testSCASystem\modules\MyValueServiceModule
+ copy ..\tuscany_sca_test_CustomerInfo\Release\CustomerInfo.dll testSCASystem\modules\MyValueServiceModule
+ copy..\tuscany_sca\Release\*.dll Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\tuscany_sca_test.exe"
+
+!ELSE
+
+ALL : "tuscany_sca_ws_service - Win32 Debug" "tuscany_sca_test_MyValue - Win32 Debug" "tuscany_sca_test_CustomerInfo - Win32 Debug" "tuscany_sca - Win32 Debug" "$(OUTDIR)\tuscany_sca_test.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 DebugCLEAN" "tuscany_sca_test_CustomerInfo - Win32 DebugCLEAN" "tuscany_sca_test_MyValue - Win32 DebugCLEAN" "tuscany_sca_ws_service - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\TestSCA.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\tuscany_sca_test.exe"
+ -@erase "$(OUTDIR)\tuscany_sca_test.ilk"
+ -@erase "$(OUTDIR)\tuscany_sca_test.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/MyValue" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\tuscany_sca_test.pdb" /debug /machine:I386 /out:"$(OUTDIR)\tuscany_sca_test.exe" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\TestSCA.obj" \
+ "..\tuscany_sca\Debug\tuscany_sca.lib" \
+ "..\tuscany_sca_test_CustomerInfo\Debug\CustomerInfo.lib" \
+ "..\tuscany_sca_test_MyValue\Debug\MyValue.lib" \
+ "..\tuscany_sca_ws_service\Debug\tuscany_sca_ws_service.lib"
+
+"$(OUTDIR)\tuscany_sca_test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "tuscany_sca_ws_service - Win32 Debug" "tuscany_sca_test_MyValue - Win32 Debug" "tuscany_sca_test_CustomerInfo - Win32 Debug" "tuscany_sca - Win32 Debug" "$(OUTDIR)\tuscany_sca_test.exe"
+ copy ..\tuscany_sca_test_MyValue\Debug\MyValue.dll testSCASystem\modules\MyValueServiceModule
+ copy ..\tuscany_sca_test_MyValue\Debug\MyValue.pdb testSCASystem\modules\MyValueServiceModule
+ copy ..\tuscany_sca_test_CustomerInfo\Debug\CustomerInfo.dll testSCASystem\modules\MyValueServiceModule
+ copy ..\tuscany_sca_test_CustomerInfo\Debug\CustomerInfo.pdb testSCASystem\modules\MyValueServiceModule
+ copy..\tuscany_sca\Debug\*.dll Debug
+ copy..\tuscany_sca\Debug\*.pdb Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("tuscany_sca_test.dep")
+!INCLUDE "tuscany_sca_test.dep"
+!ELSE
+!MESSAGE Warning: cannot find "tuscany_sca_test.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "tuscany_sca_test - Win32 Release" || "$(CFG)" == "tuscany_sca_test - Win32 Debug"
+SOURCE=..\..\..\runtime\core\test\src\TestSCA.cpp
+
+"$(INTDIR)\TestSCA.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "tuscany_sca_test - Win32 Release"
+
+"tuscany_sca - Win32 Release" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca - Win32 ReleaseCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test - Win32 Debug"
+
+"tuscany_sca - Win32 Debug" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca - Win32 DebugCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca_test - Win32 Release"
+
+"tuscany_sca_test_CustomerInfo - Win32 Release" :
+ cd "..\tuscany_sca_test_CustomerInfo"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_CustomerInfo.mak CFG="tuscany_sca_test_CustomerInfo - Win32 Release"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca_test_CustomerInfo - Win32 ReleaseCLEAN" :
+ cd "..\tuscany_sca_test_CustomerInfo"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_CustomerInfo.mak CFG="tuscany_sca_test_CustomerInfo - Win32 Release" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test - Win32 Debug"
+
+"tuscany_sca_test_CustomerInfo - Win32 Debug" :
+ cd "..\tuscany_sca_test_CustomerInfo"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_CustomerInfo.mak CFG="tuscany_sca_test_CustomerInfo - Win32 Debug"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca_test_CustomerInfo - Win32 DebugCLEAN" :
+ cd "..\tuscany_sca_test_CustomerInfo"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_CustomerInfo.mak CFG="tuscany_sca_test_CustomerInfo - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca_test - Win32 Release"
+
+"tuscany_sca_test_MyValue - Win32 Release" :
+ cd "..\tuscany_sca_test_MyValue"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_MyValue.mak CFG="tuscany_sca_test_MyValue - Win32 Release"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca_test_MyValue - Win32 ReleaseCLEAN" :
+ cd "..\tuscany_sca_test_MyValue"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_MyValue.mak CFG="tuscany_sca_test_MyValue - Win32 Release" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test - Win32 Debug"
+
+"tuscany_sca_test_MyValue - Win32 Debug" :
+ cd "..\tuscany_sca_test_MyValue"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_MyValue.mak CFG="tuscany_sca_test_MyValue - Win32 Debug"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca_test_MyValue - Win32 DebugCLEAN" :
+ cd "..\tuscany_sca_test_MyValue"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_test_MyValue.mak CFG="tuscany_sca_test_MyValue - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca_test - Win32 Release"
+
+"tuscany_sca_ws_service - Win32 Release" :
+ cd "..\tuscany_sca_ws_service"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_ws_service.mak CFG="tuscany_sca_ws_service - Win32 Release"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca_ws_service - Win32 ReleaseCLEAN" :
+ cd "..\tuscany_sca_ws_service"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_ws_service.mak CFG="tuscany_sca_ws_service - Win32 Release" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test - Win32 Debug"
+
+"tuscany_sca_ws_service - Win32 Debug" :
+ cd "..\tuscany_sca_ws_service"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_ws_service.mak CFG="tuscany_sca_ws_service - Win32 Debug"
+ cd "..\tuscany_sca_test"
+
+"tuscany_sca_ws_service - Win32 DebugCLEAN" :
+ cd "..\tuscany_sca_ws_service"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca_ws_service.mak CFG="tuscany_sca_ws_service - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.dsp
new file mode 100644
index 0000000000..53677c939e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.dsp
@@ -0,0 +1,133 @@
+# Microsoft Developer Studio Project File - Name="tuscany_sca_test_CustomerInfo" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=tuscany_sca_test_CustomerInfo - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test_CustomerInfo.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test_CustomerInfo.mak" CFG="tuscany_sca_test_CustomerInfo - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_test_CustomerInfo - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca_test_CustomerInfo - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /machine:I386 /out:"Release/CustomerInfo.dll" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"..\..\..\deploy\lib"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /debug /machine:I386 /out:"Debug/CustomerInfo.dll" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "tuscany_sca_test_CustomerInfo - Win32 Release"
+# Name "tuscany_sca_test_CustomerInfo - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Wrapper.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.mak
new file mode 100644
index 0000000000..289fec0deb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.mak
@@ -0,0 +1,264 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on tuscany_sca_test_CustomerInfo.dsp
+!IF "$(CFG)" == ""
+CFG=tuscany_sca_test_CustomerInfo - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to tuscany_sca_test_CustomerInfo - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "tuscany_sca_test_CustomerInfo - Win32 Release" && "$(CFG)" != "tuscany_sca_test_CustomerInfo - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test_CustomerInfo.mak" CFG="tuscany_sca_test_CustomerInfo - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_test_CustomerInfo - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca_test_CustomerInfo - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\CustomerInfo.dll"
+
+!ELSE
+
+ALL : "tuscany_sca - Win32 Release" "$(OUTDIR)\CustomerInfo.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\CustomerInfoImpl.obj"
+ -@erase "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Proxy.obj"
+ -@erase "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Wrapper.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\CustomerInfo.dll"
+ -@erase "$(OUTDIR)\CustomerInfo.exp"
+ -@erase "$(OUTDIR)\CustomerInfo.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_test_CustomerInfo.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\CustomerInfo.pdb" /machine:I386 /out:"$(OUTDIR)\CustomerInfo.dll" /implib:"$(OUTDIR)\CustomerInfo.lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"..\..\..\deploy\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\CustomerInfoImpl.obj" \
+ "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Proxy.obj" \
+ "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Wrapper.obj" \
+ "..\tuscany_sca\Release\tuscany_sca.lib"
+
+"$(OUTDIR)\CustomerInfo.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\CustomerInfo.dll"
+
+!ELSE
+
+ALL : "tuscany_sca - Win32 Debug" "$(OUTDIR)\CustomerInfo.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\CustomerInfoImpl.obj"
+ -@erase "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Proxy.obj"
+ -@erase "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Wrapper.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\CustomerInfo.dll"
+ -@erase "$(OUTDIR)\CustomerInfo.exp"
+ -@erase "$(OUTDIR)\CustomerInfo.ilk"
+ -@erase "$(OUTDIR)\CustomerInfo.lib"
+ -@erase "$(OUTDIR)\CustomerInfo.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_test_CustomerInfo.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\CustomerInfo.pdb" /debug /machine:I386 /out:"$(OUTDIR)\CustomerInfo.dll" /implib:"$(OUTDIR)\CustomerInfo.lib" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\CustomerInfoImpl.obj" \
+ "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Proxy.obj" \
+ "$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Wrapper.obj" \
+ "..\tuscany_sca\Debug\tuscany_sca.lib"
+
+"$(OUTDIR)\CustomerInfo.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("tuscany_sca_test_CustomerInfo.dep")
+!INCLUDE "tuscany_sca_test_CustomerInfo.dep"
+!ELSE
+!MESSAGE Warning: cannot find "tuscany_sca_test_CustomerInfo.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Release" || "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Debug"
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl.cpp
+
+"$(INTDIR)\CustomerInfoImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Proxy.cpp
+
+"$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
+
+"$(INTDIR)\CustomerInfoImpl_CustomerInfoService_Wrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Release"
+
+"tuscany_sca - Win32 Release" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release"
+ cd "..\tuscany_sca_test_CustomerInfo"
+
+"tuscany_sca - Win32 ReleaseCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test_CustomerInfo"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test_CustomerInfo - Win32 Debug"
+
+"tuscany_sca - Win32 Debug" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug"
+ cd "..\tuscany_sca_test_CustomerInfo"
+
+"tuscany_sca - Win32 DebugCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test_CustomerInfo"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.dsp
new file mode 100644
index 0000000000..83a980a9a2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.dsp
@@ -0,0 +1,153 @@
+# Microsoft Developer Studio Project File - Name="tuscany_sca_test_MyValue" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=tuscany_sca_test_MyValue - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test_MyValue.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test_MyValue.mak" CFG="tuscany_sca_test_MyValue - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_test_MyValue - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca_test_MyValue - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_MYVALUE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/CustomerInfo" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_MYVALUE_EXPORTS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /machine:I386 /out:"Release/MyValue.dll" /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_MYVALUE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/CustomerInfo" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_MYVALUE_EXPORTS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /debug /machine:I386 /out:"Debug/MyValue.dll" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "tuscany_sca_test_MyValue - Win32 Release"
+# Name "tuscany_sca_test_MyValue - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_customerInfo_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Wrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_stockQuote_Proxy.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_customerInfo_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Wrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_stockQuote_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\MyValue\StockQuoteService.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.mak
new file mode 100644
index 0000000000..1bd49a885b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.mak
@@ -0,0 +1,284 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on tuscany_sca_test_MyValue.dsp
+!IF "$(CFG)" == ""
+CFG=tuscany_sca_test_MyValue - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to tuscany_sca_test_MyValue - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "tuscany_sca_test_MyValue - Win32 Release" && "$(CFG)" != "tuscany_sca_test_MyValue - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_test_MyValue.mak" CFG="tuscany_sca_test_MyValue - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_test_MyValue - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca_test_MyValue - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\MyValue.dll"
+
+!ELSE
+
+ALL : "tuscany_sca - Win32 Release" "$(OUTDIR)\MyValue.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\MyValueImpl.obj"
+ -@erase "$(INTDIR)\MyValueImpl_customerInfo_Proxy.obj"
+ -@erase "$(INTDIR)\MyValueImpl_MyValueService_Proxy.obj"
+ -@erase "$(INTDIR)\MyValueImpl_MyValueService_Wrapper.obj"
+ -@erase "$(INTDIR)\MyValueImpl_stockQuote_Proxy.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\MyValue.dll"
+ -@erase "$(OUTDIR)\MyValue.exp"
+ -@erase "$(OUTDIR)\MyValue.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/CustomerInfo" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_MYVALUE_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_test_MyValue.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\MyValue.pdb" /machine:I386 /out:"$(OUTDIR)\MyValue.dll" /implib:"$(OUTDIR)\MyValue.lib" /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\MyValueImpl.obj" \
+ "$(INTDIR)\MyValueImpl_customerInfo_Proxy.obj" \
+ "$(INTDIR)\MyValueImpl_MyValueService_Proxy.obj" \
+ "$(INTDIR)\MyValueImpl_MyValueService_Wrapper.obj" \
+ "$(INTDIR)\MyValueImpl_stockQuote_Proxy.obj" \
+ "..\tuscany_sca\Release\tuscany_sca.lib"
+
+"$(OUTDIR)\MyValue.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\MyValue.dll"
+
+!ELSE
+
+ALL : "tuscany_sca - Win32 Debug" "$(OUTDIR)\MyValue.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\MyValueImpl.obj"
+ -@erase "$(INTDIR)\MyValueImpl_customerInfo_Proxy.obj"
+ -@erase "$(INTDIR)\MyValueImpl_MyValueService_Proxy.obj"
+ -@erase "$(INTDIR)\MyValueImpl_MyValueService_Wrapper.obj"
+ -@erase "$(INTDIR)\MyValueImpl_stockQuote_Proxy.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\MyValue.dll"
+ -@erase "$(OUTDIR)\MyValue.exp"
+ -@erase "$(OUTDIR)\MyValue.ilk"
+ -@erase "$(OUTDIR)\MyValue.lib"
+ -@erase "$(OUTDIR)\MyValue.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "../../../runtime/core/test/CustomerInfo" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_TEST_MYVALUE_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_test_MyValue.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\MyValue.pdb" /debug /machine:I386 /out:"$(OUTDIR)\MyValue.dll" /implib:"$(OUTDIR)\MyValue.lib" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\MyValueImpl.obj" \
+ "$(INTDIR)\MyValueImpl_customerInfo_Proxy.obj" \
+ "$(INTDIR)\MyValueImpl_MyValueService_Proxy.obj" \
+ "$(INTDIR)\MyValueImpl_MyValueService_Wrapper.obj" \
+ "$(INTDIR)\MyValueImpl_stockQuote_Proxy.obj" \
+ "..\tuscany_sca\Debug\tuscany_sca.lib"
+
+"$(OUTDIR)\MyValue.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("tuscany_sca_test_MyValue.dep")
+!INCLUDE "tuscany_sca_test_MyValue.dep"
+!ELSE
+!MESSAGE Warning: cannot find "tuscany_sca_test_MyValue.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Release" || "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Debug"
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl.cpp
+
+"$(INTDIR)\MyValueImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_customerInfo_Proxy.cpp
+
+"$(INTDIR)\MyValueImpl_customerInfo_Proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Proxy.cpp
+
+"$(INTDIR)\MyValueImpl_MyValueService_Proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Wrapper.cpp
+
+"$(INTDIR)\MyValueImpl_MyValueService_Wrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\MyValue\MyValueImpl_stockQuote_Proxy.cpp
+
+"$(INTDIR)\MyValueImpl_stockQuote_Proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Release"
+
+"tuscany_sca - Win32 Release" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release"
+ cd "..\tuscany_sca_test_MyValue"
+
+"tuscany_sca - Win32 ReleaseCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test_MyValue"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_test_MyValue - Win32 Debug"
+
+"tuscany_sca - Win32 Debug" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug"
+ cd "..\tuscany_sca_test_MyValue"
+
+"tuscany_sca - Win32 DebugCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_test_MyValue"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.dsp
new file mode 100644
index 0000000000..c25fdb3536
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.dsp
@@ -0,0 +1,125 @@
+# Microsoft Developer Studio Project File - Name="tuscany_sca_ws_service" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=tuscany_sca_ws_service - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_ws_service.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_ws_service.mak" CFG="tuscany_sca_ws_service - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_ws_service - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca_ws_service - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "tuscany_sca_ws_service - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_WS_SERVICE_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_WS_SERVICE_EXPORTS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 axis2_util.lib axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axis2_engine.lib tuscany_sdo_axiom.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /machine:I386 /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy Release\tuscany_sca_ws_service.lib ..\..\..\deploy\lib copy Release\tuscany_sca_ws_service.dll ..\..\..\deploy\bin
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "tuscany_sca_ws_service - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_WS_SERVICE_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_WS_SERVICE_EXPORTS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 axis2_util.lib axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axis2_engine.lib tuscany_sdo_axiom.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy Debug\tuscany_sca_ws_service.dll ..\..\..\deploy\bin copy Debug\tuscany_sca_ws_service.pdb ..\..\..\deploy\bin copy Debug\tuscany_sca_ws_service.lib ..\..\..\deploy\lib
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "tuscany_sca_ws_service - Win32 Release"
+# Name "tuscany_sca_ws_service - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\ws_service\axis2c\src\Axis2EntryPointService_skeleton.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\ws_service\axis2c\src\Axis2Utils.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\ws_service\axis2c\src\Axis2Utils.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.mak
new file mode 100644
index 0000000000..49674c1f23
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.mak
@@ -0,0 +1,283 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on tuscany_sca_ws_service.dsp
+!IF "$(CFG)" == ""
+CFG=tuscany_sca_ws_service - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to tuscany_sca_ws_service - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "tuscany_sca_ws_service - Win32 Release" && "$(CFG)" != "tuscany_sca_ws_service - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "tuscany_sca_ws_service.mak" CFG="tuscany_sca_ws_service - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "tuscany_sca_ws_service - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "tuscany_sca_ws_service - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "tuscany_sca_ws_service - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\tuscany_sca_ws_service.dll"
+
+!ELSE
+
+ALL : "tuscany_sca - Win32 Release" "$(OUTDIR)\tuscany_sca_ws_service.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\Axis2EntryPointService_skeleton.obj"
+ -@erase "$(INTDIR)\Axis2Utils.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.dll"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.exp"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_WS_SERVICE_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_ws_service.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=axis2_util.lib axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axis2_engine.lib tuscany_sdo_axiom.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\tuscany_sca_ws_service.pdb" /machine:I386 /out:"$(OUTDIR)\tuscany_sca_ws_service.dll" /implib:"$(OUTDIR)\tuscany_sca_ws_service.lib" /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\Axis2EntryPointService_skeleton.obj" \
+ "$(INTDIR)\Axis2Utils.obj" \
+ "..\tuscany_sca\Release\tuscany_sca.lib"
+
+"$(OUTDIR)\tuscany_sca_ws_service.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "tuscany_sca - Win32 Release" "$(OUTDIR)\tuscany_sca_ws_service.dll"
+ copy Release\tuscany_sca_ws_service.lib ..\..\..\deploy\lib
+ copy Release\tuscany_sca_ws_service.dll ..\..\..\deploy\bin
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_ws_service - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\tuscany_sca_ws_service.dll"
+
+!ELSE
+
+ALL : "tuscany_sca - Win32 Debug" "$(OUTDIR)\tuscany_sca_ws_service.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"tuscany_sca - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\Axis2EntryPointService_skeleton.obj"
+ -@erase "$(INTDIR)\Axis2Utils.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.dll"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.exp"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.ilk"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.lib"
+ -@erase "$(OUTDIR)\tuscany_sca_ws_service.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "../../../runtime/core/src" /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TUSCANY_SCA_WS_SERVICE_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\tuscany_sca_ws_service.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=axis2_util.lib axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib axis2_engine.lib tuscany_sdo_axiom.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\tuscany_sca_ws_service.pdb" /debug /machine:I386 /out:"$(OUTDIR)\tuscany_sca_ws_service.dll" /implib:"$(OUTDIR)\tuscany_sca_ws_service.lib" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\Axis2EntryPointService_skeleton.obj" \
+ "$(INTDIR)\Axis2Utils.obj" \
+ "..\tuscany_sca\Debug\tuscany_sca.lib"
+
+"$(OUTDIR)\tuscany_sca_ws_service.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "tuscany_sca - Win32 Debug" "$(OUTDIR)\tuscany_sca_ws_service.dll"
+ copy Debug\tuscany_sca_ws_service.dll ..\..\..\deploy\bin
+ copy Debug\tuscany_sca_ws_service.pdb ..\..\..\deploy\bin
+ copy Debug\tuscany_sca_ws_service.lib ..\..\..\deploy\lib
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("tuscany_sca_ws_service.dep")
+!INCLUDE "tuscany_sca_ws_service.dep"
+!ELSE
+!MESSAGE Warning: cannot find "tuscany_sca_ws_service.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "tuscany_sca_ws_service - Win32 Release" || "$(CFG)" == "tuscany_sca_ws_service - Win32 Debug"
+SOURCE=..\..\..\runtime\ws_service\axis2c\src\Axis2EntryPointService_skeleton.cpp
+
+"$(INTDIR)\Axis2EntryPointService_skeleton.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\ws_service\axis2c\src\Axis2Utils.cpp
+
+"$(INTDIR)\Axis2Utils.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "tuscany_sca_ws_service - Win32 Release"
+
+"tuscany_sca - Win32 Release" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release"
+ cd "..\tuscany_sca_ws_service"
+
+"tuscany_sca - Win32 ReleaseCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Release" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_ws_service"
+
+!ELSEIF "$(CFG)" == "tuscany_sca_ws_service - Win32 Debug"
+
+"tuscany_sca - Win32 Debug" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug"
+ cd "..\tuscany_sca_ws_service"
+
+"tuscany_sca - Win32 DebugCLEAN" :
+ cd "..\tuscany_sca"
+ $(MAKE) /$(MAKEFLAGS) /F .\tuscany_sca.mak CFG="tuscany_sca - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\tuscany_sca_ws_service"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service_axis2/tuscany_sca_ws_service_axis2.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service_axis2/tuscany_sca_ws_service_axis2.vcproj
new file mode 100644
index 0000000000..39e90539a3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projects/tuscany_sca/tuscany_sca_ws_service_axis2/tuscany_sca_ws_service_axis2.vcproj
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="tuscany_sca_ws_service_axis2"
+ ProjectGUID="{96EB08C3-5CF3-4597-B9FB-0B6732FB84B2}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(AXIS2C_HOME)/include,$(TUSCANY_SCACPP)/include,$(TUSCANY_SDOCPP)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tuscany_sca.lib tuscany_sdo_axiom.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axis2_om.lib"
+ OutputFile="$(OutDir)/tuscany_ws_service.dll"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(TUSCANY_SCACPP)/lib,$(TUSCANY_SDOCPP)/lib,$(AXIS2C_HOME)/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/tuscany_sca_ws_service_axis2.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="del ..\..\..\bin\tuscany_ws_service.*
+copy Debug\tuscany_ws_service.dll ..\..\..\bin
+copy Debug\tuscany_ws_service.pdb ..\..\..\bin
+copy Debug\tuscany_ws_service.lib ..\..\..\lib"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/tuscany_sca_ws_service_axis2.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath="..\..\..\runtime\ws_service\axis2c\src\Axis2EntryPointService_skeleton.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\ws_service\axis2c\src\Axis2Utils.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\ws_service\axis2c\src\Axis2Utils.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.sln b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.sln
new file mode 100644
index 0000000000..ec07ab3877
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.sln
@@ -0,0 +1,52 @@
+Microsoft Visual Studio Solution File, Format Version 7.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tuscany_sca", "tuscany_sca\tuscany_sca.vcproj", "{2FC1B037-C30C-4B63-949E-B7467529671F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tuscany_sca_test", "tuscany_sca_test\tuscany_sca_test.vcproj", "{2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tuscany_sca_test_CustomerInfo", "tuscany_sca_test_CustomerInfo\tuscany_sca_test_CustomerInfo.vcproj", "{4CA34112-DC16-42E5-B6C6-66742E4F5CE1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tuscany_sca_test_MyValue", "tuscany_sca_test_MyValue\tuscany_sca_test_MyValue.vcproj", "{664DD6E6-B551-45D3-83A9-49FFAEB4A4D2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tuscany_sca_ws_service", "tuscany_sca_ws_service\tuscany_sca_ws_service.vcproj", "{A5943537-08D7-4A51-A7F0-B24400810738}"
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ ConfigName.0 = Debug
+ ConfigName.1 = Release
+ EndGlobalSection
+ GlobalSection(ProjectDependencies) = postSolution
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.0 = {A5943537-08D7-4A51-A7F0-B24400810738}
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.1 = {664DD6E6-B551-45D3-83A9-49FFAEB4A4D2}
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.2 = {4CA34112-DC16-42E5-B6C6-66742E4F5CE1}
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.3 = {2FC1B037-C30C-4B63-949E-B7467529671F}
+ {4CA34112-DC16-42E5-B6C6-66742E4F5CE1}.0 = {2FC1B037-C30C-4B63-949E-B7467529671F}
+ {664DD6E6-B551-45D3-83A9-49FFAEB4A4D2}.0 = {2FC1B037-C30C-4B63-949E-B7467529671F}
+ {A5943537-08D7-4A51-A7F0-B24400810738}.0 = {2FC1B037-C30C-4B63-949E-B7467529671F}
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {2FC1B037-C30C-4B63-949E-B7467529671F}.Debug.ActiveCfg = Debug|Win32
+ {2FC1B037-C30C-4B63-949E-B7467529671F}.Debug.Build.0 = Debug|Win32
+ {2FC1B037-C30C-4B63-949E-B7467529671F}.Release.ActiveCfg = Release|Win32
+ {2FC1B037-C30C-4B63-949E-B7467529671F}.Release.Build.0 = Release|Win32
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.Debug.ActiveCfg = Debug|Win32
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.Debug.Build.0 = Debug|Win32
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.Release.ActiveCfg = Release|Win32
+ {2E87E2DB-3BE9-4FCF-9D16-9725A62A6BC5}.Release.Build.0 = Release|Win32
+ {4CA34112-DC16-42E5-B6C6-66742E4F5CE1}.Debug.ActiveCfg = Debug|Win32
+ {4CA34112-DC16-42E5-B6C6-66742E4F5CE1}.Debug.Build.0 = Debug|Win32
+ {4CA34112-DC16-42E5-B6C6-66742E4F5CE1}.Release.ActiveCfg = Release|Win32
+ {4CA34112-DC16-42E5-B6C6-66742E4F5CE1}.Release.Build.0 = Release|Win32
+ {664DD6E6-B551-45D3-83A9-49FFAEB4A4D2}.Debug.ActiveCfg = Debug|Win32
+ {664DD6E6-B551-45D3-83A9-49FFAEB4A4D2}.Debug.Build.0 = Debug|Win32
+ {664DD6E6-B551-45D3-83A9-49FFAEB4A4D2}.Release.ActiveCfg = Release|Win32
+ {664DD6E6-B551-45D3-83A9-49FFAEB4A4D2}.Release.Build.0 = Release|Win32
+ {A5943537-08D7-4A51-A7F0-B24400810738}.Debug.ActiveCfg = Debug|Win32
+ {A5943537-08D7-4A51-A7F0-B24400810738}.Debug.Build.0 = Debug|Win32
+ {A5943537-08D7-4A51-A7F0-B24400810738}.Release.ActiveCfg = Release|Win32
+ {A5943537-08D7-4A51-A7F0-B24400810738}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.suo b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.suo
new file mode 100644
index 0000000000..71c843b643
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca.suo
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/Build Instructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/Build Instructions.txt
new file mode 100644
index 0000000000..847dd5d492
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/Build Instructions.txt
@@ -0,0 +1,30 @@
+Tuscany SCA Build Instructions
+==============================
+
+1) Set the environment variable TUSCANY_SDOCPP to the path of an SDO driver
+
+2) Set the environment variable AXIS2C_HOME to the path of Axis2C (Version 0.92)
+
+NOTE: The environment variables must be set BEFORE launching Visual Studio
+
+3) Rebuild Solution
+
+The output for the build will be in deploy\include, lib and bin
+
+To run the test from a command prompt:
+
+1) Set the environment variable TUSCANY_SCACPP to the location of the built SCA
+ (...tuscany\cpp\sca\deploy)
+
+2) Set the environment variable TUSCANY_SCACPP_SYSTEM_ROOT to the location of the test system
+ ...tuscany\cpp\sca\projects\tuscany_sca\tuscany_sca_test\testSCASystem
+
+3) Add %TUSCANY_SCACPP%\lib and %TUSCANY_SDOCPP%\lib to the PATH
+ (ensure required libraries for SDO are also on the path. e.g. libxml2)
+
+4) cd %TUSCANY_SCACPP%\..\projects\tuscany_sca\tuscany_sca_test\Debug
+
+5) tuscany_sca_test
+
+NOTE: To run the test from the workspace the environment variables must be set
+ BEFORE launching Visual Studio
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/tuscany_sca.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/tuscany_sca.vcproj
new file mode 100644
index 0000000000..a83144e12a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca/tuscany_sca.vcproj
@@ -0,0 +1,520 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="tuscany_sca"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SCA_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ PrecompiledHeaderFile=".\Release/tuscany_sca.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="axis2_engine.lib tuscany_sdo_axiom.lib odbc32.lib odbccp32.lib tuscany_sdo.lib axis2_parser.lib axis2_util.lib axiom.lib"
+ OutputFile=".\Release/tuscany_sca.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)\lib,$(AXIS2C_HOME)\lib"
+ ProgramDatabaseFile=".\Release/tuscany_sca.pdb"
+ ImportLibrary=".\Release/tuscany_sca.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/tuscany_sca.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if not exist ..\..\..\deploy mkdir ..\..\..\deploy
+if not exist ..\..\..\deploy\bin mkdir ..\..\..\deploy\bin
+if not exist ..\..\..\deploy\lib mkdir ..\..\..\deploy\lib
+if not exist ..\..\..\deploy\include mkdir ..\..\..\deploy\include
+if not exist ..\..\..\deploy\include\osoa mkdir ..\..\..\deploy\include\osoa
+if not exist ..\..\..\deploy\include\osoa\sca mkdir ..\..\..\deploy\include\osoa\sca
+if not exist ..\..\..\deploy\include\tuscany mkdir ..\..\..\deploy\include\tuscany
+if not exist ..\..\..\deploy\include\tuscany\sca mkdir ..\..\..\deploy\include\tuscany\sca
+if not exist ..\..\..\deploy\include\tuscany\sca\core mkdir ..\..\..\deploy\include\tuscany\sca\core
+if not exist ..\..\..\deploy\include\tuscany\sca\model mkdir ..\..\..\deploy\include\tuscany\sca\model
+if not exist ..\..\..\deploy\include\tuscany\sca\util mkdir ..\..\..\deploy\include\tuscany\sca\util
+if not exist ..\..\..\deploy\include\tuscany\sca\ws mkdir ..\..\..\deploy\include\tuscany\sca\ws
+if not exist ..\..\..\deploy\xsd mkdir ..\..\..\deploy\xsd
+
+del ..\..\..\deploy\bin\tuscany_sca.*
+del ..\..\..\deploy\lib\*.lib
+copy ..\..\..\runtime\core\src\osoa\sca\*.h ..\..\..\deploy\include\osoa\sca
+copy ..\..\..\runtime\core\src\tuscany\sca\core\*.h ..\..\..\deploy\include\tuscany\sca\core
+copy ..\..\..\runtime\core\src\tuscany\sca\model\*.h ..\..\..\deploy\include\tuscany\sca\model
+copy ..\..\..\runtime\core\src\tuscany\sca\util\*.h ..\..\..\deploy\include\tuscany\sca\util
+copy ..\..\..\runtime\core\src\tuscany\sca\ws\*.h ..\..\..\deploy\include\tuscany\sca\ws
+copy Release\tuscany_sca.dll ..\..\..\deploy\bin
+copy Release\tuscany_sca.pdb ..\..\..\deploy\bin
+copy Release\tuscany_sca.lib ..\..\..\deploy\lib
+copy ..\..\..\xsd\*.* ..\..\..\deploy\xsd
+
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SCA_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/tuscany_sca.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="axis2_engine.lib tuscany_sdo_axiom.lib odbc32.lib odbccp32.lib tuscany_sdo.lib axis2_parser.lib axis2_util.lib axiom.lib"
+ OutputFile=".\Debug/tuscany_sca.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)\lib,$(AXIS2C_HOME)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/tuscany_sca.pdb"
+ ImportLibrary=".\Debug/tuscany_sca.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/tuscany_sca.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if not exist ..\..\..\deploy mkdir ..\..\..\deploy
+if not exist ..\..\..\deploy\bin mkdir ..\..\..\deploy\bin
+if not exist ..\..\..\deploy\lib mkdir ..\..\..\deploy\lib
+if not exist ..\..\..\deploy\include mkdir ..\..\..\deploy\include
+if not exist ..\..\..\deploy\include\osoa mkdir ..\..\..\deploy\include\osoa
+if not exist ..\..\..\deploy\include\osoa\sca mkdir ..\..\..\deploy\include\osoa\sca
+if not exist ..\..\..\deploy\include\tuscany mkdir ..\..\..\deploy\include\tuscany
+if not exist ..\..\..\deploy\include\tuscany\sca mkdir ..\..\..\deploy\include\tuscany\sca
+if not exist ..\..\..\deploy\include\tuscany\sca\core mkdir ..\..\..\deploy\include\tuscany\sca\core
+if not exist ..\..\..\deploy\include\tuscany\sca\model mkdir ..\..\..\deploy\include\tuscany\sca\model
+if not exist ..\..\..\deploy\include\tuscany\sca\util mkdir ..\..\..\deploy\include\tuscany\sca\util
+if not exist ..\..\..\deploy\include\tuscany\sca\ws mkdir ..\..\..\deploy\include\tuscany\sca\ws
+if not exist ..\..\..\deploy\xsd mkdir ..\..\..\deploy\xsd
+
+del ..\..\..\deploy\bin\tuscany_sca.*
+del ..\..\..\deploy\lib\*.lib
+copy ..\..\..\runtime\core\src\osoa\sca\*.h ..\..\..\deploy\include\osoa\sca
+copy ..\..\..\runtime\core\src\tuscany\sca\core\*.h ..\..\..\deploy\include\tuscany\sca\core
+copy ..\..\..\runtime\core\src\tuscany\sca\model\*.h ..\..\..\deploy\include\tuscany\sca\model
+copy ..\..\..\runtime\core\src\tuscany\sca\util\*.h ..\..\..\deploy\include\tuscany\sca\util
+copy ..\..\..\runtime\core\src\tuscany\sca\ws\*.h ..\..\..\deploy\include\tuscany\sca\ws
+copy Debug\tuscany_sca.dll ..\..\..\deploy\bin
+copy Debug\tuscany_sca.pdb ..\..\..\deploy\bin
+copy Debug\tuscany_sca.lib ..\..\..\deploy\lib
+copy ..\..\..\xsd\*.* ..\..\..\deploy\xsd
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="osoa/sca"
+ Filter="">
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ComponentContext.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ComponentContext.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ComponentContextImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ComponentContextImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ModuleContext.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ModuleContext.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ModuleContextImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ModuleContextImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\SCA.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ServiceList.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ServiceList.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ServiceRuntimeException.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\ServiceRuntimeException.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\export.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\osoa\sca\sca.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="tuscany/sca"
+ Filter="">
+ <Filter
+ Name="core"
+ Filter="">
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ComponentServiceWrapper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ComponentServiceWrapper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ExternalServiceWrapper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ExternalServiceWrapper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\Operation.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\Operation.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\SCAEntryPoint.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\SCAEntryPoint.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\SCARuntime.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\SCARuntime.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ServiceProxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ServiceProxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ServiceWrapper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\ServiceWrapper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\TuscanyRuntime.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\core\TuscanyRuntime.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="model"
+ Filter="">
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Binding.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Binding.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\CPPImplementation.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\CPPImplementation.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\CPPInterface.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\CPPInterface.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Component.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Component.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\EntryPoint.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\EntryPoint.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\ExternalService.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\ExternalService.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Implementation.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Implementation.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Interface.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Interface.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\ModelLoader.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\ModelLoader.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Module.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Module.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Service.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Service.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\ServiceReference.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\ServiceReference.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Subsystem.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Subsystem.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\System.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\System.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\WSBinding.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\WSBinding.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Wire.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Wire.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\WireTarget.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\WireTarget.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Wsdl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\Wsdl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\WsdlOperation.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\model\WsdlOperation.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="util"
+ Filter="">
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\DefaultLogWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\DefaultLogWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Exceptions.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\File.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\File.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\FileLogWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\FileLogWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Library.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Library.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\LogWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\LogWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Logger.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Logger.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Logging.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Utils.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\util\Utils.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="ws"
+ Filter="">
+ <File
+ RelativePath="..\..\..\runtime\ws_reference\axis2c\src\Axis2Client.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\ws_reference\axis2c\src\Axis2Client.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\ws\EntryPointProxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\ws\EntryPointProxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\ws_reference\axis2c\src\WSServiceWrapper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\tuscany\sca\ws\WSServiceWrapper.h">
+ </File>
+ </Filter>
+ </Filter>
+ <Filter
+ Name="xsd"
+ Filter="">
+ <File
+ RelativePath="..\..\..\xsd\sca-binding-sca.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca-binding-webservice.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca-core.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca-implementation-cpp.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca-implementation-java.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca-interface-cpp.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca-interface-java.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca-interface-wsdl.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\sca.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\xsd\tuscany.xsd">
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\Build Instructions.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.dll b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.dll
new file mode 100644
index 0000000000..4ca1690be8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.dll
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment
new file mode 100644
index 0000000000..c2c521ed96
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo.dll" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.pdb b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.pdb
new file mode 100644
index 0000000000..61869285b1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.pdb
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..48651b63fe
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.dll b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.dll
new file mode 100644
index 0000000000..e651ea0adb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.dll
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.pdb b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.pdb
new file mode 100644
index 0000000000..76b5bef92f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValue.pdb
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType
new file mode 100644
index 0000000000..ace4154966
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="customerInfo">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl
new file mode 100644
index 0000000000..f82690e1ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/MyValueService.wsdl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.myvalue.org/MyValueService/"
+ targetNamespace="http://www.myvalue.org/MyValueService/">
+ <types>
+ <xs:schema targetNamespace="http://www.myvalue.org/MyValueService/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.myvalue.org/MyValueService/"
+ elementFormDefault="qualified">
+
+ <xs:element name="getMyValue">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="customerID" type="xs:string" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="getMyValueResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="myValue" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ </xs:schema>
+ </types>
+
+ <message name="getMyValueRequestMsg">
+ <part name="body" element="tns:getMyValue"/>
+ </message>
+
+ <message name="getMyValueResponseMsg">
+ <part name="body" element="tns:getMyValueResponse"/>
+ </message>
+
+ <portType name="MyValueServicePortType">
+ <operation name="getMyValue">
+ <input message="tns:getMyValueRequestMsg"/>
+ <output message="tns:getMyValueResponseMsg"/>
+ </operation>
+ </portType>
+
+ <binding name="MyValueServiceBinding" type="tns:MyValueServicePortType">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="getMyValue">
+ <soap:operation soapAction="MyValueService#getMyValue"/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ </binding>
+
+ <service name="MyValueService">
+ <port name="MyValueServicePort" binding="tns:MyValueServiceBinding">
+ <soap:address location="http://localhost/axis/MyValueService"/>
+ </port>
+ </service>
+</definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl
new file mode 100644
index 0000000000..26e2ea5cb8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.webserviceX.NET/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.webserviceX.NET/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+ <wsdl:types>
+ <s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET/">
+ <s:element name="GetQuote">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="symbol" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+
+ </s:element>
+ <s:element name="GetQuoteResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="GetQuoteResult" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="string" nillable="true" type="s:string" />
+
+ </s:schema>
+ </wsdl:types>
+ <wsdl:message name="GetQuoteSoapIn">
+ <wsdl:part name="parameters" element="tns:GetQuote" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteSoapOut">
+ <wsdl:part name="parameters" element="tns:GetQuoteResponse" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetIn">
+
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetOut">
+ <wsdl:part name="Body" element="tns:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostIn">
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostOut">
+
+ <wsdl:part name="Body" element="tns:string" />
+ </wsdl:message>
+ <wsdl:portType name="StockQuoteSoap">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteSoapIn" />
+ <wsdl:output message="tns:GetQuoteSoapOut" />
+ </wsdl:operation>
+
+ </wsdl:portType>
+ <wsdl:portType name="StockQuoteHttpGet">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteHttpGetIn" />
+ <wsdl:output message="tns:GetQuoteHttpGetOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:portType name="StockQuoteHttpPost">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteHttpPostIn" />
+ <wsdl:output message="tns:GetQuoteHttpPostOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
+
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
+ <wsdl:operation name="GetQuote">
+ <soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuoteHttpGet" type="tns:StockQuoteHttpGet">
+ <http:binding verb="GET" />
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+ <wsdl:input>
+ <http:urlEncoded />
+ </wsdl:input>
+
+ <wsdl:output>
+ <mime:mimeXml part="Body" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuoteHttpPost" type="tns:StockQuoteHttpPost">
+ <http:binding verb="POST" />
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded" />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:mimeXml part="Body" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="StockQuote">
+
+ <wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap">
+ <soap:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet">
+ <http:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuoteHttpPost" binding="tns:StockQuoteHttpPost">
+ <http:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+
+ </wsdl:service>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd
new file mode 100644
index 0000000000..5bce3a63dc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="StockQuotes" type="tStockQuotes"/>
+ <xs:complexType name="tStockQuotes">
+ <xs:sequence>
+ <xs:element name="Stock" type="tStock" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+
+ <xs:complexType name="tStock">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1" name="Symbol" type="xs:string"/>
+ <xs:element minOccurs="0" maxOccurs="1" name="Last" type="xs:float"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config
new file mode 100644
index 0000000000..a23cc3f5cd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="MyValueService.wsdl"/>
+ <file name="StockQuoteService.wsdl"/>
+ </wsdl>
+ <xsd>
+ <file name="StockQuoteTypes.xsd"/>
+ </xsd>
+</tuscany-model> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module
new file mode 100644
index 0000000000..8cc39ce7bb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/modules/MyValueServiceModule/sca.module
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="MyValueService.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="http://www.myvalue.org/MyValueService/#wsdl.endpoint(MyValueService/MyValueServicePort)"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue.dll" header="MyValueImpl.h"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h"/>
+ <binding.ws port="http://www.webserviceX.NET/#wsdl.endpoint(StockQuote/StockQuoteSoap)"/>
+ </externalService>
+
+ <wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire>
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem
new file mode 100644
index 0000000000..1b32bf8a93
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/testSCASystem/subsystems/SubSystem1/sca.subsystem
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
+
+ name="SubSystem1">
+
+ <moduleComponent name="MyValue" module="MyValueServiceModule">
+
+ </moduleComponent>
+
+</subsystem>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/tuscany_sca_test.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/tuscany_sca_test.vcproj
new file mode 100644
index 0000000000..1a1fc48b50
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test/tuscany_sca_test.vcproj
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="tuscany_sca_test"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,../../../runtime/core/test/MyValue"
+ PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ PrecompiledHeaderFile=".\Release/tuscany_sca_test.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile=".\Release/tuscany_sca_test.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib"
+ ProgramDatabaseFile=".\Release/tuscany_sca_test.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/tuscany_sca_test.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\tuscany_sca_test_MyValue\Release\MyValue.dll testSCASystem\modules\MyValueServiceModule
+copy ..\tuscany_sca_test_CustomerInfo\Release\CustomerInfo.dll testSCASystem\modules\MyValueServiceModule
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,../../../runtime/core/test/MyValue"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/tuscany_sca_test.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile=".\Debug/tuscany_sca_test.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/tuscany_sca_test.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/tuscany_sca_test.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\tuscany_sca_test_MyValue\Debug\MyValue.dll testSCASystem\modules\MyValueServiceModule
+copy ..\tuscany_sca_test_MyValue\Debug\MyValue.pdb testSCASystem\modules\MyValueServiceModule
+copy ..\tuscany_sca_test_CustomerInfo\Debug\CustomerInfo.dll testSCASystem\modules\MyValueServiceModule
+copy ..\tuscany_sca_test_CustomerInfo\Debug\CustomerInfo.pdb testSCASystem\modules\MyValueServiceModule
+copy..\tuscany_sca\Debug\*.dll Debug
+copy..\tuscany_sca\Debug\*.pdb Debug
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\test\src\TestSCA.cpp">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.vcproj
new file mode 100644
index 0000000000..2bbb8e4cba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_CustomerInfo/tuscany_sca_test_CustomerInfo.vcproj
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="tuscany_sca_test_CustomerInfo"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/tuscany_sca_test_CustomerInfo.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile="Debug/CustomerInfo.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/CustomerInfo.pdb"
+ ImportLibrary=".\Debug/CustomerInfo.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/tuscany_sca_test_CustomerInfo.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TUSCANY_SCA_TEST_CUSTOMERINFO_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ PrecompiledHeaderFile=".\Release/tuscany_sca_test_CustomerInfo.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile="Release/CustomerInfo.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib"
+ ProgramDatabaseFile=".\Release/CustomerInfo.pdb"
+ ImportLibrary=".\Release/CustomerInfo.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/tuscany_sca_test_CustomerInfo.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Proxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Wrapper.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\core\test\CustomerInfo\CustomerInfo.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Proxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\CustomerInfo\CustomerInfoImpl_CustomerInfoService_Wrapper.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.vcproj
new file mode 100644
index 0000000000..7272352508
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_test_MyValue/tuscany_sca_test_MyValue.vcproj
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="tuscany_sca_test_MyValue"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,../../../runtime/core/test/CustomerInfo"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TUSCANY_SCA_TEST_MYVALUE_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ PrecompiledHeaderFile=".\Release/tuscany_sca_test_MyValue.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile="Release/MyValue.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib"
+ ProgramDatabaseFile=".\Release/MyValue.pdb"
+ ImportLibrary=".\Release/MyValue.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/tuscany_sca_test_MyValue.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,../../../runtime/core/test/CustomerInfo"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TUSCANY_SCA_TEST_MYVALUE_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/tuscany_sca_test_MyValue.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile="Debug/MyValue.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/MyValue.pdb"
+ ImportLibrary=".\Debug/MyValue.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/tuscany_sca_test_MyValue.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Proxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Wrapper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_customerInfo_Proxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_stockQuote_Proxy.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValue.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Proxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_MyValueService_Wrapper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_customerInfo_Proxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\MyValueImpl_stockQuote_Proxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\MyValue\StockQuoteService.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.vcproj
new file mode 100644
index 0000000000..1619337c8f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/projectsvc7/tuscany_sca/tuscany_sca_ws_service/tuscany_sca_ws_service.vcproj
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="tuscany_sca_ws_service"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;TUSCANY_SCA_WS_SERVICE_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ PrecompiledHeaderFile=".\Release/tuscany_sca_ws_service.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="axis2_util.lib axiom.lib odbc32.lib odbccp32.lib axis2_engine.lib tuscany_sdo_axiom.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile=".\Release/tuscany_sca_ws_service.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib,$(AXIS2C_HOME)\lib"
+ ProgramDatabaseFile=".\Release/tuscany_sca_ws_service.pdb"
+ ImportLibrary=".\Release/tuscany_sca_ws_service.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/tuscany_sca_ws_service.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Release\tuscany_sca_ws_service.lib ..\..\..\deploy\lib
+copy Release\tuscany_sca_ws_service.dll ..\..\..\deploy\bin
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../../runtime/core/src,$(TUSCANY_SDOCPP)/include,$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;TUSCANY_SCA_WS_SERVICE_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/tuscany_sca_ws_service.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="axis2_util.lib axiom.lib odbc32.lib odbccp32.lib axis2_engine.lib tuscany_sdo_axiom.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile=".\Debug/tuscany_sca_ws_service.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(TUSCANY_SDOCPP)\lib,$(AXIS2C_HOME)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/tuscany_sca_ws_service.pdb"
+ ImportLibrary=".\Debug/tuscany_sca_ws_service.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/tuscany_sca_ws_service.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Debug\tuscany_sca_ws_service.dll ..\..\..\deploy\bin
+copy Debug\tuscany_sca_ws_service.pdb ..\..\..\deploy\bin
+copy Debug\tuscany_sca_ws_service.lib ..\..\..\deploy\lib
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\ws_service\axis2c\src\Axis2EntryPointService_skeleton.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\ws_service\axis2c\src\Axis2Utils.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\ws_service\axis2c\src\Axis2Utils.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/Makefile.am
new file mode 100644
index 0000000000..8cd99f1477
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = ws_reference core ws_service
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/Makefile.am
new file mode 100644
index 0000000000..b4b5bc3097
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = src test
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/Makefile.am
new file mode 100644
index 0000000000..305bbe5504
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/Makefile.am
@@ -0,0 +1,103 @@
+lib_LTLIBRARIES = libtuscany_sca.la
+
+nobase_include_HEADERS = \
+osoa/sca/ComponentContext.h \
+osoa/sca/ComponentContextImpl.h \
+osoa/sca/export.h \
+osoa/sca/ModuleContext.h \
+osoa/sca/ModuleContextImpl.h \
+osoa/sca/sca.h \
+osoa/sca/ServiceList.h \
+osoa/sca/ServiceRuntimeException.h \
+tuscany/sca/core/ComponentServiceWrapper.h \
+tuscany/sca/core/ExternalServiceWrapper.h \
+tuscany/sca/core/Operation.h \
+tuscany/sca/core/SCAEntryPoint.h \
+tuscany/sca/core/SCARuntime.h \
+tuscany/sca/core/ServiceProxy.h \
+tuscany/sca/core/ServiceWrapper.h \
+tuscany/sca/core/TuscanyRuntime.h \
+tuscany/sca/model/Binding.h \
+tuscany/sca/model/Component.h \
+tuscany/sca/model/CPPImplementation.h \
+tuscany/sca/model/CPPInterface.h \
+tuscany/sca/model/EntryPoint.h \
+tuscany/sca/model/ExternalService.h \
+tuscany/sca/model/Implementation.h \
+tuscany/sca/model/Interface.h \
+tuscany/sca/model/ModelLoader.h \
+tuscany/sca/model/Module.h \
+tuscany/sca/model/Service.h \
+tuscany/sca/model/ServiceReference.h \
+tuscany/sca/model/Subsystem.h \
+tuscany/sca/model/System.h \
+tuscany/sca/model/Wire.h \
+tuscany/sca/model/WireTarget.h \
+tuscany/sca/model/WSBinding.h \
+tuscany/sca/model/Wsdl.h \
+tuscany/sca/model/WsdlOperation.h \
+tuscany/sca/util/DefaultLogWriter.h \
+tuscany/sca/util/Exceptions.h \
+tuscany/sca/util/File.h \
+tuscany/sca/util/FileLogWriter.h \
+tuscany/sca/util/Library.h \
+tuscany/sca/util/Logger.h \
+tuscany/sca/util/Logging.h \
+tuscany/sca/util/LogWriter.h \
+tuscany/sca/util/Utils.h \
+tuscany/sca/ws/WSServiceWrapper.h \
+tuscany/sca/ws/EntryPointProxy.h
+
+
+libtuscany_sca_la_SOURCES = \
+osoa/sca/ComponentContext.cpp \
+osoa/sca/ComponentContextImpl.cpp \
+osoa/sca/ModuleContext.cpp \
+osoa/sca/ModuleContextImpl.cpp \
+osoa/sca/SCA.cpp \
+osoa/sca/ServiceList.cpp \
+osoa/sca/ServiceRuntimeException.cpp \
+tuscany/sca/util/DefaultLogWriter.cpp \
+tuscany/sca/util/File.cpp \
+tuscany/sca/util/FileLogWriter.cpp \
+tuscany/sca/util/Library.cpp \
+tuscany/sca/util/Logger.cpp \
+tuscany/sca/util/LogWriter.cpp \
+tuscany/sca/util/Utils.cpp \
+tuscany/sca/model/Binding.cpp \
+tuscany/sca/model/Component.cpp \
+tuscany/sca/model/CPPImplementation.cpp \
+tuscany/sca/model/CPPInterface.cpp \
+tuscany/sca/model/EntryPoint.cpp \
+tuscany/sca/model/ExternalService.cpp \
+tuscany/sca/model/Implementation.cpp \
+tuscany/sca/model/Interface.cpp \
+tuscany/sca/model/ModelLoader.cpp \
+tuscany/sca/model/Module.cpp \
+tuscany/sca/model/Service.cpp \
+tuscany/sca/model/ServiceReference.cpp \
+tuscany/sca/model/Subsystem.cpp \
+tuscany/sca/model/System.cpp \
+tuscany/sca/model/Wire.cpp \
+tuscany/sca/model/WireTarget.cpp \
+tuscany/sca/model/WSBinding.cpp \
+tuscany/sca/model/Wsdl.cpp \
+tuscany/sca/model/WsdlOperation.cpp \
+tuscany/sca/core/ComponentServiceWrapper.cpp \
+tuscany/sca/core/ExternalServiceWrapper.cpp \
+tuscany/sca/core/Operation.cpp \
+tuscany/sca/core/SCAEntryPoint.cpp \
+tuscany/sca/core/SCARuntime.cpp \
+tuscany/sca/core/ServiceProxy.cpp \
+tuscany/sca/core/ServiceWrapper.cpp \
+tuscany/sca/core/TuscanyRuntime.cpp \
+tuscany/sca/ws/EntryPointProxy.cpp
+
+libtuscany_sca_la_LIBADD = -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo \
+ -L$(top_builddir)/runtime/ws_reference/axis2c/src -ltuscany_sca_ws_reference
+
+AM_CPPFLAGS = $(CPPFLAGS) -D_DEBUG
+
+INCLUDES = -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.cpp
new file mode 100644
index 0000000000..73c3ed2e36
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.cpp
@@ -0,0 +1,132 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "osoa/sca/ComponentContext.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "osoa/sca/ComponentContextImpl.h"
+#include "tuscany/sca/core/SCARuntime.h"
+
+using namespace tuscany::sca;
+
+namespace osoa
+{
+ namespace sca
+ {
+
+ // =======================================================
+ // getCurrent: create a context from the current component
+ // =======================================================
+ ComponentContext ComponentContext::getCurrent()
+ {
+ LOGENTRY(1, "ComponentContext::getCurrent");
+ Component* component = SCARuntime::getInstance()->getCurrentComponent();
+ if (!component)
+ {
+ throw ComponentContextException("No current component");
+ }
+ ComponentContextImpl* cci = new ComponentContextImpl(component);
+ LOGEXIT(1, "ComponentContext::constructor");
+ return ComponentContext(cci);
+ }
+
+ // ===========
+ // Constructor
+ // ===========
+ ComponentContext::ComponentContext(ComponentContextImpl* implementation)
+ : impl(implementation)
+ {
+ LOGENTRY(1, "ComponentContext::constructor");
+ LOGEXIT(1, "ComponentContext::constructor");
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ComponentContext::~ComponentContext()
+ {
+ LOGENTRY(1, "ComponentContext::destructor");
+ delete impl;
+ LOGEXIT(1, "ComponentContext::destructor");
+ }
+
+ // ===================================
+ // Copy constructor: create a new impl
+ // ===================================
+ ComponentContext::ComponentContext(const ComponentContext& ctx)
+ {
+ impl = new ComponentContextImpl(impl->getComponent());
+ }
+
+ // =============================
+ // operator= : create a new impl
+ // =============================
+ ComponentContext& ComponentContext::operator=(const ComponentContext& ctx)
+ {
+ if (this != &ctx)
+ {
+ impl = new ComponentContextImpl(impl->getComponent());
+ }
+ return *this;
+ }
+
+ // ==========
+ // getService
+ // ==========
+ void* ComponentContext::getService(const char* referenceName)
+ {
+ LOGENTRY(1, "ComponentContext::getService");
+ void* service = impl->getService(referenceName);
+ LOGEXIT(1, "ComponentContext::getService");
+ return service;
+ }
+
+ // ===========
+ // getServices
+ // ===========
+ ServiceList ComponentContext::getServices(const char* referenceName)
+ {
+ return impl->getServices(referenceName);
+ }
+
+ // ============
+ // getProperties
+ // =============
+ DataObjectPtr ComponentContext::getProperties()
+ {
+ LOGENTRY(1, "ComponentContext::getProperties");
+ DataObjectPtr properties = impl->getProperties();
+ LOGEXIT(1, "ComponentContext::getProperties");
+ return properties;
+ }
+
+ // ============
+ // getDataFactory
+ // =============
+ DataFactoryPtr ComponentContext::getDataFactory()
+ {
+ LOGENTRY(1, "ComponentContext::getDataFactory");
+ DataFactoryPtr dataFactory = impl->getDataFactory();
+ LOGEXIT(1, "ComponentContext::getDataFactory");
+ return dataFactory;
+ }
+
+
+ } // End namespace sca
+} // End namespace osoa
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.h
new file mode 100644
index 0000000000..10d334a936
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContext.h
@@ -0,0 +1,105 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_componentcontext_h
+#define osoa_sca_componentcontext_h
+
+#include "osoa/sca/export.h"
+#include "osoa/sca/ServiceList.h"
+#include "commonj/sdo/SDO.h"
+namespace osoa
+{
+ namespace sca
+ {
+ class ComponentContextImpl;
+
+ /**
+ * An SCA component implementation uses the ComponentContext class to
+ * retrieve information about the configured SCA component.
+ */
+ class SCA_API ComponentContext
+ {
+
+ public:
+ /**
+ * Return a new ComponentContext for the current Component.
+ */
+ static ComponentContext getCurrent();
+
+ /**
+ * Resolve a reference name into a single configured service.
+ * If the component's reference is wired to more than one service
+ * then theis method will return an exception.
+ * @param referenceName The reference to be resolved. This must match
+ * the name of a reference configured in the component type file for
+ * this component.
+ */
+ void* getService(const char* referenceName);
+
+ /**
+ * Resolve a reference name into a list of configured services.
+ * @param referenceName The reference to be resolved. This must match
+ * the name of a reference configured in the component type file for
+ * this component.
+ */
+ ServiceList getServices(const char* referenceName);
+
+ /**
+ * Get the configured properties for the component.
+ * @return A data object representing all the properties that
+ * are configured for this component.
+ */
+ commonj::sdo::DataObjectPtr getProperties();
+
+ /**
+ * Get an SDO data factory which will allow the component to
+ * create data objects for all the types configured for this
+ * component.
+ * @return A data factory to be used by the component to create
+ * new data objects.
+ */
+ commonj::sdo::DataFactoryPtr getDataFactory();
+
+ /**
+ * Destructor
+ */
+ virtual ~ComponentContext();
+
+
+ ComponentContext(const ComponentContext&);
+ ComponentContext& operator=(const ComponentContext&);
+
+ private:
+ /**
+ * Constructor to create an interface class from the contained
+ * implementation.
+ * @param implementation the actual implementation class
+ */
+ ComponentContext(ComponentContextImpl* implementation);
+
+ /**
+ * Pointer to the class which provides the actual implementation.
+ */
+ ComponentContextImpl* impl;
+
+ };
+ } // End namespace sca
+} // End namespace osoa
+
+#endif // osoa_sca_componentcontext_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.cpp
new file mode 100644
index 0000000000..436e44d5e1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.cpp
@@ -0,0 +1,270 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "osoa/sca/ComponentContextImpl.h"
+#include "tuscany/sca/model/WireTarget.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+#include "tuscany/sca/core/ExternalServiceWrapper.h"
+#include "tuscany/sca/model/CPPImplementation.h"
+#include "tuscany/sca/model/Module.h"
+
+using namespace tuscany::sca;
+using namespace tuscany::sca::model;
+
+namespace osoa
+{
+ namespace sca
+ {
+ // ===========
+ // Constructor
+ // ===========
+ ComponentContextImpl::ComponentContextImpl(Component* comp)
+ : component(comp)
+ {
+ LOGENTRY(1, "ComponentContextImpl::constructor");
+ LOGEXIT(1, "ComponentContextImpl::constructor");
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ComponentContextImpl::~ComponentContextImpl()
+ {
+ // --------------------------------------------
+ // Delete the proxies served up by this context
+ // --------------------------------------------
+ for (PROXIES::iterator iter = proxies.begin(); iter != proxies.end(); iter++)
+ {
+ delete (ServiceProxy*)*iter;
+ }
+ }
+
+
+ // ==========================================================================
+ // getServices: return a list of Proxies for services wired to this reference
+ // ==========================================================================
+ ServiceList ComponentContextImpl::getServices(const char* referenceName)
+ {
+ LOGENTRY(1, "ComponentContextImpl::getServices");
+
+ string message;
+
+ // --------------------------------------------------------------
+ // locate reference in the current component and determine target
+ // --------------------------------------------------------------
+ ServiceReference* serviceReference = component->findReference(referenceName);
+ if (!serviceReference)
+ {
+ message = "Reference not defined: ";
+ message = message + referenceName;
+ throw ServiceNotFoundException(message.c_str());
+ }
+
+ // Get the target services from the ServiceReference
+ const ServiceReference::TARGETS& targets = serviceReference->getTargets();
+
+ // --------------------
+ // Validate the request
+ // --------------------
+ switch (serviceReference->getMultiplicity())
+ {
+ case ServiceReference::ONE_MANY:
+ case ServiceReference::ONE_ONE:
+ {
+ if (targets.size() == 0)
+ {
+ message = "Reference ";
+ message = message + referenceName + " not wired";
+ throw ServiceNotFoundException(message.c_str());
+ }
+ }
+ default:
+ {
+ }
+ } // end switch
+
+ // ------------------------------
+ // Create a proxy for each target
+ // ------------------------------
+ ServiceList services(targets.size());
+ for (ServiceReference::TARGETS::const_iterator iter = targets.begin();
+ iter!=targets.end();
+ iter++)
+ {
+ services.addService(getServiceProxy(serviceReference, *iter));
+ }
+
+ return services;
+
+ } // End getServices()
+
+
+ // ===================================================================
+ // getService: return a Proxy for the services wired to this reference
+ // ===================================================================
+ void* ComponentContextImpl::getService(const char* referenceName)
+ {
+ LOGENTRY(1, "ComponentContextImpl::getService");
+
+ string message;
+
+ // --------------------------------------------------------------
+ // locate reference in the current component and determine target
+ // --------------------------------------------------------------
+ ServiceReference* serviceReference = component->findReference(referenceName);
+ if (!serviceReference)
+ {
+ message = "Reference not defined: ";
+ message = message + referenceName;
+ throw ServiceNotFoundException(message.c_str());
+ }
+
+ // Get the target service from the ServiceReference
+ const ServiceReference::TARGETS& targets = serviceReference->getTargets();
+
+ // --------------------
+ // Validate the request
+ // --------------------
+ switch (serviceReference->getMultiplicity())
+ {
+ case ServiceReference::ZERO_MANY:
+ case ServiceReference::ONE_MANY:
+ {
+ message = "getService() called for reference with multiplicity >1 :";
+ message = message + referenceName;
+ throw ServiceNotFoundException(message.c_str());
+ }
+ case ServiceReference::ONE_ONE:
+ {
+ if (targets.size() == 0)
+ {
+ message = "Reference ";
+ message = message + referenceName + " not wired";
+ throw ServiceNotFoundException(message.c_str());
+ }
+ }
+ default:
+ {
+ }
+ } // end switch
+
+ // Return the proxy
+ return getServiceProxy(serviceReference, *targets.begin());
+
+ } // End getService()
+
+
+ // ==================================================================
+ // getServiceProxy: Create and return an instance of the ServiceProxy
+ // ==================================================================
+ void* ComponentContextImpl::getServiceProxy(
+ ServiceReference* serviceReference,
+ WireTarget* target)
+ {
+ // -----------------------------------
+ // Get a ServiceWrapper for the target
+ // -----------------------------------
+ ServiceWrapper* serviceWrapper = getServiceWrapper(target);
+
+ // ------------------------------
+ // Get a Proxy for this reference
+ // ------------------------------
+ try
+ {
+ ServiceProxy* serviceProxy = new ServiceProxy(component, serviceReference->getName(), serviceWrapper);
+ void* service = serviceProxy->getProxy();
+ // service MUST be set here or an exception will have been thrown
+ proxies.push_back(serviceProxy);
+ return service;
+ }
+ catch (ServiceRuntimeException&)
+ {
+ delete serviceWrapper;
+ throw ;
+ }
+ }
+
+
+ // ======================================================================
+ // getServiceWrapper: Create and return an instance of the ServiceWrapper
+ // ======================================================================
+ ServiceWrapper* ComponentContextImpl::getServiceWrapper(WireTarget* target)
+ {
+ // -------------------------
+ // Determine type of Service
+ // -------------------------
+ switch (target->getServiceType())
+ {
+ case WireTarget::ExternalServiceType:
+ {
+ // ----------------
+ // External Service
+ // ----------------
+ return ExternalServiceWrapper::createServiceWrapper((ExternalService*)target);
+ }
+
+ case WireTarget::ComponentServiceType:
+ {
+ // -----------------
+ // Component Service
+ // -----------------
+ return ComponentServiceWrapper::createServiceWrapper((Service*)target);
+ }
+
+ default:
+ {
+ string message = "Undefined wire target type for : ";
+ message = message + target->getName();
+ throw ServiceNotFoundException(message.c_str());
+ }
+ } // end switch
+ }
+
+
+
+ // ==============================================
+ // getProperties: return the component properties
+ // ==============================================
+ DataObjectPtr ComponentContextImpl::getProperties()
+ {
+ LOGENTRY(1, "ComponentContextImpl::getProperties");
+ DataObjectPtr properties = component->getProperties();
+
+ LOGEXIT(1, "ComponentContextImpl::getProperties");
+ return properties;
+ }
+
+ // ==============================================
+ // getDataFactory: return the data factory for the module in which
+ // this component resides
+ // ==============================================
+ DataFactoryPtr ComponentContextImpl::getDataFactory()
+ {
+ LOGENTRY(1, "ComponentContextImpl::getProperties");
+ DataFactoryPtr dataFactory = component->getModule()->getDataFactory();
+
+ LOGEXIT(1, "ComponentContextImpl::getDataFactory");
+ return dataFactory;
+ }
+
+
+ } // End namespace sca
+} // End namespace osoa
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.h
new file mode 100644
index 0000000000..bd3a0d106a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ComponentContextImpl.h
@@ -0,0 +1,120 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_componentcontextimpl_h
+#define osoa_sca_componentcontextimpl_h
+
+#include "osoa/sca/ServiceList.h"
+
+#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+#include "tuscany/sca/core/ServiceProxy.h"
+#include "tuscany/sca/model/Service.h"
+
+using namespace tuscany::sca;
+using namespace tuscany::sca::model;
+
+namespace osoa
+{
+ namespace sca
+ {
+ /**
+ * Contains the actual implementation of a ComponentContext interface.
+ */
+ class ComponentContextImpl
+ {
+
+ public:
+ /**
+ * Constructor that takes a Component which represents the runtime
+ * model for this context.
+ */
+ ComponentContextImpl(Component* component);
+
+ /**
+ * Default constructor.
+ */
+ virtual ~ComponentContextImpl();
+
+ /**
+ * See ComponentContext.
+ */
+ void* getService(const char* referenceName);
+
+ /**
+ * See ComponentContext.
+ */
+ ServiceList getServices(const char* referenceName);
+
+ /**
+ * See ComponentContext.
+ */
+ DataObjectPtr getProperties();
+
+ /**
+ * See ComponentContext.
+ */
+ commonj::sdo::DataFactoryPtr getDataFactory();
+
+ /**
+ * Returns the contained Component.
+ * @return The Component to which this context refers.
+ */
+ Component* getComponent() {return component;}
+
+ private:
+ ComponentContextImpl(const ComponentContextImpl&);
+ ComponentContextImpl& operator=(const ComponentContextImpl&);
+
+ /**
+ * Pointer to the runtime model Component to which this
+ * context refers.
+ */
+ Component* component;
+
+ /**
+ * Helper method to return a proxy to a service.
+ * @param serviceReference The source reference.
+ * @param target The target to which this source reference is wired.
+ * @return A pointer to an object which can be cast to the business
+ * class representing the target.
+ */
+ void* getServiceProxy(
+ ServiceReference* serviceReference,
+ WireTarget* target);
+
+ /**
+ * Helper method to return a wrapper for a target service.
+ * @param target The target for which this wrapper is to be created.
+ * @return The service wrapper.
+ */
+ ServiceWrapper* getServiceWrapper(WireTarget* target);
+
+
+ typedef vector<ServiceProxy*> PROXIES;
+ /**
+ * A vector of the proxies created by this ComponentContext. The
+ * proxies will be destroyed when the ComponentContext is destroyed.
+ */
+ PROXIES proxies;
+ };
+ } // End namespace sca
+} // End namespace osoa
+
+#endif // osoa_sca_componentcontextimpl_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.cpp
new file mode 100644
index 0000000000..93e36b297f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.cpp
@@ -0,0 +1,93 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "osoa/sca/ModuleContext.h"
+#include "tuscany/sca/util/Logging.h"
+#include "osoa/sca/ModuleContextImpl.h"
+#include "tuscany/sca/core/SCARuntime.h"
+
+using namespace tuscany::sca;
+
+namespace osoa
+{
+ namespace sca
+ {
+ // ===========
+ // Constructor
+ // ===========
+ ModuleContext::ModuleContext(ModuleContextImpl* implementation)
+ : impl(implementation)
+ {
+ }
+
+ // ===================================
+ // Copy constructor: create a new impl
+ // ===================================
+ ModuleContext::ModuleContext(const ModuleContext& ctx)
+ {
+ impl = new ModuleContextImpl(SCARuntime::getInstance()->getCurrentModule());
+ }
+
+ // =============================
+ // operator= : create a new impl
+ // =============================
+ ModuleContext& ModuleContext::operator=(const ModuleContext& ctx)
+ {
+ if (this != &ctx)
+ {
+ impl = new ModuleContextImpl(SCARuntime::getInstance()->getCurrentModule());
+ }
+ return *this;
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ModuleContext::~ModuleContext()
+ {
+ LOGENTRY(1, "ModuleContext::destructor");
+ delete impl;
+ LOGEXIT(1, "ModuleContext::destructor");
+ }
+
+ // ====================================================
+ // getCurrent: create a context from the current module
+ // ====================================================
+ ModuleContext ModuleContext::getCurrent()
+ {
+ LOGENTRY(1, "ModuleContext::getCurrent");
+ ModuleContextImpl* mci = new ModuleContextImpl(SCARuntime::getInstance()->getCurrentModule());
+ LOGEXIT(1, "ModuleContext::getCurrent");
+ return ModuleContext(mci);
+ }
+
+ // =============
+ // locateService
+ // =============
+ void* ModuleContext::locateService(const char* serviceName)
+ {
+ LOGENTRY(1, "ModuleContext::locateService");
+ void* sp = impl->locateService(serviceName);
+ LOGEXIT(1, "ModuleContext::locateService");
+ return sp;
+ }
+
+
+ } // End namespace sca
+} // End namespace osoa
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.h
new file mode 100644
index 0000000000..7aacb00123
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContext.h
@@ -0,0 +1,80 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_modulecontext_h
+#define osoa_sca_modulecontext_h
+
+#include "osoa/sca/export.h"
+
+namespace osoa
+{
+ namespace sca
+ {
+ class ModuleContextImpl;
+
+ /**
+ * An SCA component implementation, or a non-SCA client, uses the
+ * ModuleContext class to retrieve information about the configured
+ * SCA module.
+ */
+ class SCA_API ModuleContext
+ {
+
+ public:
+ /**
+ * Return a new ModuleContext for the current Component.
+ */
+ static ModuleContext getCurrent();
+
+ /**
+ * Resolve a service name into a single component service.
+ * @param serviceName The name of the service in the form
+ * "component name"/"service name". The service name is
+ * optional in the component has one service.
+ * @return A pointer to an object which can be cast to the
+ * business interface of the target service.
+ */
+ void* locateService(const char* serviceName);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ModuleContext();
+
+ ModuleContext(const ModuleContext&);
+ ModuleContext& operator=(const ModuleContext&);
+
+ private:
+ /**
+ * Constructor to create an interface class from the contained
+ * implementation.
+ * @param implementation The actual implementation class.
+ */
+ ModuleContext(ModuleContextImpl* implementation);
+
+ /**
+ * Pointer to the class which provides the actual implementation.
+ */
+ ModuleContextImpl* impl;
+
+ };
+ } // End namespace sca
+} // End namespace osoa
+
+#endif // osoa_sca_modulecontext_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.cpp
new file mode 100644
index 0000000000..4d96ee336d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.cpp
@@ -0,0 +1,102 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/CPPImplementation.h"
+#include "osoa/sca/ModuleContextImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+using namespace tuscany::sca;
+using namespace tuscany::sca::model;
+
+namespace osoa
+{
+ namespace sca
+ {
+ // ===========
+ // Constructor
+ // ===========
+ ModuleContextImpl::ModuleContextImpl(Module* mod)
+ : module(mod)
+ {
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ModuleContextImpl::~ModuleContextImpl()
+ {
+ // --------------------------------------------
+ // Delete the proxies served up by this context
+ // --------------------------------------------
+ for (PROXIES::iterator iter = proxies.begin(); iter != proxies.end(); iter++)
+ {
+ delete (ServiceProxy*)*iter;
+ }
+ }
+
+ // ===========================================================================
+ // locateService: return a proxy connected to a wrapper for the target service
+ // ===========================================================================
+ void* ModuleContextImpl::locateService(const char* serviceName)
+ {
+ LOGENTRY(1, "ModuleContextImpl::locateService");
+
+
+ // ----------------------------
+ // Locate the component service
+ // ----------------------------
+ Service* service = module->findComponentService(serviceName);
+ string msg;
+ if (!service)
+ {
+ msg = "Service not found: ";
+ msg = msg + serviceName;
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ // -------------------------
+ // Create the ServiceWrapper
+ // -------------------------
+ ComponentServiceWrapper* serviceWrapper = ComponentServiceWrapper::createServiceWrapper(service);
+
+ // ----------------------------
+ // Get a Proxy for this service
+ // ----------------------------
+ try
+ {
+ ServiceProxy* serviceProxy = new ServiceProxy(service->getComponent(), service->getName(), serviceWrapper);
+ proxies.push_back(serviceProxy);
+ LOGEXIT(1, "ModuleContextImpl::locateService");
+ return serviceProxy->getProxy();
+ }
+ catch (ServiceRuntimeException&)
+ {
+ delete serviceWrapper;
+ throw ;
+ }
+
+ }
+
+
+
+ } // End namespace sca
+} // End namespace osoa
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.h
new file mode 100644
index 0000000000..5950313a06
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ModuleContextImpl.h
@@ -0,0 +1,71 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_modulecontextimpl_h
+#define osoa_sca_modulecontextimpl_h
+#include "tuscany/sca/model/Module.h"
+#include "tuscany/sca/core/ServiceProxy.h"
+
+namespace osoa
+{
+ namespace sca
+ {
+ /**
+ * Contains the actual implementation of a ModuleContext interface.
+ */
+ class ModuleContextImpl
+ {
+
+ public:
+ /**
+ * Constructor that takes a Module which represents the runtime
+ * model for this context.
+ */
+ ModuleContextImpl(tuscany::sca::model::Module* module);
+
+ /**
+ * See ModuleContext#locateService.
+ */
+ void* locateService(const char* serviceName);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ModuleContextImpl();
+ private:
+ ModuleContextImpl(const ModuleContextImpl&);
+ ModuleContextImpl& operator=(const ModuleContextImpl&);
+
+ /**
+ * Pointer to the runtime model Module object to which this
+ * context refers.
+ */
+ tuscany::sca::model::Module* module;
+
+ typedef vector<tuscany::sca::ServiceProxy*> PROXIES;
+ /**
+ * Vector of proxies created from calls to the locateService
+ * method.
+ */
+ PROXIES proxies;
+ };
+ } // End namespace sca
+} // End namespace osoa
+
+#endif // osoa_sca_modulecontextimpl_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/SCA.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/SCA.cpp
new file mode 100644
index 0000000000..bcca254028
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/SCA.cpp
@@ -0,0 +1,21 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev: $ $Date: $ */
+
+#include "osoa/sca/sca.h"
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.cpp
new file mode 100644
index 0000000000..ba2b418a7c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.cpp
@@ -0,0 +1,105 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "osoa/sca/ServiceList.h"
+
+#include "osoa/sca/ServiceRuntimeException.h"
+
+namespace osoa
+{
+ namespace sca
+ {
+ // ===========
+ // Constructor
+ // ===========
+ ServiceList::ServiceList(unsigned int numTargets)
+ : maxServices(numTargets), numServices(0)
+ {
+ services = new void*[numTargets];
+ }
+
+ // ==========================================
+ // Copy comstructor: create new service array
+ // ==========================================
+ ServiceList::ServiceList(const ServiceList& sl)
+ : maxServices(sl.maxServices), numServices(sl.numServices)
+ {
+ services = new void*[maxServices];
+ for (unsigned int i=0; i<numServices; i++)
+ {
+ services[i] = sl.services[i];
+ }
+ }
+
+ // ===================================
+ // operator=: create new service array
+ // ===================================
+ ServiceList& ServiceList::operator=(const ServiceList& sl)
+ {
+ if (this != &sl)
+ {
+ maxServices = sl.maxServices;
+ numServices = sl.numServices;
+
+ services = new void*[maxServices];
+ for (unsigned int i=0; i<numServices; i++)
+ {
+ services[i] = sl.services[i];
+ }
+ }
+ return *this;
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ServiceList::~ServiceList()
+ {
+ delete [] services;
+ }
+
+ // =================================
+ // operator[]: return service at pos
+ // =================================
+ void* ServiceList::operator[] (unsigned int pos)
+ {
+ if (pos < numServices)
+ {
+ return services[pos];
+ }
+ else
+ {
+ throw ServiceRuntimeException("ServiceList: index out of bounds");
+ }
+ }
+
+ // ====================================
+ // addService: add service to the array
+ // ====================================
+ void ServiceList::addService(void* service)
+ {
+ if (numServices < maxServices)
+ {
+ services[numServices] = service;
+ numServices++;
+ }
+ }
+
+ } // End namespace sca
+} // End namespace osoa
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.h
new file mode 100644
index 0000000000..be6f6c9b1a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceList.h
@@ -0,0 +1,84 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_servicelist_h
+#define osoa_sca_servicelist_h
+
+#include "osoa/sca/export.h"
+
+namespace osoa
+{
+ namespace sca
+ {
+
+ /**
+ * Holds a list of services that can be accessed from an SCA
+ * component. Each entry can be cast to the business interface
+ * of the target component. All the entries will be of the
+ * same type.
+ */
+ class SCA_API ServiceList
+ {
+
+ public:
+ /**
+ * Return the number of services in the list.
+ * @return Number of services.
+ */
+ unsigned int size() {return numServices;}
+
+ /**
+ * Return the service at this position.
+ */
+ void* operator[] (unsigned int pos);
+
+ ServiceList(const ServiceList& serviceList);
+ ServiceList& operator=(const ServiceList& serviceList);
+ virtual ~ServiceList();
+
+ private:
+ friend class ComponentContextImpl;
+
+ /**
+ * Create a new service list with the known number of
+ * target services. Once created, the service list can only
+ * have services added to it up to the number of targets
+ * specified on this constructor.
+ * @param numTargets Number of target services to be held in this list.
+ */
+ ServiceList(unsigned int numTargets);
+
+ /**
+ * Add a service to this list.
+ */
+ void addService(void* service);
+
+ unsigned int maxServices;
+ unsigned int numServices;
+
+ /**
+ * Pointer to an array of services.
+ */
+ void** services;
+
+ };
+ } // End namespace sca
+} // End namespace osoa
+
+#endif // osoa_sca_servicelist_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.cpp
new file mode 100644
index 0000000000..9f275c9c10
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.cpp
@@ -0,0 +1,208 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "osoa/sca/ServiceRuntimeException.h"
+using namespace std;
+
+namespace osoa
+{
+ namespace sca
+ {
+
+ // ========================================================================
+ // Constructor
+ // ========================================================================
+ ServiceRuntimeException :: ServiceRuntimeException(const char* name,
+ severity_level sev,
+ const char* msg_text)
+ : severity(sev), location_set(0)
+ {
+ class_name = new char[strlen(name) + 1];
+ strcpy(class_name,name);
+ message_text = new char[strlen(msg_text)+1];
+ strcpy(message_text,msg_text);
+
+ } // end ServiceRuntimeException constuctor
+
+ // ========================================================================
+ // Constructor
+ // ========================================================================
+ ServiceRuntimeException :: ServiceRuntimeException(const ServiceRuntimeException& c)
+ :
+ severity(c.getSeverity()), location_set(c.location_set)
+
+ {
+ class_name = new char[strlen(c.getEClassName()) + 1];
+ strcpy(class_name, c.getEClassName());
+ message_text = new char[strlen(c.getMessageText())+1];
+ strcpy(message_text,c.getMessageText());
+ for (int i=0;i<c.location_set;i++)
+ {
+ locations[i].file = new char[strlen(c.locations[i].file) + 1];
+ strcpy(locations[i].file,c.locations[i].file);
+ locations[i].line = c.locations[i].line;
+ locations[i].function = new char[strlen(c.locations[i].function) + 1];
+ strcpy(locations[i].function, c.locations[i].function);
+ }
+ }
+
+ // ========================================================================
+ // Destructor
+ // ========================================================================
+ ServiceRuntimeException :: ~ServiceRuntimeException()
+ {
+ if (class_name) delete class_name;
+ if (message_text) delete message_text;
+ for (int i=0;i<location_set;i++)
+ {
+ if (locations[i].file) delete locations[i].file;
+ if (locations[i].function) delete locations[i].function;
+ }
+
+ } // end ServiceRuntimeException destructor
+
+ // ========================================================================
+ // Return class name of this exception
+ // ========================================================================
+ const char* ServiceRuntimeException :: getEClassName() const
+ {
+ return class_name;
+ } // end getClassName()
+
+ // ========================================================================
+ // Return severity
+ // ========================================================================
+ ServiceRuntimeException::severity_level ServiceRuntimeException :: getSeverity() const
+ {
+ return severity;
+ } // end getSeverity()
+
+ // ========================================================================
+ // Return message text associated with exception
+ // ========================================================================
+ const char* ServiceRuntimeException :: getMessageText() const
+ {
+ return message_text;
+ } // end getMessageText()
+
+ // ========================================================================
+ // Return file name where exception was raised
+ // ========================================================================
+ const char* ServiceRuntimeException :: getFileName() const
+ {
+ return locations[0].file;
+ } // end getFileName()
+
+ // ========================================================================
+ // Return line number where exception was raised
+ // ========================================================================
+ unsigned long ServiceRuntimeException :: getLineNumber() const
+ {
+ return locations[0].line;
+ } // end getLineNumber()
+
+ // ========================================================================
+ // Return function name where exception was raised
+ // ========================================================================
+ const char* ServiceRuntimeException :: getFunctionName() const
+ {
+ return locations[0].function;
+ } // end getFunctionName()
+
+
+ // ========================================================================
+ // set severity of exception
+ // ========================================================================
+ void ServiceRuntimeException :: setSeverity(severity_level sev)
+ {
+ severity = sev;
+ } // end setSeverity(severity_level sev) const
+
+ // ========================================================================
+ // set message text associated with exception
+ // ========================================================================
+ void ServiceRuntimeException :: setMessageText(const char* msg_text)
+ {
+ if (message_text != 0) delete message_text;
+ message_text = new char[strlen(msg_text) + 1];
+ strcpy(message_text,msg_text);
+ } // end setMessageText(const string &msg_text) const
+
+ // ========================================================================
+ // set location of most recent throw/handling of the exception
+ // ========================================================================
+ void ServiceRuntimeException :: setLocation(const char* file,
+ unsigned long line,
+ const char* function)
+ {
+ if (location_set < num_locations)
+ {
+ locations[location_set].file = new char[strlen(file) + 1];
+ strcpy(locations[location_set].file,file);
+ locations[location_set].line = line;
+ locations[location_set].function = new char[strlen(function) + 1];
+ strcpy(locations[location_set].function,function);
+
+ location_set++;
+ }
+ } // end setLocation()
+
+
+ // ========================================================================
+ // print self
+ // ========================================================================
+ ostream& ServiceRuntimeException :: PrintSelf(ostream &os) const
+ {
+
+ os << "Exception object :" << endl;
+ os << " class: " << class_name << endl;
+ os << " description: " << message_text << endl;
+ if (location_set != 0)
+ {
+ os << " file name: " << locations[0].file << endl;
+ char lineNumber[100];
+ sprintf(lineNumber, "%lu",locations[0].line);
+ os << " line number: " << lineNumber << endl;
+ os << " function: " << locations[0].function << endl;
+ os << " location history:" << endl;
+
+ int i=1;
+ while (i < location_set)
+ {
+ os << " " << i << ")" << endl;
+ os << " file: " << locations[i].file << endl;
+ os << " line: " << locations[i].line << endl;
+ os << " function: " << locations[i].function << endl;
+ i++;
+ }
+ }
+ return os;
+ } // end ostream operator <<
+
+ // ========================================================================
+ // ostream operator <<
+ // ========================================================================
+ SCA_API ostream& operator<< (ostream &os, const ServiceRuntimeException &except)
+ {
+ return except.PrintSelf(os);
+ } // end ostream operator <<
+
+
+ } // End namespace sca
+} // End namespace osoa
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.h
new file mode 100644
index 0000000000..7de44f84d7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/ServiceRuntimeException.h
@@ -0,0 +1,236 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_serviceruntimeexception_h
+#define osoa_sca_serviceruntimeexception_h
+
+#include "osoa/sca/export.h"
+
+#include <ostream>
+
+namespace osoa
+{
+ namespace sca
+ {
+
+ /**
+ * Top level exception to represent all the exceptions that may be
+ * thrown by an SCA runtime implementation.
+ */
+ class SCA_API ServiceRuntimeException
+ {
+ public:
+ /**
+ * Represents the possible severity levels for an exception.
+ */
+ enum severity_level
+ {
+ Normal,
+ Warning,
+ Error,
+ Severe
+ };
+
+ /**
+ * Constructor.
+ * @param name Class name of the exception.
+ * @param sev Severity level.
+ * @param msg_text Detailed description of the exception.
+ */
+ ServiceRuntimeException(
+ const char *name="ServiceRuntimeException",
+ severity_level sev=Severe,
+ const char* msg_text="");
+
+ ServiceRuntimeException(const ServiceRuntimeException& c);
+
+ // Destructor
+ virtual ~ServiceRuntimeException();
+
+ /**
+ * Return class name of this exception.
+ */
+ const char* getEClassName() const;
+
+ /**
+ * Return severity.
+ */
+ severity_level getSeverity() const;
+
+ /**
+ * Return message text associated with exception.
+ */
+ const char* getMessageText() const;
+
+ /*
+ * Return file name where the exception was raised.
+ */
+ const char* getFileName() const;
+
+ /**
+ * Return line number where the exception was raised.
+ */
+ unsigned long getLineNumber() const;
+
+ /**
+ * Return function name where the exception was raised.
+ */
+ const char* getFunctionName() const;
+
+ /**
+ * Set the exception severity.
+ */
+ void setSeverity(severity_level sev);
+
+ /**
+ * Set the message text associated with exception.
+ */
+ void setMessageText(const char* msg_text);
+
+ /**
+ * Set the location where the exception was raised.
+ * @param file Name of the file.
+ * @param line Line number in the file.
+ * @param function Name of the function.
+ */
+ void setLocation(const char* file,
+ unsigned long line,
+ const char* function="");
+
+ /**
+ * Append exception details to ostream.
+ */
+ virtual std::ostream& PrintSelf(std::ostream &os) const;
+
+ /**
+ * Operator to send exceptions details to a stream.
+ */
+ SCA_API friend std::ostream& operator<< (std::ostream &os, const ServiceRuntimeException &except);
+ protected:
+
+ private:
+ /**
+ * Class name of the exception.
+ */
+ char* class_name;
+
+ /**
+ * Severity level of the exception.
+ */
+ severity_level severity;
+
+ /**
+ * Description of the exception.
+ */
+ char* message_text; // Description of exception
+
+ /**
+ * Location where the exception was thrown or handled and thrown.
+ */
+ class location
+ {
+ public:
+ char* file; // File name (from __FILE__)
+ unsigned long line; // Line number (from __LINE__)
+ char* function; // Function name
+ };
+
+
+ enum {num_locations=5};
+ /**
+ * Array of locations where the exception has been handled and thrown.
+ */
+ location locations[num_locations];
+
+ /**
+ * The current location (index into ServiceRuntimeException#location).
+ */
+ int location_set;
+
+
+ }; // End ServiceRuntimeException class definition
+
+
+ /**
+ * A remotable service is currently unavailable. It is possible that a retry
+ * may resolve this exception.
+ */
+ class SCA_API ServiceUnavailableException: public ServiceRuntimeException
+ {
+ public:
+ ServiceUnavailableException(const char* serviceName)
+ : ServiceRuntimeException("ServiceUnavailableException", Warning,
+ serviceName)
+ {
+ }
+ private:
+ }; // End ServiceUnavailableException class definition
+
+
+ /**
+ * The target of a wire cannot be found, or the reference has not been
+ * configured.
+ */
+ class SCA_API ServiceNotFoundException: public ServiceRuntimeException
+ {
+ public:
+ ServiceNotFoundException(const char* msg)
+ : ServiceRuntimeException("ServiceNotFoundException", Error,
+ msg)
+ {
+ }
+ private:
+ }; // End ServiceNotFoundException class definition
+
+
+ /**
+ * There is no current component (for example, if a non-SCA component
+ * tries to get the current ComponentContext).
+ */
+ class SCA_API ComponentContextException: public ServiceRuntimeException
+ {
+ public:
+ ComponentContextException(const char* msg)
+ : ServiceRuntimeException("ComponentContextException", Error,
+ msg)
+ {
+ }
+ private:
+ }; // End ComponentContextException class definition
+
+ /**
+ * Unable to find the specified entry point in the module.
+ */
+ class SCA_API EntryPointNotFoundException: public ServiceRuntimeException
+ {
+ public:
+ EntryPointNotFoundException(const char* msg)
+ : ServiceRuntimeException("EntryPointNotFoundException", Error,
+ msg)
+ {
+ }
+ private:
+ }; // End EntryPointNotFoundException class definition
+
+
+
+ } // End namespace sca
+} // End namespace osoa
+
+#endif // osoa_sca_serviceruntimeexception_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/export.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/export.h
new file mode 100644
index 0000000000..6ef7960284
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/export.h
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_export_h
+#define osoa_sca_export_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+
+#ifdef SCA_EXPORTS
+#define SCA_API __declspec(dllexport)
+#else
+#define SCA_API __declspec(dllimport)
+#endif
+
+#else
+#include <sys/time.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#define SCA_API
+#endif
+
+#endif // osoa_sca_export_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/sca.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/sca.h
new file mode 100644
index 0000000000..528bd91c4a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/osoa/sca/sca.h
@@ -0,0 +1,29 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef osoa_sca_sca_h
+#define osoa_sca_sca_h
+
+#include "osoa/sca/export.h"
+#include "osoa/sca/ModuleContext.h"
+#include "osoa/sca/ComponentContext.h"
+#include "osoa/sca/ServiceList.h"
+#include "osoa/sca/ServiceRuntimeException.h"
+
+#endif // osoa_sca_sca_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.cpp
new file mode 100644
index 0000000000..65d218dc86
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.cpp
@@ -0,0 +1,204 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/core/SCARuntime.h"
+#include "tuscany/sca/model/CPPImplementation.h"
+using namespace osoa::sca;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ // ===================
+ // Static data members
+ // ===================
+ void* ComponentServiceWrapper::staticImpl = 0;
+
+ // ===========
+ // Constructor
+ // ===========
+ ComponentServiceWrapper::ComponentServiceWrapper(Service* target)
+ : ServiceWrapper(target), service(target)
+ {
+ LOGENTRY(1,"ComponentServiceWrapper::constructor");
+ if (target->getServiceType() != WireTarget::ComponentServiceType)
+ {
+ throw ServiceRuntimeException("ComponentServiceWrapper: target is not a component service");
+ }
+
+ component = target->getComponent();
+ interf = (CPPInterface*)target->getInterface();
+
+ remotable = interf->getRemotable();
+
+
+ LOGEXIT(1,"ComponentServiceWrapper::constructor");
+
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ComponentServiceWrapper::~ComponentServiceWrapper()
+ {
+ LOGENTRY(1,"ComponentServiceWrapper::destructor");
+ LOGEXIT(1,"ComponentServiceWrapper::destructor");
+ }
+
+
+ // ======================================================================
+ // getImplementation: get an implementation for this scope
+ // ======================================================================
+ void* ComponentServiceWrapper::getImplementation()
+ {
+ CPPInterface::SCOPE scope = interf->getScope();
+ if (scope == CPPInterface::MODULE)
+ {
+ if (!staticImpl)
+ {
+ staticImpl = newImplementation();
+ }
+ return staticImpl;
+ }
+ else // (scope == CPPInterface::STATELESS)
+ {
+ return newImplementation();
+ }
+ }
+
+ // ======================================================================
+ // releaseImplementation: release the implementation for this scope
+ // ======================================================================
+ void ComponentServiceWrapper::releaseImplementation()
+ {
+ CPPInterface::SCOPE scope = interf->getScope();
+ if (scope == CPPInterface::STATELESS)
+ {
+ deleteImplementation();
+ }
+ }
+
+ // ======================================================================
+ // invoke: wrapper call to service with setting the component context
+ // ======================================================================
+ void ComponentServiceWrapper::invoke(Operation& operation)
+ {
+ LOGENTRY(1,"ComponentServiceWrapper::invoke");
+
+ SCARuntime* runtime = SCARuntime::getInstance();
+ runtime->setCurrentComponent(component);
+
+ try
+ {
+ invokeService(operation);
+ }
+ catch (...)
+ {
+ runtime->unsetCurrentComponent();
+ throw;
+ }
+ runtime->unsetCurrentComponent();
+ LOGEXIT(1,"ComponentServiceWrapper::invoke");
+
+ }
+
+ void ComponentServiceWrapper::setLibrary(Library* lib)
+ {
+ wrapperLibrary = lib;
+ }
+
+ // ======================================================================
+ // createServiceWrapper: create a wrapper for the target ComponentService
+ // ======================================================================
+ ComponentServiceWrapper* ComponentServiceWrapper::createServiceWrapper(Service* service)
+ {
+ string msg;
+ ComponentServiceWrapper* serviceWrapper = 0;
+
+ // -----------------------------------------------
+ // Get the implementation for the target component
+ // -----------------------------------------------
+ Component* targetComponent = service->getComponent();
+ Implementation* impl = targetComponent->getImplementation();
+ if (!impl)
+ {
+ msg = "Component " + targetComponent->getName() + " has no implementation defined";
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ // TODO: This only handle CPP implementation for now
+ if (impl->getImplementationType() == Implementation::CPP)
+ {
+ // ----------------------------------------------------
+ // Get implementation dll name and wrapper factory name
+ // ----------------------------------------------------
+ string dllName = ((CPPImplementation*)impl)->getDll();
+ string wrapperFactoryName = ((CPPImplementation*)impl)->getHeaderStub()
+ + "_" + service->getName() + "_Wrapper_Factory";
+
+ // ------------
+ // Load the dll
+ // ------------
+ string fullDllName = targetComponent->getModule()->getRoot() + "/" + dllName;
+ typedef ComponentServiceWrapper* (* WRAPPERFACTORY) (Service*);
+ Library* wrapperLib = new Library(fullDllName);
+
+ // -------------------------
+ // Locate the factory method
+ // -------------------------
+ WRAPPERFACTORY wrapperFactory = (WRAPPERFACTORY)wrapperLib->getSymbol(wrapperFactoryName);
+ if (!wrapperFactory)
+ {
+ LOGERROR_2(1, "ComponentServiceWrapper::createServiceWrapper: Unable to locate %s in library %s",
+ wrapperFactoryName.c_str(), fullDllName.c_str());
+ msg = "Unable to locate " + wrapperFactoryName + " in library " + fullDllName;
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ // -------------------------------------
+ // Now create an instance of the wrapper
+ // -------------------------------------
+ serviceWrapper = wrapperFactory(service);
+ if (!serviceWrapper)
+ {
+ LOGERROR_2(1, "ComponentServiceWrapper::createServiceWrapper: Factory method %s in library %s returned null",
+ wrapperFactoryName.c_str(), fullDllName.c_str());
+ msg = "Factory method " + wrapperFactoryName + " in library " + fullDllName + " returned null";
+ throw ServiceNotFoundException(msg.c_str());
+ }
+ serviceWrapper->setLibrary(wrapperLib);
+ }
+ else
+ {
+ // ----------------------
+ // Non CPP Implementation
+ // ----------------------
+ msg = "Unsupported implementation type for service: " + service->getName();
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ return serviceWrapper;
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.h
new file mode 100644
index 0000000000..3a5e990bf0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ComponentServiceWrapper.h
@@ -0,0 +1,156 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_componentservicewrapper_h
+#define tuscany_sca_core_componentservicewrapper_h
+
+#include "osoa/sca/export.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/core/Operation.h"
+#include "tuscany/sca/model/CPPInterface.h"
+#include "tuscany/sca/util/Library.h"
+
+using namespace tuscany::sca::model;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Wraps the service on a component implementation.
+ * This abstract class is extended by generated code which provides
+ * the implementation of some of the methods.
+ * An instance of this class wraps the actual component implementation which
+ * has been written by a developer of an SCA application.
+ */
+ class ComponentServiceWrapper : public ServiceWrapper
+ {
+ public:
+ /**
+ * Factory method to create a new ComponentServiceWrapper for a given target
+ * service. This method will provide all the loading of dlls required to
+ * create the target component.
+ * @param target The service on the component for which this wrapper is to be
+ * created.
+ * @return A wrapper that references the given target.
+ */
+ static SCA_API ComponentServiceWrapper* createServiceWrapper(Service* target);
+
+ /**
+ * Constructor.
+ * @param target The component service to which this wrapper refers.
+ */
+ SCA_API ComponentServiceWrapper(Service* target);
+
+ /**
+ * Destructor.
+ */
+ SCA_API virtual ~ComponentServiceWrapper();
+
+ /**
+ * All business method calls to the target component go through the invoke method.
+ * @param operation The details of the method, paramaters and return value for the
+ * business method to be called on the target component.
+ */
+ SCA_API virtual void invoke(Operation& operation);
+
+ /**
+ * Return the loaded shared library for the target component.
+ */
+ Library* getLibrary() {return wrapperLibrary;}
+ protected:
+ /**
+ * Delegated method to invoke the correct method on the target component.
+ * Implemented by the subtype.
+ */
+ SCA_API virtual void invokeService(Operation& operation) = 0;
+
+ /**
+ * Delegated method to create a new component implementation.
+ * Implemented by the subtype.
+ * @return A pointer to an instance of the component implementation class.
+ */
+ SCA_API virtual void* newImplementation() = 0;
+
+ /**
+ * Delegated method to delete the current instance of the component
+ * implementation.
+ * Implemented by the subtype.
+ */
+ SCA_API virtual void deleteImplementation() = 0;
+
+ /**
+ * Return the current instance of the component implementation.
+ * @return A pointer to an instance of the component implementation class.
+ */
+ SCA_API virtual void* getImplementation();
+
+ /**
+ * Indicates that the current instance of the component implementation
+ * has been finished with.
+ * Will call ComponentServiceWrapper#deleteImplementation if the
+ * implementation is stateless (so that a new instance is returned
+ * for each call).
+ */
+ SCA_API virtual void releaseImplementation();
+
+ private:
+ /**
+ * Holds an implementation instance if the scope is set to module.
+ */
+ static void* staticImpl;
+
+ /**
+ * The component to which this wrapper refers.
+ */
+ Component* component;
+
+ /**
+ * The service on the component to which this wrapper refers.
+ */
+ Service* service;
+
+ /**
+ * A pointer to the interface which the service exposes.
+ */
+ CPPInterface* interf;
+
+ /**
+ * Set to true if the service is remotable.
+ */
+ bool remotable;
+
+ /**
+ * Pointer to the loaded library which contains the component
+ * implementation.
+ */
+ Library* wrapperLibrary;
+
+ /**
+ * Set the loaded library which contains the component
+ * implementation.
+ * @param lib The library.
+ */
+ void setLibrary(Library* lib);
+ };
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_core_componentservicewrapper_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.cpp
new file mode 100644
index 0000000000..2838bbe4d4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.cpp
@@ -0,0 +1,102 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/ExternalServiceWrapper.h"
+#include <stdarg.h>
+
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/core/SCARuntime.h"
+
+#include "tuscany/sca/ws/WSServiceWrapper.h"
+using tuscany::sca::ws::WSServiceWrapper;
+
+using namespace osoa::sca;
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ //////////////////////////////////////////////////////////////////////
+ // Construction/Destruction
+ //////////////////////////////////////////////////////////////////////
+
+ ExternalServiceWrapper::ExternalServiceWrapper(tuscany::sca::model::WireTarget* target)
+ : ServiceWrapper(target)
+ {
+ LOGENTRY(1,"ExternalServiceWrapper::constructor");
+ if (target->getServiceType() != WireTarget::ExternalServiceType)
+ {
+ throw ServiceRuntimeException("ExternalServiceWrapper: target is not an ExternalService");
+ }
+
+ LOGEXIT(1,"ExternalServiceWrapper::constructor");
+
+ }
+
+ ExternalServiceWrapper::~ExternalServiceWrapper()
+ {
+ LOGENTRY(1,"ExternalServiceWrapper::destructor");
+ LOGEXIT(1,"ExternalServiceWrapper::destructor");
+ }
+
+ // ======================================================================
+ // createServiceWrapper: create a wrapper for the target ExternalService
+ // ======================================================================
+ ExternalServiceWrapper* ExternalServiceWrapper::createServiceWrapper(ExternalService* service)
+ {
+ string msg;
+ ExternalServiceWrapper* serviceWrapper = 0;
+
+ // -----------------------------------------------
+ // Get the binding for the target component
+ // -----------------------------------------------
+ Binding* targetBinding = service->getBinding();
+ if (!targetBinding)
+ {
+ msg = "External service " + service->getName() + " has no binding defined";
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ // TODO: This only handles ws implementation for now
+ if (targetBinding->getBindingType() == Binding::WS)
+ {
+ // -------------------------------------
+ // Create an instance of the wrapper
+ // -------------------------------------
+ serviceWrapper = new WSServiceWrapper(service);
+
+ }
+ else
+ {
+ // ----------------------
+ // Non WS Binding
+ // ----------------------
+ msg = "Unsupported binding type for externalService: " + service->getName();
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ return serviceWrapper;
+ }
+
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.h
new file mode 100644
index 0000000000..b2dcfb3a6b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ExternalServiceWrapper.h
@@ -0,0 +1,81 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_externalservicewrapper_h
+#define tuscany_sca_core_externalservicewrapper_h
+
+#include "osoa/sca/export.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+#include "tuscany/sca/core/Operation.h"
+#include "tuscany/sca/model/ExternalService.h"
+using tuscany::sca::model::ExternalService;
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ /**
+ * Wraps an SCA external service so that it can be called by a
+ * proxy.
+ * This abstract class will be extended by a class which supports
+ * a specific external service binding (for example, the web services binding).
+ */
+ class SCA_API ExternalServiceWrapper : public ServiceWrapper
+ {
+ public:
+ /**
+ * Factory method to create a new ExternaServiceWrapper for a given
+ * external service described in the SCA module.
+ */
+ static ExternalServiceWrapper* createServiceWrapper(ExternalService* service);
+
+ /**
+ * Constructor.
+ * @param target The target external service for which this wrapper is to be
+ * created.
+ * @return A wrapper that references the given target.
+ */
+ ExternalServiceWrapper(tuscany::sca::model::WireTarget* target);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ExternalServiceWrapper();
+
+ /**
+ * Return the external service (in the runtime model) that is wrapped by
+ * the instance of this class.
+ */
+ virtual ExternalService* getExternalService() {return (ExternalService*)getTarget();};
+
+ /**
+ * All business method calls to the external service go through the invoke method.
+ * This is a delegated method which will be implemented by the subclass.
+ * @param operation The details of the method, paramaters and return value for the
+ * business method to be called on the external service.
+ */
+ virtual void invoke(Operation& operation) = 0;
+ private:
+
+ };
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_core_externalservicewrapper_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.cpp
new file mode 100644
index 0000000000..981f4e6d9e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.cpp
@@ -0,0 +1,266 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/Operation.h"
+#include <stdarg.h>
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/core/SCARuntime.h"
+
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+ // ===========
+ // Constructor
+ // ===========
+ Operation::Operation(const char* operationName)
+ {
+ LOGENTRY(1,"Operation::constructor");
+
+ if (operationName != 0)
+ {
+ name = operationName;
+ }
+
+ LOGEXIT(1,"Operation::constructor");
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ Operation::~Operation()
+ {
+ LOGENTRY(1,"Operation::destructor");
+ LOGEXIT(1,"Operation::destructor");
+ }
+
+
+ // ==============================================
+ // getParameter: return parameter at position pos
+ // ==============================================
+ void* Operation::getParameterValue(unsigned int pos)
+ {
+ if (pos < parameters.size())
+ {
+ return parameters[pos].getValue();
+ }
+
+ return 0;
+ }
+
+ // ==============================================
+ // getParameter: return of parameter
+ // ==============================================
+ Operation::Parameter& Operation::getParameter(unsigned int pos)
+ {
+ if (pos < parameters.size())
+ {
+ return parameters[pos];
+ }
+
+ throw "index out of range";
+ }
+
+
+ // ==============================================
+ // getParameterType: return type of parameter
+ // ==============================================
+ Operation::ParameterType Operation::getParameterType(unsigned int pos)
+ {
+ if (pos < parameters.size())
+ {
+ return parameters[pos].getType();
+ }
+
+ return VOID_TYPE;
+ }
+
+ // ===========================================
+ // addParameter: set parameter at position pos
+ // ===========================================
+ void Operation::addParameter(const void *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(void*)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, VOID_TYPE));
+ }
+
+ void Operation::addParameter(const bool *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(bool)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, BOOL));
+ }
+
+ void Operation::addParameter(const short *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(short)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, SHORT));
+ }
+
+ void Operation::addParameter(const long *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(long)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, LONG));
+ }
+
+ void Operation::addParameter(const unsigned short *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(unsigned short)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, USHORT));
+ }
+
+ void Operation::addParameter(const unsigned long *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(unsigned long)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, ULONG));
+ }
+
+ void Operation::addParameter(const float *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(float)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, FLOAT));
+ }
+
+ void Operation::addParameter(const double *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(double)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, DOUBLE));
+ }
+
+ void Operation::addParameter(const long double *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(long double)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, LONGDOUBLE));
+ }
+
+ void Operation::addParameter(const char* *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(char*)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, CHARS));
+ }
+
+ void Operation::addParameter(const char *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(char)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, CHAR));
+ }
+
+ void Operation::addParameter(const string *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(string)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, STRING));
+ }
+
+ void Operation::addParameter(const DataObjectPtr *parm)
+ {
+ LOGINFO(4, "Operation::addParameter(DataObjectPtr)");
+ parameters.insert(parameters.end(), Parameter((void*)parm, DATAOBJECT));
+ }
+
+ Operation::Parameter::Parameter(void* val, Operation::ParameterType typ)
+ : value(val), type(typ)
+ {
+ }
+
+ // ===========================================
+ // setReturnValue
+ // ===========================================
+ void Operation::setReturnValue(const void *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(void*)");
+ returnValue = Parameter((void*)parm, VOID_TYPE);
+ }
+
+ void Operation::setReturnValue(const bool *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(bool*)");
+ returnValue = Parameter((void*)parm, BOOL);
+ }
+
+ void Operation::setReturnValue(const short *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(short*)");
+ returnValue = Parameter((void*)parm, SHORT);
+ }
+
+ void Operation::setReturnValue(const long *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(long*)");
+ returnValue = Parameter((void*)parm, LONG);
+ }
+
+ void Operation::setReturnValue(const unsigned short *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(unsigned short*)");
+ returnValue = Parameter((void*)parm, USHORT);
+ }
+
+ void Operation::setReturnValue(const unsigned long *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(unsigned long*)");
+ returnValue = Parameter((void*)parm, ULONG);
+ }
+
+ void Operation::setReturnValue(const float *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(float*)");
+ returnValue = Parameter((void*)parm, FLOAT);
+ }
+
+ void Operation::setReturnValue(const double *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(double*)");
+ returnValue = Parameter((void*)parm, DOUBLE);
+ }
+
+ void Operation::setReturnValue(const long double *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(long double*)");
+ returnValue = Parameter((void*)parm, LONGDOUBLE);
+ }
+
+ void Operation::setReturnValue(const char *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(char)");
+ returnValue = Parameter((void*)parm, CHAR);
+ }
+
+ void Operation::setReturnValue(const char* *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(char*)");
+ returnValue = Parameter((void*)parm, CHARS);
+ }
+
+ void Operation::setReturnValue(const string *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(string*)");
+ returnValue = Parameter((void*)parm, STRING);
+ }
+
+ void Operation::setReturnValue(const DataObjectPtr *parm)
+ {
+ LOGINFO(4, "Operation::setReturnValue(DataObjectPtr*)");
+ returnValue = Parameter((void*)parm, DATAOBJECT);
+ }
+
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.h
new file mode 100644
index 0000000000..e562dca3c1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/Operation.h
@@ -0,0 +1,177 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_operation_h
+#define tuscany_sca_core_operation_h
+#include "osoa/sca/export.h"
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+#include <string>
+using std::string;
+#include <vector>
+using std::vector;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Holds the details of a single invocation of a business method.
+ * This class is used to pass the parameters and operation name from the
+ * client to a service. It will also hold the return value on the
+ * return from the business method.
+ */
+ class Operation
+ {
+ public:
+ /**
+ * Create a new operation.
+ * @param operationName The method name of the business method to be invoked.
+ * @param numParameters The number of parameters to be passed.
+ */
+ SCA_API Operation(const char* operationName = 0);
+
+ /**
+ * Destructor.
+ */
+ SCA_API virtual ~Operation();
+
+ /**
+ * Return the operation name.
+ * @return The name of the operation.
+ */
+ SCA_API const string& getName() {return name;}
+
+
+ enum ParameterType
+ {
+ UNSET = 0,
+ VOID_TYPE,
+ BOOL,
+ SHORT,
+ LONG,
+ USHORT,
+ ULONG,
+ FLOAT,
+ DOUBLE,
+ LONGDOUBLE,
+ CHARS,
+ CHAR,
+ STRING,
+ DATAOBJECT
+ };
+
+ class Parameter
+ {
+ public:
+ SCA_API Parameter(void* value = NULL, ParameterType type = VOID_TYPE);
+ SCA_API void* getValue() {return value;}
+ SCA_API ParameterType getType() {return type;}
+
+ private:
+ void* value;
+ ParameterType type;
+ };
+
+ /**
+ * Set a return value for the operation.
+ * @param retVal Pointer to the return value.
+ */
+ SCA_API void setReturnValue(const void *retVal);
+ SCA_API void setReturnValue(const bool *retVal);
+ SCA_API void setReturnValue(const short *retVal);
+ SCA_API void setReturnValue(const long *retVal);
+ SCA_API void setReturnValue(const unsigned short *retVal);
+ SCA_API void setReturnValue(const unsigned long *retVal);
+ SCA_API void setReturnValue(const float *retVal);
+ SCA_API void setReturnValue(const double *retVal);
+ SCA_API void setReturnValue(const long double *retVal);
+ SCA_API void setReturnValue(const char *retVal);
+ SCA_API void setReturnValue(const char* *retVal);
+ SCA_API void setReturnValue(const string *retVal);
+ SCA_API void setReturnValue(const DataObjectPtr *retVal);
+
+ /**
+ * Set a parameter on the operation.
+ * @param pos The position of the parameter in the parameter list.
+ * @param parm Pointer to the parameter to be passed.
+ */
+ SCA_API void addParameter(const void *parm);
+ SCA_API void addParameter(const bool *parm);
+ SCA_API void addParameter(const short *parm);
+ SCA_API void addParameter(const long *parm);
+ SCA_API void addParameter(const unsigned short *parm);
+ SCA_API void addParameter(const unsigned long *parm);
+ SCA_API void addParameter(const float *parm);
+ SCA_API void addParameter(const double *parm);
+ SCA_API void addParameter(const long double *parm);
+ SCA_API void addParameter(const char *parm);
+ SCA_API void addParameter(const char* *parm);
+ SCA_API void addParameter(const string *parm);
+ SCA_API void addParameter(const DataObjectPtr *parm);
+
+ SCA_API unsigned int getNParms() {return parameters.size();}
+
+ /**
+ * Get a parameter from the operation.
+ * @param pos The position of the parameter in the parameter list.
+ * @return Pointer to the paramter at the given postion. Should be
+ * cast to the appropriate type.
+ */
+ SCA_API Parameter& getParameter(unsigned int pos);
+
+ /**
+ * Get a parameter type from the operation.
+ * @param pos The position of the parameter in the parameter list.
+ * @return Pointer to the paramter at the given postion. Should be
+ * cast to the appropriate type.
+ */
+ SCA_API ParameterType getParameterType(unsigned int pos);
+
+ /**
+ * Get a parameter from the operation.
+ * @param pos The position of the parameter in the parameter list.
+ * @return Pointer to the paramter at the given postion. Should be
+ * cast to the appropriate type.
+ */
+ SCA_API void* getParameterValue(unsigned int pos);
+
+ SCA_API ParameterType getReturnType() {return returnValue.getType();}
+ SCA_API void* getReturnValue() {return returnValue.getValue();}
+
+ private:
+ /**
+ * Operation name (method name).
+ */
+ string name;
+
+ /**
+ * Array of parameters.
+ */
+ typedef std::vector<Parameter> PARAMETER_VECTOR;
+
+ PARAMETER_VECTOR parameters;
+
+ Parameter returnValue;
+
+ };
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_core_operation_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.cpp
new file mode 100644
index 0000000000..63a7d52e7a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.cpp
@@ -0,0 +1,210 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/SCAEntryPoint.h"
+
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/core/SCARuntime.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+#include "tuscany/sca/core/ExternalServiceWrapper.h"
+using namespace osoa::sca;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ // ===========
+ // Constructor
+ // ===========
+ SCAEntryPoint::SCAEntryPoint(const char* epName)
+ : subsystem(0), entrypoint(0), module(0)
+ {
+ LOGENTRY(1,"SCAEntryPoint::constructor");
+ string message;
+
+ // initialize the system if necessary
+ System* system = SCARuntime::getInstance()->getSystem();
+
+ string subsystemName;
+ string entrypointName;
+
+ Utils::tokeniseUri(epName, subsystemName, entrypointName);
+
+ // --------------------
+ // locate the Subsystem
+ // --------------------
+ subsystem = system->findSubsystem(subsystemName);
+ if (!subsystem)
+ {
+ throw EntryPointNotFoundException(epName);
+ }
+
+ // ---------------------
+ // locate the EntryPoint
+ // ---------------------
+ entrypoint = subsystem->findEntryPoint(entrypointName);
+ if (entrypoint)
+ {
+ // found Subsystem EntryPoint
+ throw EntryPointNotFoundException("Subsystem EntryPoint not yet supported");
+ }
+ else
+ {
+ // -----------------------------------
+ // locate the EntryPoint in the Module
+ // -----------------------------------
+ string moduleComponentName;
+ Utils::tokeniseUri(entrypointName, moduleComponentName, entrypointName);
+ module = subsystem->findModuleByComponentName(moduleComponentName);
+ if (module)
+ {
+ dataFactory = module->getDataFactory();
+ entrypoint = module->findEntryPoint(entrypointName);
+ }
+ }
+
+ if (!entrypoint)
+ {
+ throw EntryPointNotFoundException(epName);
+ }
+
+ // ---------------------------------
+ // Get Wrappers for each wire target
+ // ---------------------------------
+
+ // Get the target services from the EntryPoint
+ const EntryPoint::TARGETS& targets = entrypoint->getTargets();
+
+ // --------------------
+ // Validate the request
+ // --------------------
+ switch (entrypoint->getMultiplicity())
+ {
+ case EntryPoint::ONE_MANY:
+ case EntryPoint::ONE_ONE:
+ {
+ if (targets.size() == 0)
+ {
+ message = "EntryPoint " + entrypoint->getName() + " not wired";
+ throw ServiceNotFoundException(message.c_str());
+ }
+ }
+ default:
+ {
+ }
+ } // end switch
+
+ for (EntryPoint::TARGETS::const_iterator iter = targets.begin();
+ iter!=targets.end();
+ iter++)
+ {
+ ServiceWrapper* service = getServiceWrapper(*iter);
+ if (service)
+ {
+ services.push_back(service);
+ }
+ }
+
+ LOGEXIT(1,"SCAEntryPoint::constructor");
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ SCAEntryPoint::~SCAEntryPoint()
+ {
+ LOGENTRY(1,"SCAEntryPoint::destructor");
+
+ // Delete any ServiceWrappers
+ for (SERVICES::iterator iter = services.begin(); iter < services.end(); iter++)
+ {
+ delete (*iter);
+ }
+ LOGEXIT(1,"SCAEntryPoint::destructor");
+ }
+
+
+ // ======================================================================
+ // invoke:
+ // ======================================================================
+ SCA_API void SCAEntryPoint::invoke(Operation& operation)
+ {
+ LOGENTRY(1,"SCAEntryPoint::invoke");
+ string message;
+
+ // --------------------
+ // Validate the request
+ // --------------------
+ if (services.size() == 0)
+ {
+ message = "EntryPoint " + entrypoint->getName() + " not wired";
+ throw ServiceNotFoundException(message.c_str());
+ }
+
+ // -------------------
+ // Invoke each target
+ // -------------------
+ for (SERVICES::iterator iter = services.begin(); iter < services.end(); iter++)
+ {
+ (*iter)->invoke(operation);
+ }
+ LOGEXIT(1,"SCAEntryPoint::invoke");
+ }
+
+
+ // ======================================================================
+ // getServiceWrapper: Create and return an instance of the ServiceWrapper
+ // ======================================================================
+ ServiceWrapper* SCAEntryPoint::getServiceWrapper(WireTarget* target)
+ {
+ // -------------------------
+ // Determine type of Service
+ // -------------------------
+ switch (target->getServiceType())
+ {
+ case WireTarget::ExternalServiceType:
+ {
+ // ----------------
+ // External Service
+ // ----------------
+ return ExternalServiceWrapper::createServiceWrapper((ExternalService*)target);
+ }
+
+ case WireTarget::ComponentServiceType:
+ {
+ // -----------------
+ // Component Service
+ // -----------------
+ return ComponentServiceWrapper::createServiceWrapper((Service*)target);
+ }
+
+ default:
+ {
+ string message = "Undefined wire target type for : ";
+ message = message + target->getName();
+ throw ServiceNotFoundException(message.c_str());
+ }
+ } // end switch
+ }
+
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.h
new file mode 100644
index 0000000000..6c1df3e28e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCAEntryPoint.h
@@ -0,0 +1,122 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_scaentrypoint_h
+#define tuscany_sca_core_scaentrypoint_h
+
+#include "osoa/sca/export.h"
+
+#include <vector>
+using std::vector;
+#include "tuscany/sca/core/ServiceWrapper.h"
+#include "tuscany/sca/model/WireTarget.h"
+#include "tuscany/sca/model/Subsystem.h"
+#include "tuscany/sca/model/EntryPoint.h"
+#include "tuscany/sca/model/Module.h"
+using namespace tuscany::sca::model;
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+using commonj::sdo::DataFactoryPtr;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * A runtime class which is used by external bindings to provide the entry
+ * point into the SCA runtime. An entry point will be defined in an SCA
+ * module, and a binding class will be provided to service the
+ * communication between the external binding (e.g. for web services the
+ * SOAP/HTTP communication) and the SCA runtime. The binding class will
+ * use SCAEntryPoint to call into the SCA runtime.
+ */
+ class SCAEntryPoint
+ {
+ public:
+ /**
+ * Constructor to create a new instance which will be associated with
+ * a given entry point in an SCA module.
+ * @param entryPointName The qualified name of the entry point in an
+ * SCA module. It is of the form
+ * "subsystem name"/"module component name"/"entry point name".
+ */
+ SCA_API SCAEntryPoint(const char* entryPointName);
+
+ /**
+ * Destructor.
+ */
+ SCA_API virtual ~SCAEntryPoint();
+
+ /**
+ * Invokes an operation on the component to which the SCA entry point
+ * is wired in the SCA module.
+ * @param operation. The operation request
+ */
+ SCA_API virtual void invoke(Operation& operation);
+
+ /**
+ * Returns a SDO data factory from which all the types associated with the entry point
+ * and module can be created.
+ */
+ SCA_API DataFactoryPtr getDataFactory() {return dataFactory;}
+
+ protected:
+
+ private:
+ /**
+ * The subsystem in which this entry point is found.
+ */
+ Subsystem* subsystem;
+
+ /**
+ * The entry point in the module.
+ */
+ EntryPoint* entrypoint;
+
+ /**
+ * The module component in the subsystem.
+ */
+ Module* module;
+
+ /**
+ * Cached data factory which has all the types defined for the module in which
+ * this entry point is found.
+ */
+ DataFactoryPtr dataFactory;
+
+ typedef vector<ServiceWrapper*> SERVICES;
+ /**
+ * Vector of all the service wrappers created for this entry point.
+ * Used to destroy the wrappers when this class is destroyed.
+ */
+ SERVICES services;
+
+ /**
+ * Creates and returns the service wrapper for a given target.
+ * @param target The target of the wire for which a service wrapper is
+ * to be created.
+ * @return A service wrapper to be used for invoking the target implementation.
+ */
+ ServiceWrapper* getServiceWrapper(WireTarget* target);
+
+ };
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_core_scaentrypoint_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.cpp
new file mode 100644
index 0000000000..9da3e547e9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.cpp
@@ -0,0 +1,355 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/SCARuntime.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Exceptions.h"
+
+#include "tuscany/sca/model/System.h"
+#include "tuscany/sca/model/Subsystem.h"
+#include "tuscany/sca/model/ModelLoader.h"
+
+#if defined(WIN32) || defined (_WINDOWS)
+#include <windows.h>
+#endif
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Environment variable names
+ */
+ static const char* TUSCANY_SCACPP = "TUSCANY_SCACPP";
+ static const char* TUSCANY_SCACPP_SYSTEM_ROOT = "TUSCANY_SCACPP_SYSTEM_ROOT";
+ static const char* TUSCANY_SCACPP_DEFAULT_MODULE = "TUSCANY_SCACPP_DEFAULT_MODULE";
+
+
+ // ==========================================================
+ // Initialize static class member to not pointing at anything
+ // ==========================================================
+ SCARuntime* SCARuntime::instance = 0;
+ string SCARuntime::systemRoot = "";
+ string SCARuntime::defaultModuleName = "";
+
+
+ // ==========================================================
+ // Set the system configuration root
+ // ==========================================================
+ void SCARuntime::setSystemRoot(const string& root)
+ {
+ LOGENTRY(1, "SCARuntime::");
+ systemRoot = root;
+ LOGINFO_1(3, "SCARuntime::setSystemRoot - set to %s", root.c_str());
+ LOGEXIT(1, "SCARuntime::setSystemRoot");
+ }
+
+ // ==========================================================
+ // Set the default ModuleComponent name
+ // ==========================================================
+ void SCARuntime::setDefaultModuleComponent(const string& moduleComponent)
+ {
+ LOGENTRY(1, "SCARuntime::setDefaultModuleComponent");
+ defaultModuleName = moduleComponent;
+ LOGINFO_1(3, "SCARuntime::setDefaultModuleComponent - set to %s", moduleComponent.c_str());
+ LOGEXIT(1, "SCARuntime::setDefaultModuleComponent");
+ }
+
+ // ===================================================================
+ // Constructor for the SCARuntime class. This will be a singleton that
+ // holds all the information about the current runtime.
+ // ===================================================================
+ SCARuntime::SCARuntime() : system(new System()), defaultModule(0)
+ {
+ LOGENTRY(1, "SCARuntime::constructor");
+
+ // Locate the SCA install root
+ char* root = 0;
+ root = getenv(TUSCANY_SCACPP);
+ if (root == 0)
+ {
+ string msg = TUSCANY_SCACPP;
+ msg += " environment variable not set";
+ throw SystemConfigurationException(msg.c_str());
+ }
+ else
+ {
+ SCARoot = root;
+ }
+
+ LOGEXIT(1, "SCARuntime::constructor");
+ }
+
+ // ===================================================================
+ // Destructor for the SCARuntime class.
+ // ===================================================================
+ SCARuntime::~SCARuntime()
+ {
+ LOGENTRY(1, "SCARuntime::destructor");
+
+ if (system)
+ {
+ delete system;
+ }
+
+ LOGEXIT(1, "SCARuntime::destructor");
+ }
+
+ // =============================================================
+ // Get the instance of the runtime, creates it if does not exist
+ // static method
+ // =============================================================
+ SCARuntime* SCARuntime::getInstance()
+ {
+ LOGENTRY(1, "SCARuntime::getInstance");
+
+ if (instance == NULL)
+ {
+ instance = new SCARuntime();
+
+ if (systemRoot == "")
+ {
+
+ // Load the runtime
+ // Get root from environment variable TUSCANY_SCACPP_SYSTEM_ROOT
+ char* systemRootEnv = getenv(TUSCANY_SCACPP_SYSTEM_ROOT);
+ if (systemRootEnv == 0)
+ {
+ string msg = TUSCANY_SCACPP_SYSTEM_ROOT;
+ msg += " environment variable not set";
+ throw SystemConfigurationException(msg.c_str());
+ }
+
+ systemRoot = systemRootEnv;
+ }
+
+ instance->load(systemRoot);
+ }
+
+ LOGEXIT(1, "SCARuntime::getInstance");
+
+ return instance;
+
+ }
+
+
+ // =============================================================
+ // Release the instance of the runtime.
+ // =============================================================
+ void SCARuntime::releaseInstance()
+ {
+ LOGENTRY(1, "SCARuntime::releaseInstance");
+
+ if (instance)
+ {
+ delete instance;
+ instance = 0;
+ systemRoot = "";
+ defaultModuleName = "";
+ }
+
+ LOGEXIT(1, "SCARuntime::releaseInstance");
+ }
+
+ // ======================================
+ // Load up all the details of the runtime
+ // ======================================
+ void SCARuntime::load(const string& configurationRoot)
+ {
+ LOGENTRY(1, "SCARuntime::load");
+
+ LOGINFO_1(2,"configuration root: %s", configurationRoot.c_str());
+
+ ModelLoader loader(system);
+ // Load details of the module
+ loader.load(configurationRoot);
+
+ LOGEXIT(1, "SCARuntime::load");
+ }
+
+
+ // ===================================
+ // Return the top of the runtime model
+ // ===================================
+ System* SCARuntime::getSystem()
+ {
+ return system;
+ }
+
+
+ // ===================================================
+ // setCurrentComponent: push component for this thread
+ // ===================================================
+ void SCARuntime::setCurrentComponent(Component* component)
+ {
+
+#if defined(WIN32) || defined (_WINDOWS)
+ DWORD currentThreadId = GetCurrentThreadId();
+#else
+ pthread_t currentThreadId = pthread_self();
+#endif
+ COMPONENTS_MAP::iterator iter = components.find(currentThreadId);
+ if (iter == components.end())
+ {
+ components[currentThreadId] = COMPONENT_STACK();
+ iter = components.find(currentThreadId);
+ }
+
+ COMPONENT_STACK& compStack = iter->second;
+ compStack.push(component);
+ }
+
+
+ // ====================================================
+ // unsetCurrentComponent: pop component for this thread
+ // ====================================================
+ Component* SCARuntime::unsetCurrentComponent()
+ {
+#if defined(WIN32) || defined (_WINDOWS)
+ DWORD currentThreadId = GetCurrentThreadId();
+#else
+ pthread_t currentThreadId = pthread_self();
+#endif
+
+ COMPONENTS_MAP::iterator iter = components.find(currentThreadId);
+ if (iter != components.end())
+ {
+ COMPONENT_STACK& compStack = iter->second;
+ if (compStack.size() > 0)
+ {
+ Component* component = compStack.top();
+ compStack.pop();
+ return component;
+ }
+ }
+
+ return 0;
+ }
+
+ // =============================================================
+ // getCurrentComponent: return current component for this thread
+ // =============================================================
+ Component* SCARuntime::getCurrentComponent()
+ {
+#if defined(WIN32) || defined (_WINDOWS)
+ DWORD currentThreadId = GetCurrentThreadId();
+#else
+ pthread_t currentThreadId = pthread_self();
+#endif
+
+ COMPONENTS_MAP::iterator iter = components.find(currentThreadId);
+ if (iter == components.end())
+ {
+ components[currentThreadId] = COMPONENT_STACK();
+ iter = components.find(currentThreadId);
+ }
+
+ COMPONENT_STACK& compStack = iter->second;
+ if (compStack.size() > 0)
+ {
+ return compStack.top();
+ }
+ else
+ {
+ return 0;
+ }
+
+ }
+
+
+ // ===========================================
+ // getCurrentModule: return the current module
+ // ===========================================
+ Module* SCARuntime::getCurrentModule()
+ {
+ // ---------------------------------------------
+ // Get module from current component if possible
+ // ---------------------------------------------
+ Component* comp = getCurrentComponent();
+ if (comp != 0)
+ {
+ return comp->getModule();
+ }
+
+ // ----------------------
+ // Get the default Module
+ // ----------------------
+ string message;
+ if (!defaultModule)
+ {
+ // -------------------------------------------
+ // Get the default module from the environment
+ // -------------------------------------------
+ if (defaultModuleName == "")
+ {
+ const char* defMod = getenv(TUSCANY_SCACPP_DEFAULT_MODULE);
+ if (!defMod)
+ {
+ message = TUSCANY_SCACPP_DEFAULT_MODULE;
+ message += " environment variable not set";
+ throw SystemConfigurationException(message.c_str());
+ }
+ defaultModuleName = defMod;
+ }
+ string subsystemName, moduleName;
+ Utils::tokeniseUri(defaultModuleName, subsystemName, moduleName);
+
+ // ---------------------------
+ // Subsystem must be specified
+ // ---------------------------
+ Subsystem* subsystem = system->findSubsystem(subsystemName);
+ if (!subsystem)
+ {
+ message = "Default subsystem \'" + subsystemName + "\' not found";
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ // --------------------------------------------------------------------------
+ // If module is not specified then get the default module for this subsystem.
+ // This will be the ONLY module for this subsystem
+ // --------------------------------------------------------------------------
+ if (moduleName == "")
+ {
+ defaultModule = subsystem->getDefaultModule();
+ if (!defaultModule)
+ {
+ message = "Default module not found for subsystem \'" + subsystemName + "\'";
+ throw SystemConfigurationException(message.c_str());
+ }
+ }
+ else
+ {
+ // -----------------------------
+ // get the named ModuleComponent
+ // -----------------------------
+ defaultModule = subsystem->findModuleByComponentName(moduleName);
+ if (!defaultModule)
+ {
+ message = "Default module \'" + moduleName + "\' not found in subsystem \'" + subsystemName +"\'";
+ throw SystemConfigurationException(message.c_str());
+ }
+ }
+ }
+ return defaultModule;
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.h
new file mode 100644
index 0000000000..2b81b2cbcd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/SCARuntime.h
@@ -0,0 +1,195 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_scaruntime_h
+#define tuscany_sca_core_scaruntime_h
+
+#include "osoa/sca/export.h"
+
+#include "osoa/sca/ComponentContext.h"
+using osoa::sca::ComponentContext;
+
+#include "tuscany/sca/core/ServiceWrapper.h"
+#include "tuscany/sca/model/System.h"
+using namespace tuscany::sca::model;
+
+#if defined(WIN32) || defined (_WINDOWS)
+#include <windows.h>
+#else
+#include <pthread.h>
+#endif
+
+#include <stack>
+#include <string>
+#include <map>
+using namespace std;
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ /**
+ * A singleton which represents the executing SCA runtime.
+ */
+ class SCARuntime {
+ public:
+ /**
+ * Get the single instance.
+ * @return The single instance of the runtime.
+ */
+ SCA_API static SCARuntime* getInstance();
+
+ /**
+ * Release the single instance.
+ */
+ SCA_API static void releaseInstance();
+
+ /**
+ * Set the system root
+ * @param root The path to the deployed system.
+ */
+ static void setSystemRoot(const string& root);
+
+ /**
+ * Set the default ModuleComponent for the system
+ * @param moduleComponent The name of the default moduleComponent.
+ */
+ static void setDefaultModuleComponent(const string& moduleComponent);
+
+ /**
+ * Set the current component for the current thread.
+ * @param component The current component.
+ */
+ SCA_API void setCurrentComponent(Component* component);
+
+ /**
+ * Remove the current component from this thread, and return
+ * to the previous component (if there was one).
+ * @return The previous component.
+ */
+ SCA_API Component* unsetCurrentComponent();
+
+ /**
+ * Get a pointer to the configured SCA system which this
+ * SCA runtime represents.
+ * The rest of the SCA configuration can be navigated from
+ * the System.
+ * @return The configured SCA system.
+ */
+ System* getSystem();
+
+ /**
+ * The directory in which the Tuscany runtime has been installed.
+ */
+ const string& getInstallRoot() {return SCARoot;}
+
+ /**
+ * Return the current component for this thread.
+ * @return The current component for this thread.
+ */
+ Component* getCurrentComponent();
+
+ /**
+ * Get the current module. The current module will either
+ * be the module in which the current component for this thread
+ * is defined, or it will be the default module if there is no current
+ * component. There will not be a current component if a client of
+ * the SCA runtime is making a call into the SCA runtime.
+ */
+ Module* getCurrentModule();
+
+ private:
+ /**
+ * Default constructor is private to prevent more than one instance.
+ */
+ SCARuntime();
+
+ virtual ~SCARuntime();
+
+ /**
+ * Load the SCA configuration from the scdl files (sca.module,
+ * *.fragment, etc).
+ * This will create the runtime model from which the SCA runtime
+ * will operate.
+ * @param configurationRoot The path to the configuration of the
+ * SCA runtime. Under this root will be the subsystems and modules
+ * directories.
+ */
+ void load(const string& configurationRoot);
+
+ /**
+ * The single instance of this class.
+ */
+ static SCARuntime* instance;
+
+ /**
+ * Pointer to the top of the runtime model.
+ */
+ System* system;
+
+ /**
+ * The installed path of the Tuscany runtime.
+ */
+ string SCARoot;
+
+ /**
+ * The path to the system root
+ */
+ static string systemRoot;
+
+ /**
+ * The default ModuleComponent.
+ */
+ static string defaultModuleName;
+
+ /**
+ * Get the default module set for this runtime.
+ * @return The default module.
+ */
+ Module* getDefaultModule() {return defaultModule;}
+
+ /**
+ * The default module set for this runtime.
+ */
+ Module* defaultModule;
+
+
+ typedef stack<Component*> COMPONENT_STACK;
+#if defined(WIN32) || defined (_WINDOWS)
+ typedef map<DWORD, COMPONENT_STACK> COMPONENTS_MAP;
+#else
+ typedef map<pthread_t, COMPONENT_STACK> COMPONENTS_MAP;
+#endif
+
+ /**
+ * A map of threads to components.
+ */
+ COMPONENTS_MAP components;
+ };
+
+
+ } // End namespace sca
+} // End namespace tuscany
+
+
+
+
+#endif // tuscany_sca_core_scaruntime_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.cpp
new file mode 100644
index 0000000000..ef2f2744eb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.cpp
@@ -0,0 +1,121 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/ServiceProxy.h"
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/core/SCARuntime.h"
+#include "tuscany/sca/model/CPPImplementation.h"
+
+using namespace osoa::sca;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ // ============================
+ // Constructor: Create a proxy
+ // ============================
+ ServiceProxy::ServiceProxy(Component* component, const string& name, ServiceWrapper* target)
+ {
+ LOGENTRY(1,"ServiceProxy::constructor");
+ string msg;
+
+ // ----------------------
+ // Get the implementation
+ // ----------------------
+ Implementation* impl = component->getImplementation();
+ if (!impl)
+ {
+ msg = "Component " + component->getName() + " has no implementation defined";
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ // TODO: This only handle CPP implementation for now
+ if (impl->getImplementationType() == Implementation::CPP)
+ {
+ // ----------------------------------------------------
+ // Get implementation dll name and service factory name
+ // ----------------------------------------------------
+ string dllName = ((CPPImplementation*)impl)->getDll();
+ string headerStub = ((CPPImplementation*)impl)->getHeaderStub();
+
+ string fullDllName = component->getModule()->getRoot() + "/" + dllName;
+ string proxyFactoryName = headerStub + "_" + name + "_Proxy_Factory";
+ string proxyDestructorName = headerStub + "_" + name + "_Proxy_Destructor";
+ typedef void* (* PROXYFACTORY) (ServiceWrapper*);
+
+ // ------------
+ // Load the dll
+ // ------------
+ proxyLibrary = Library(fullDllName);
+
+ // -------------------------
+ // Locate the factory method
+ // -------------------------
+ PROXYFACTORY proxyFactory = (PROXYFACTORY)proxyLibrary.getSymbol(proxyFactoryName);
+ if (!proxyFactory)
+ {
+ LOGERROR_2(1, "ComponentContextImpl::getServiceProxy: Unable to locate %s in library %s",
+ proxyFactoryName.c_str(), fullDllName.c_str());
+ msg = "Unable to locate " + proxyFactoryName + " in library " + fullDllName;
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ // -----------------------------------
+ // Now create an instance of the proxy
+ // -----------------------------------
+ proxy = proxyFactory(target);
+ if (!proxy)
+ {
+ LOGERROR_2(1, "ComponentContextImpl::getServiceProxy: Factory method %s in library %s returned null",
+ proxyFactoryName.c_str(), fullDllName.c_str());
+ msg = "Factory method " + proxyFactoryName + " in library " + fullDllName + " returned null";
+ throw ServiceNotFoundException(msg.c_str());
+ }
+
+ // -------------------------
+ // Get the destructor method
+ // -------------------------
+ destructor = (PROXYDESTRUCTOR)proxyLibrary.getSymbol(proxyDestructorName);
+ }
+
+ LOGEXIT(1,"ServiceProxy::constructor");
+
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ServiceProxy::~ServiceProxy()
+ {
+ LOGENTRY(1,"ServiceProxy::destructor");
+
+ // Delete the proxy
+ if (destructor)
+ {
+ destructor(proxy);
+ }
+ LOGEXIT(1,"ServiceProxy::destructor");
+ }
+
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.h
new file mode 100644
index 0000000000..073b379cd7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceProxy.h
@@ -0,0 +1,89 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_serviceproxy_h
+#define tuscany_sca_core_serviceproxy_h
+
+#include "osoa/sca/export.h"
+
+#include "tuscany/sca/core/ServiceWrapper.h"
+#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/util/Library.h"
+
+using namespace tuscany::sca::model;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Holds a proxy for a given component and reference.
+ * The proxy which is held inside a ServiceProxy will be specific to the component
+ * and reference and will have been code generated and be contained in a dll
+ * created by a developer of an SCA application.
+ */
+ class ServiceProxy
+ {
+ public:
+ /**
+ * Create a new service proxy for a given component and reference name. The
+ * create proxy will contain a pointer to the target ServiceWrapper.
+ * @param component The component for which this proxy will be created (the
+ * source component).
+ * @param name The name of the reference on the component.
+ * @param target The wrapper of the component which is wired to this component and
+ * reference.
+ */
+ ServiceProxy(Component* component, const string& name, ServiceWrapper* target);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ServiceProxy();
+
+ /**
+ * Return an instance of the proxy created for this particular component and reference.
+ * @return The proxy.
+ */
+ void* getProxy() {return proxy;}
+
+
+ private:
+ /**
+ * Holds the instance of the code generated proxy.
+ */
+ void* proxy;
+
+ typedef void (* PROXYDESTRUCTOR) (void*);
+
+ /**
+ * A function pointer to the destructor of the proxy.
+ */
+ PROXYDESTRUCTOR destructor;
+
+ /**
+ * The library which contains the code for the proxy.
+ */
+ Library proxyLibrary;
+
+ };
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_core_serviceproxy_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.cpp
new file mode 100644
index 0000000000..5936f526f1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.cpp
@@ -0,0 +1,55 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/ServiceWrapper.h"
+#include <stdarg.h>
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/core/SCARuntime.h"
+
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ // ===========
+ // Constructor
+ // ===========
+ ServiceWrapper::ServiceWrapper(WireTarget* targ)
+ : target(targ)
+ {
+ LOGENTRY(1,"ServiceWrapper::constructor");
+
+ LOGEXIT(1,"ServiceWrapper::constructor");
+
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ServiceWrapper::~ServiceWrapper()
+ {
+ LOGENTRY(1,"ServiceWrapper::destructor");
+ LOGEXIT(1,"ServiceWrapper::destructor");
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.h
new file mode 100644
index 0000000000..21c162d77f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/ServiceWrapper.h
@@ -0,0 +1,73 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_servicewrapper_h
+#define tuscany_sca_core_servicewrapper_h
+
+#include "osoa/sca/export.h"
+
+#include "tuscany/sca/core/Operation.h"
+#include "tuscany/sca/model/WireTarget.h"
+using tuscany::sca::model::WireTarget;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * An abstract class that wraps a component implementation or an external
+ * service.
+ */
+ class SCA_API ServiceWrapper
+ {
+ public:
+ /**
+ * Constructor.
+ * @param target The service wrapper wraps the target of a wire.
+ */
+ ServiceWrapper(WireTarget* target);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ServiceWrapper();
+
+ /**
+ * Get the target represented by this wrapper.
+ * @return The target represented by this wrapper.
+ */
+ virtual WireTarget* getTarget() {return target;}
+
+ /**
+ * All business method calls on the target service are performed through
+ * this invoke method.
+ * @param operation The details of the method, paramaters and return value for the
+ * business method to be called on the target service.
+ */
+ virtual void invoke(Operation& operation) = 0;
+ private:
+ /**
+ * The target represented by this wrapper.
+ */
+ WireTarget* target;
+ };
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_core_servicewrapper_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.cpp
new file mode 100644
index 0000000000..810f810132
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.cpp
@@ -0,0 +1,100 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/core/TuscanyRuntime.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/core/SCARuntime.h"
+
+#include "tuscany/sca/model/System.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ // ==========================================================
+ // Set the default ModuleComponent name
+ // ==========================================================
+ void TuscanyRuntime::setSystemRoot(const string& root)
+ {
+ LOGENTRY(1, "TuscanyRuntime::setSystemRoot");
+ systemRoot = root;
+ LOGINFO_1(3, "TuscanyRuntime::setSystemRoot - set to %s", root.c_str());
+ LOGEXIT(1, "TuscanyRuntime::setSystemRoot");
+ }
+
+ // ==========================================================
+ // Set the default ModuleComponent name
+ // ==========================================================
+ void TuscanyRuntime::setDefaultModuleComponent(const string& moduleComponent)
+ {
+ LOGENTRY(1, "TuscanyRuntime::setDefaultModuleComponent");
+ defaultModuleComponent = moduleComponent;
+ LOGINFO_1(3, "TuscanyRuntime::setDefaultModuleComponent - set to %s", moduleComponent.c_str());
+ LOGEXIT(1, "TuscanyRuntime::setDefaultModuleComponent");
+ }
+
+ // ===================================================================
+ // Constructor for the TuscanyRuntime class.
+ // ===================================================================
+ TuscanyRuntime::TuscanyRuntime(const string& moduleComponent, const string& root)
+ {
+ LOGENTRY(1, "TuscanyRuntime::constructor");
+ setSystemRoot(root);
+ setDefaultModuleComponent(moduleComponent);
+ LOGEXIT(1, "TuscanyRuntime::constructor");
+ }
+
+ // ===================================================================
+ // Destructor for the TuscanyRuntime class.
+ // ===================================================================
+ TuscanyRuntime::~TuscanyRuntime()
+ {
+ LOGENTRY(1, "TuscanyRuntime::destructor");;
+ LOGEXIT(1, "TuscanyRuntime::destructor");
+ }
+
+ // ===================================================================
+ // Start the runtime.
+ // ===================================================================
+ void TuscanyRuntime::start()
+ {
+ LOGENTRY(1, "TuscanyRuntime::start");
+ SCARuntime::setSystemRoot(systemRoot);
+ SCARuntime::setDefaultModuleComponent(defaultModuleComponent);
+ SCARuntime::getInstance();
+ LOGEXIT(1, "TuscanyRuntime::start");
+ }
+
+ // ===================================================================
+ // Stop the runtime.
+ // ===================================================================
+ void TuscanyRuntime::stop()
+ {
+ LOGENTRY(1, "TuscanyRuntime::stop");
+ SCARuntime::releaseInstance();
+ LOGEXIT(1, "TuscanyRuntime::stop");
+ }
+
+
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.h
new file mode 100644
index 0000000000..92da737416
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/core/TuscanyRuntime.h
@@ -0,0 +1,85 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_core_tuscanyruntime_h
+#define tuscany_sca_core_tuscanyruntime_h
+
+#include "osoa/sca/export.h"
+#include <string>
+using std::string;
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ /**
+ * A singleton which represents the executing SCA runtime.
+ */
+ class SCA_API TuscanyRuntime
+ {
+ public:
+ /**
+ * Default constructor
+ */
+ TuscanyRuntime(const string& moduleComponent = "", const string& root = "");
+
+ /**
+ * Destructor
+ */
+ virtual ~TuscanyRuntime();
+
+
+ /**
+ * Set the system root
+ * @param root The path to the deployed system.
+ */
+ void setSystemRoot(const string& root);
+
+ /**
+ * Set the default ModuleComponent for the system
+ * @param moduleComponent The name of the default moduleComponent.
+ */
+ void setDefaultModuleComponent(const string& moduleComponent);
+
+ /**
+ * start the runtime
+ */
+ void start();
+
+ /**
+ * stop the runtime
+ */
+ void stop();
+
+
+ private:
+ string systemRoot;
+ string defaultModuleComponent;
+ };
+
+
+ } // End namespace sca
+} // End namespace tuscany
+
+
+
+
+#endif // tuscany_sca_core_tuscanyruntime_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.cpp
new file mode 100644
index 0000000000..c312d7a077
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.cpp
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/Binding.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ Binding::Binding(const string& uri) : uri(uri)
+ {
+ }
+
+ Binding::~Binding()
+ {
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.h
new file mode 100644
index 0000000000..ff97990dc6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Binding.h
@@ -0,0 +1,85 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_binding_h
+#define tuscany_sca_model_binding_h
+#include <string>
+using std::string;
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Information about the binding for EntryPoint and ExternalService. An
+ * abstract class which will be extended by classes that hold specific
+ * information for each type of binding.
+ */
+ class Binding
+ {
+
+ public:
+ /**
+ * Supported binding types.
+ */
+ enum Type
+ {
+ WS,
+ SCA
+ };
+
+ /**
+ * Constructor to create a new binding.
+ * @param uri The uri specified in the scdl file.
+ */
+ Binding(const string& uri);
+
+ /**
+ * Destructor.
+ */
+ virtual ~Binding();
+
+ /**
+ * Return the enumerated type of binding.
+ * @return The type of the binding (see Binding#Type).
+ */
+ virtual Type getBindingType() = 0;
+
+ /**
+ * Return the uri of the binding.
+ * @return The uri of the binding.
+ */
+ string getUri() {return uri;};
+
+ private:
+ /**
+ * The uri of the binding.
+ */
+ string uri;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_binding_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.cpp
new file mode 100644
index 0000000000..7212e777b1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.cpp
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/CPPImplementation.h"
+#include "tuscany/sca/util/Utils.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ CPPImplementation::CPPImplementation(const string& dllName, const string& head, const string& classN)
+ : dll(dllName), header(head), className(classN)
+ {
+ // Separate any path element
+ Utils::rTokeniseString("/", head, headerPath, headerStub);
+ if (headerPath != "")
+ {
+ headerPath += "/";
+ }
+
+ // Determine the header stub name
+ string tmp;
+ Utils::rTokeniseString(".h", headerStub, headerStub, tmp);
+ }
+
+ CPPImplementation::~CPPImplementation()
+ {
+ }
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.h
new file mode 100644
index 0000000000..0294649af7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPImplementation.h
@@ -0,0 +1,125 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_cppimplementation_h
+#define tuscany_sca_model_cppimplementation_h
+#include "tuscany/sca/model/Implementation.h"
+
+#include <map>
+using std::map;
+#include <string>
+using std::string;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Holds informatio about an SCA implementation written in C++
+ */
+ class CPPImplementation : public Implementation
+ {
+
+ public:
+ /**
+ * Constructor.
+ * @param dllName Name of the shared library.
+ * @param header Name of the header file that contains the class declaring the
+ * implementation class.
+ * @param className Name of the class in the header file (could be a blank string
+ * if this is not specified).
+ */
+ CPPImplementation(const string& dllName, const string& header, const string& className);
+
+ /**
+ * Destructor
+ */
+ virtual ~CPPImplementation();
+
+ /**
+ * Return the implementation type.
+ * @return Always returns CPP.
+ */
+ virtual Type getImplementationType() {return CPP;}
+
+ /**
+ * Returns the name of the shared library.
+ * @return The name of the shared library.
+ */
+ const string& getDll() {return dll;}
+
+ /**
+ * Get the name of the header file.
+ * @return Name of the header file.
+ */
+ const string& getHeader() {return header;}
+
+ /**
+ * Get the header file name without the extension.
+ * @return The name of the header file without any extension.
+ */
+ const string& getHeaderStub() {return headerStub;}
+
+ /**
+ * Get the header path.
+ * @return The pathe element of the header.
+ */
+ const string& getHeaderPath() {return headerPath;}
+
+ /**
+ * Get the name of the class.
+ * @return The class name if specified.
+ */
+ const string& getClass() {return className;}
+ private:
+ /**
+ * Name of the shared library.
+ */
+ string dll;
+
+ /**
+ * Name of the header file describing the interface.
+ */
+ string header;
+
+ /**
+ * Name of the header file without the extension.
+ */
+ string headerStub;
+
+ /**
+ * Path element of the header.
+ */
+ string headerPath;
+
+ /**
+ * Name of the class in the header file declaring the implementation.
+ * May be an empty string if not set in the SCDL file.
+ */
+ string className;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_cppimplementation_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.cpp
new file mode 100644
index 0000000000..015b54c259
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.cpp
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/CPPInterface.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ CPPInterface::CPPInterface(
+ const string& head,
+ const string& classN,
+ const string& scop,
+ bool remote)
+ : header(head), className(classN), remotable(remote)
+ {
+ string::size_type dot = header.rfind(".h"); // this will also find .hpp
+ if (dot != string::npos)
+ {
+ headerStub = header.substr(0, dot);
+ }
+ else
+ {
+ headerStub = header;
+ }
+
+ if (scop == "module")
+ {
+ scope = MODULE;
+ }
+ else
+ {
+ scope = STATELESS;
+ }
+ }
+
+ CPPInterface::~CPPInterface()
+ {
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.h
new file mode 100644
index 0000000000..7b37b1892e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/CPPInterface.h
@@ -0,0 +1,143 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_cppinterface_h
+#define tuscany_sca_model_cppinterface_h
+
+#include "tuscany/sca/model/Interface.h"
+
+
+#include <map>
+using std::map;
+#include <string>
+using std::string;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Holds information about an interface described using a C++
+ * header file.
+ */
+ class CPPInterface : public Interface
+ {
+
+ public:
+ /**
+ * Constuctor.
+ * @param header Name of the header file containing the class that
+ * describes the interface.
+ * @param className Name of the class in the header file that
+ * describes the interface.
+ * @param scope The scope of the interface (stateless or module).
+ * @param remotable True if the interface is remotable.
+ */
+ CPPInterface(
+ const string& header,
+ const string& className,
+ const string& scope,
+ bool remotable);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CPPInterface();
+
+ /**
+ * Return the type of the interface.
+ * @return Always returns CPP.
+ */
+ virtual Type getInterfaceType() {return CPP;}
+
+ /**
+ * Get the name of the header file.
+ * @return The name of the header file containing the definition of the
+ * interface.
+ */
+ const string& getHeader() {return header;}
+
+ /**
+ * Return the name of the header file without the extension.
+ * @return Header file name without any extension.
+ */
+ const string& getHeaderStub() {return headerStub;}
+
+ /**
+ * Get the name of the class.
+ * @return The name of the class defining the interface.
+ */
+ const string& getClass() {return className;}
+
+ /**
+ * Scope of interface.
+ */
+ enum SCOPE
+ {
+ MODULE,
+ STATELESS
+ };
+
+ /**
+ * Get the scope of the interface.
+ * @return The scope of the interface.
+ */
+ SCOPE getScope() {return scope;}
+
+ /**
+ * Return whether the interface is remotable or local.
+ * @return True if the interface is remotable, otherwise false.
+ */
+ bool getRemotable() {return remotable;}
+
+ private:
+ /**
+ * Name of the header file containing the definition of the interface.
+ */
+ string header;
+
+ /**
+ * Name of the header file without the extension.
+ */
+ string headerStub;
+
+ /**
+ * Name of the class in the header file.
+ */
+ string className;
+
+ /**
+ * Scope of the interface.
+ */
+ SCOPE scope;
+
+ /**
+ * Remotable interface or not.
+ */
+ bool remotable;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_cppinterface_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.cpp
new file mode 100644
index 0000000000..4e0cf81c61
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.cpp
@@ -0,0 +1,305 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+// Component.cpp : Represent a loaded Component
+//
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/model/Component.h"
+
+using namespace commonj::sdo;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ // Constructor
+ Component::Component(const std::string& componentName, Module* module)
+ : name(componentName), containingModule(module), implementation(0)
+ {
+ LOGENTRY(1, "Component::constructor");
+ LOGINFO_1(3, "Component::constructor: Component name: %s", name.c_str());
+ LOGEXIT(1, "Component::constructor");
+ }
+
+ Component::~Component()
+ {
+ }
+
+ Service* Component::addService(const std::string& serviceName)
+ {
+ Service* service = new Service(serviceName, this);
+ services[serviceName] = service;
+ return service;
+ }
+
+ Service* Component::findService(const std::string& serviceName)
+ {
+ // If serviceName is null then return the ONLY service
+ if (serviceName == ""
+ && services.size() == 1)
+ {
+ return services.begin()->second;
+ }
+ else
+ {
+ return services[serviceName];
+ }
+ }
+
+ ServiceReference* Component::findReference(const std::string& referenceName)
+ {
+ return references[referenceName];
+ }
+
+ ServiceReference* Component::addReference(const std::string& referenceName)
+ {
+ ServiceReference* serviceReference = references[referenceName];
+ if (!serviceReference)
+ {
+ references[referenceName] = new ServiceReference(referenceName);
+ }
+ return references[referenceName];
+ }
+
+ void Component::setImplementation(Implementation* impl)
+ {
+ implementation = impl;
+ }
+
+ void Component::addProperty(const string& name,
+ const string& type,
+ bool many,
+ bool required,
+ const char* defaultValue)
+ {
+ // Create a Type in the Properties dataFactory
+ DataFactoryPtr factory = getPropertyDataFactory();
+
+ string typeUri, typeName;
+ Utils::tokeniseQName(type, typeUri, typeName);
+
+ if (typeUri == "http://www.w3.org/2001/XMLSchema")
+ {
+ typeUri = Type::SDOTypeNamespaceURI;
+ if (typeName == "string")
+ {
+ typeName = "String";
+ }
+ else if (typeName == "anyType")
+ {
+ typeName = "DataObject";
+ }
+ else if (typeName == "int")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "integer")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "negativeInteger")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "nonNegativeInteger")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "positiveInteger")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "nonPositiveInteger")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "unsignedLong")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "unsignedShort")
+ {
+ typeName = "Integer";
+ }
+ else if (typeName == "unsignedInt")
+ {
+ typeName = "Long";
+ }
+ else if (typeName == "long")
+ {
+ typeName = "Long";
+ }
+ else if (typeName == "double")
+ {
+ typeName = "Double";
+ }
+ else if (typeName == "short")
+ {
+ typeName = "Short";
+ }
+ else if (typeName == "unsignedByte")
+ {
+ typeName = "Short";
+ }
+ else if (typeName == "float")
+ {
+ typeName = "Float";
+ }
+ else if (typeName == "boolean")
+ {
+ typeName = "Boolean";
+ }
+ else if (typeName == "byte")
+ {
+ typeName = "Byte";
+ }
+ else if (typeName == "base64Binary")
+ {
+ typeName = "Bytes";
+ }
+ else if (typeName == "hexBinary")
+ {
+ typeName = "Bytes";
+ }
+ else if (typeName == "anyURI")
+ {
+ typeName = "URI";
+ }
+ else if (typeName == "QName")
+ {
+ typeName = "URI";
+ }
+ else
+ {
+ // Default unknown xs: types to string??
+ typeName = "String";
+ }
+ }
+ else
+ {
+ // It's not an XML type
+ }
+
+
+ factory->addPropertyToType(
+ "org/osoa/sca",
+ "Properties",
+ name.c_str(),
+ typeUri.c_str(),
+ typeName.c_str(),
+ many,
+ false,
+ true);
+
+ // Set the default
+
+
+ // Add to list of required properties
+ if (required)
+ {
+ }
+ }
+
+ DataFactoryPtr Component::getPropertyDataFactory()
+ {
+ if (!propertyFactory)
+ {
+ propertyFactory = DataFactory::getDataFactory();
+ // Add the root type
+ propertyFactory->addType("org/osoa/sca", "Properties", false, false, false, false);
+ }
+ return propertyFactory;
+ }
+
+ DataObjectPtr Component::getProperties()
+ {
+ if (!properties)
+ {
+ properties = getPropertyDataFactory()->create("org/osoa/sca", "Properties");
+ }
+ return properties;
+ }
+
+ void Component::addProperties(DataObjectPtr values)
+ {
+ if (!values)
+ {
+ return;
+ }
+
+ DataObjectPtr props = getProperties();
+
+ PropertyList pl = values->getInstanceProperties();
+ for (int i=0; i < pl.size(); i++)
+ {
+ if (!values->isSet(i))
+ {
+ continue;
+ }
+
+ // Add the property value to the component to be resolved later
+ string propName = pl[i].getName();
+
+ // Get the property's type
+ try
+ {
+ const Property& propProperty = props->getProperty(pl[i].getName());
+ const Type& propType = propProperty.getType();
+
+ DataObjectList& proplist = values->getList(pl[i]);
+ for (int proplistI=0; proplistI<proplist.size(); proplistI++)
+ {
+ // Get the property value
+ string propValue = proplist.getDataObject(proplistI)->getSequence()->getCStringValue(0);
+ if (propType.isDataType())
+ {
+ if (propProperty.isMany())
+ {
+ DataObjectList& dol = props->getList(propProperty);
+ dol.append(propValue.c_str());
+ }
+ else
+ {
+ props->setCString(propProperty, propValue.c_str());
+ }
+ }
+ else
+ {
+ // Create a new instance of the DO
+ // iterate over properties setting each one
+ }
+ }
+ }
+ catch (SDOPropertyNotFoundException&)
+ {
+ // Configuration error: property is not defined
+ string message = "Undefined property: " + propName;
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ }
+ }
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.h
new file mode 100644
index 0000000000..f40690c859
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Component.h
@@ -0,0 +1,202 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_component_h
+#define tuscany_sca_model_component_h
+
+#include <string>
+using std::string;
+
+#include <map>
+
+#include "tuscany/sca/model/Service.h"
+#include "tuscany/sca/model/Implementation.h"
+#include "tuscany/sca/model/ServiceReference.h"
+
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+using commonj::sdo::DataFactoryPtr;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+ class Module;
+
+ /**
+ * Information about an SCA component.
+ */
+ class Component
+ {
+ public:
+ /**
+ * Constructor
+ * @param name The name of the component.
+ * @param module The module containing this component.
+ */
+ Component(const std::string& name, Module* module);
+
+ /**
+ * Destructor.
+ */
+ virtual ~Component();
+
+ /**
+ * Returns the name of the component.
+ * @return The name of the component.
+ */
+ const string& getName() {return name;}
+
+ /**
+ * Get the module containing this component.
+ * @return The containing module.
+ */
+ Module* getModule() {return containingModule;}
+
+ /**
+ * Add a new service to this component.
+ * @param serviceName The name of the service to add.
+ * @return The newly added service.
+ */
+ Service* addService(const std::string& serviceName);
+
+ /**
+ * Find an existing service on this component.
+ * @param serviceName The name of the service to find.
+ * If the serviceName is the zero length string then if there is
+ * only one service it will be returned.
+ * @return The found service, or 0 if not found.
+ */
+ Service* findService(const std::string& serviceName);
+
+ /**
+ * Add a new reference to this component.
+ * @param referenceName The name of the reference to add.
+ * @return The newly added reference.
+ */
+ ServiceReference* addReference(const std::string& referenceName);
+
+ /**
+ * Find an existing reference on this component.
+ * @param referenceName The name of the reference to find.
+ * @return The found reference, or 0 if not found.
+ */
+ ServiceReference* findReference(const std::string& referenceName);
+
+ /**
+ * Set the details of the implementation of this component.
+ * @param impl The details of the implementation.
+ */
+ void setImplementation(Implementation* impl);
+
+ /**
+ * Returns the details of the implementation of this component.
+ * @return The details of the implementation.
+ */
+ Implementation* getImplementation() {return implementation;}
+
+ /**
+ * Add a new property to this component. Properties are
+ * added one at a time. The property definitions come from the component
+ * type file.
+ * @param name The name of the property.
+ * @param type The full name of the type (including uri and local name).
+ * @param many True if this is a many valued property.
+ * @param required True if this property must have a value set.
+ * @param defaultValue The default value if the property does not have a
+ * value set.
+ */
+ void addProperty(const string& name,
+ const string& type,
+ bool many,
+ bool required,
+ const char* defaultValue = 0);
+
+ /**
+ * Add the property values to the properties defined on this
+ * component. The values will come from the sca.module file.
+ * @param properties A data object representing all the values set
+ * for this component.
+ */
+ void addProperties(DataObjectPtr properties);
+
+ /**
+ * Returns a data object from which all the properties and their
+ * values can be accessed.
+ * @return A data object holding the property values.
+ */
+ DataObjectPtr getProperties();
+ private:
+ /**
+ * Name of the component.
+ */
+ string name;
+
+ /**
+ * Module containing this component for navigating up the tree.
+ */
+ Module* containingModule;
+
+ /**
+ * Information about the implementation of this component.
+ */
+ Implementation* implementation;
+
+ typedef std::map<std::string, Service*> SERVICE_MAP;
+ /**
+ * Map of all the services defined on this component.
+ */
+ SERVICE_MAP services;
+
+ typedef std::map<std::string, ServiceReference*> REFERENCE_MAP;
+ /**
+ * Map of all the references defined on this component.
+ */
+ REFERENCE_MAP references;
+
+ /**
+ * SDO data factory which has all the property types defined from
+ * the component type file
+ */
+ DataFactoryPtr propertyFactory;
+
+ /**
+ * Return the SDO data factory which has the property types defined
+ * in it.
+ * @return The data factory.
+ */
+ DataFactoryPtr getPropertyDataFactory();
+
+ /**
+ * The properties and their values for this component.
+ */
+ DataObjectPtr properties;
+
+ };
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_component_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.cpp
new file mode 100644
index 0000000000..1c38e31469
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.cpp
@@ -0,0 +1,101 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/EntryPoint.h"
+#include "tuscany/sca/util/Exceptions.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ EntryPoint::EntryPoint(const std::string& epName)
+ : name(epName)
+ {
+ LOGENTRY(1, "EntryPoint::constructor");
+ LOGINFO_1(2, "EntryPoint::constructor: EntryPoint name: %s", name.c_str());
+ LOGEXIT(1, "EntryPoint::constructor");
+ }
+
+ EntryPoint::~EntryPoint()
+ {
+ }
+
+ void EntryPoint::addTarget(WireTarget* targ)
+ {
+ if (multiplicity == ONE_ONE || multiplicity == ZERO_ONE)
+ {
+ if (targets.size() > 0)
+ {
+ // throw exception
+ string message = "Duplicate wire for reference: " + name;
+ throw SystemConfigurationException(message.c_str());
+ }
+ }
+
+ // TODO - must be remotable
+
+ targets.push_back(targ);
+ }
+
+ void EntryPoint::setMultiplicity(const std::string& multip)
+ {
+ if (multip == "0..1")
+ {
+ multiplicity = ZERO_ONE;
+ }
+ else if (multip == "1..1")
+ {
+ multiplicity = ONE_ONE;
+ }
+ else if (multip == "0..n")
+ {
+ multiplicity = ZERO_MANY;
+ }
+ else if (multip == "1..n")
+ {
+ multiplicity = ONE_MANY;
+ }
+ else
+ {
+ string msg = "Invalid multiplicity specified, " + multip + ", for reference: " +name;
+ throw SystemConfigurationException(msg.c_str());
+ }
+ }
+
+ void EntryPoint::setInterface(Interface* interf)
+ {
+ iface = interf;
+ }
+
+ void EntryPoint::setBinding(Binding* bind)
+ {
+ binding = bind;
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.h
new file mode 100644
index 0000000000..9b80a1049f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/EntryPoint.h
@@ -0,0 +1,158 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_entrypoint_h
+#define tuscany_sca_model_entrypoint_h
+
+#include <string>
+using std::string;
+#include <vector>
+using std::vector;
+
+#include "tuscany/sca/model/Interface.h"
+#include "tuscany/sca/model/Binding.h"
+#include "tuscany/sca/model/WireTarget.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Represents the information about an entry point.
+ */
+ class EntryPoint
+ {
+
+ public:
+ /**
+ * Constructor.
+ * @param name The name of the entry point.
+ */
+ EntryPoint(const std::string& name);
+
+ /**
+ * Destructor.
+ */
+ virtual ~EntryPoint();
+
+ /**
+ * Return the name of the entry point.
+ * @return The name of the entry point.
+ */
+ const string& getName() {return name;}
+
+ /**
+ * How many wires can be wired from this entry point.
+ */
+ enum Multiplicity
+ {
+ ZERO_ONE,
+ ONE_ONE,
+ ZERO_MANY,
+ ONE_MANY
+ };
+
+ /**
+ * Set the multiplicity of this entry point.
+ * @param multiplicity One of 0..1, 1..1, 0..n, 1..n
+ */
+ void setMultiplicity(const std::string& multiplicity);
+
+ /**
+ * Return the multiplicity of this entry point (how
+ * many wires can be wired from this entry point).
+ * @return The multiplicity.
+ */
+ Multiplicity getMultiplicity() {return multiplicity;}
+
+ /**
+ * Set the interface describing this entry point.
+ * @param iface The interface.
+ */
+ void setInterface(Interface* iface);
+
+ /**
+ * Get the interface describing this entry point. Use
+ * Interface#getType to find out the type of interface
+ * describing this entry point.
+ * @return iface The interface.
+ */
+ Interface* getInterface() {return iface;}
+
+ /**
+ * Set the binding connecting this entry point.
+ * @param binding The Binding.
+ */
+ void setBinding(Binding* binding);
+
+ /**
+ * Get the binding connecting this entry point. Use
+ * Binding#getType to find out the type of binding
+ * connecting this entry point.
+ * @return binding The binding.
+ */
+ Binding* getBinding() {return binding;}
+
+ /**
+ * Add a target to the entry point.
+ * @param target Add a target (derived from a wire) to
+ * the entry point.
+ */
+ void addTarget(WireTarget* target);
+ typedef vector<WireTarget*> TARGETS;
+
+ /**
+ * Get a vector of targets added to this entry point.
+ */
+ const TARGETS& getTargets() {return targets;}
+ private:
+ /**
+ * Name of the entry point.
+ */
+ string name;
+
+ /**
+ * The interface describing this entry point.
+ */
+ Interface* iface;
+
+ /**
+ * The binding connecting this entry point.
+ */
+ Binding* binding;
+
+ /**
+ * The multiplicity of this entry point..
+ */
+ Multiplicity multiplicity;
+
+ /**
+ * The vector of targets added to this entry point.
+ */
+ TARGETS targets;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_entrypoint_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.cpp
new file mode 100644
index 0000000000..c848c3aafb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.cpp
@@ -0,0 +1,55 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/ExternalService.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ ExternalService::ExternalService(const std::string& serviceName, Module *module)
+ : WireTarget(serviceName), containingModule(module)
+ {
+ LOGENTRY(1, "ExternalService::constructor");
+ LOGINFO_1(2, "ExternalService::constructor: ExternalService name: %s", getName().c_str());
+ LOGEXIT(1, "ExternalService::constructor");
+ }
+
+ ExternalService::~ExternalService()
+ {
+ delete binding;
+ }
+
+ void ExternalService::setBinding(Binding* bind)
+ {
+ binding = bind;
+ }
+
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.h
new file mode 100644
index 0000000000..fe9640d1b8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ExternalService.h
@@ -0,0 +1,97 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_externalservice_h
+#define tuscany_sca_model_externalservice_h
+
+#include <string>
+
+#include "tuscany/sca/model/WireTarget.h"
+#include "tuscany/sca/model/Binding.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+ class Module;
+
+ /**
+ * Information about an external service.
+ */
+ class ExternalService : public WireTarget
+ {
+ public:
+ /**
+ * Constructor.
+ * @param name The name of the external service.
+ * @param module The module containing this external service.
+ */
+ ExternalService(const std::string& name, Module *module);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ExternalService();
+
+ /**
+ * Return the type of service.
+ * @return Always returns ExternalServiceType
+ */
+ virtual Type getServiceType() {return ExternalServiceType;}
+
+ /**
+ * Set the binding for this external service.
+ * @param binding The binding to set.
+ */
+ virtual void setBinding(Binding* binding);
+
+ /**
+ * Get the binding set for this external service.
+ * @return The binding.
+ */
+ virtual Binding* getBinding() {return binding;};
+
+ /**
+ * Get the module containing this external service.
+ * @return The containing module.
+ */
+ Module* getContainingModule() {return containingModule;};
+
+ private:
+ /**
+ * The binding for this external service.
+ */
+ Binding* binding;
+
+ /**
+ * The module containing this external service.
+ */
+ Module* containingModule;
+
+
+ };
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_externalservice_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.cpp
new file mode 100644
index 0000000000..9703d1bab3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.cpp
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/Implementation.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ Implementation::Implementation()
+ {
+ }
+
+ Implementation::~Implementation()
+ {
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.h
new file mode 100644
index 0000000000..17414c359b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Implementation.h
@@ -0,0 +1,66 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_implementation_h
+#define tuscany_sca_model_implementation_h
+
+#include <string>
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Abstract class representing information about an implementation
+ * of a component. The subtypes will hold information specific to
+ * the type of implementation.
+ */
+ class Implementation
+ {
+
+ public:
+ /**
+ * Supported types of implementation.
+ */
+ enum Type
+ {
+ CPP,
+ JAVA
+ };
+
+ Implementation();
+ virtual ~Implementation();
+
+ /**
+ * Return the type of the implementation.
+ * @return Will depend on the subtype.
+ */
+ virtual Type getImplementationType() = 0;
+
+ private:
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_implementation_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.cpp
new file mode 100644
index 0000000000..9e0aa45889
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.cpp
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/Interface.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ Interface::Interface()
+ {
+ }
+
+ Interface::~Interface()
+ {
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.h
new file mode 100644
index 0000000000..24bb43224b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Interface.h
@@ -0,0 +1,65 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_interface_h
+#define tuscany_sca_model_interface_h
+
+#include <string>
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Information about an interface. Subtypes will hold information
+ * specific to a type of interface.
+ */
+ class Interface
+ {
+
+ public:
+ /**
+ * The supported types of interface.
+ */
+ enum Type
+ {
+ CPP,
+ JAVA
+ };
+
+ Interface();
+ virtual ~Interface();
+
+ /**
+ * Returns the type of the interface.
+ * @return Will depend on the subtype.
+ */
+ virtual Type getInterfaceType() = 0;
+
+ private:
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_interface_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.cpp
new file mode 100644
index 0000000000..32a3ad8d26
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.cpp
@@ -0,0 +1,1702 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "osoa/sca/export.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/ModelLoader.h"
+#include "tuscany/sca/model/CPPImplementation.h"
+#include "tuscany/sca/model/CPPInterface.h"
+#include "tuscany/sca/core/SCARuntime.h"
+#include "tuscany/sca/model/WSBinding.h"
+#include "commonj/sdo/TypeDefinitions.h"
+
+
+using namespace commonj::sdo;
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+ // ===========
+ // Constructor
+ // ===========
+ ModelLoader::ModelLoader(System* system) : system(system)
+ {
+ LOGENTRY(1, "ModelLoader::constructor");
+
+
+ LOGEXIT(1, "ModelLoader::constructor");
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ ModelLoader::~ModelLoader()
+ {
+ }
+
+ // =========================================================
+ // load: Load the runtime model from the deployed xml files
+ // This class has the responsibility for translating from
+ // the SCA scdl files to the SCA runtime's in memory model.
+ // =========================================================
+ void ModelLoader::load(const string& configurationRoot)
+ {
+ LOGENTRY(1, "ModelLoader::load");
+ LOGINFO_1(2,"configuration root: %s", configurationRoot.c_str());
+
+ // The configuration root path will point to a directory structure:
+ // root/
+ // The sca.subsystem files can be located anywhere under this directory
+ // structure.
+ loadSubsystems(configurationRoot);
+
+ // sca.module files represent the root of a module, and can occur anywhere
+ // under the directory structure
+ loadModules(configurationRoot);
+
+ system->resolveWires();
+ LOGEXIT(1, "ModelLoader::load");
+ }
+
+ // ========================================================================
+ // loadSubsystems:
+ // Load all the subsystems from any directory below the configuration root.
+ // Translate the subsystem information to the runtime information
+ // ========================================================================
+ void ModelLoader::loadSubsystems(const string& configurationRoot)
+ {
+ // Get all the sca.subsystem files in the module
+ LOGENTRY(1, "ModelLoader::loadSubsystems");
+ Files files(configurationRoot, "sca.subsystem", true);
+ for (unsigned int i=0; i < files.size(); i++)
+ {
+ loadSubsystemFile(files[i]);
+ }
+ LOGEXIT(1, "ModelLoader::loadSubsystems");
+ }
+
+
+ // =====================================================================
+ // loadSubsystemFile:
+ // This method is called for each sca.subsystem file found in the module
+ // folder structure
+ // =====================================================================
+ void ModelLoader::loadSubsystemFile(const File& file)
+ {
+ LOGENTRY(1, "ModelLoader::loadSubsystemFile");
+ LOGINFO_1(2, "subsystem filename: %s", file.getFileName().c_str());
+
+ try
+ {
+ string filename = file.getDirectory() + "/" + file.getFileName();
+ XMLDocumentPtr subsystemFile = getXMLHelper()->loadFile(filename.c_str());
+ if (subsystemFile->getRootDataObject() == 0)
+ {
+ LOGERROR_1(0, "ModelLoader::loadSubsystemFile: Unable to load file: %s", filename.c_str());
+ }
+ else
+ {
+ //Utils::printDO(subsystemFile->getRootDataObject());
+ mapSubsystem(subsystemFile->getRootDataObject());
+ }
+ } catch (SDORuntimeException ex)
+ {
+ LOGERROR_1(0, "ModelLoader::loadSubsytemFile: Exception caught: %s", ex.getMessageText());
+ }
+
+ LOGEXIT(1, "ModelLoader::loadSubsystemFile");
+ }
+
+ // ===============
+ // mapSubsystem:
+ // ===============
+ void ModelLoader::mapSubsystem(DataObjectPtr root)
+ {
+ LOGENTRY(1, "ModelLoader::mapSubsystem");
+
+ LOGINFO_1(2, "ModelLoader::mapSubsystem: Loaded subsystem: %s", root->getCString("name"));
+
+ Subsystem* subsystem;
+ subsystem = system->addSubsystem(root->getCString("name"));
+
+ DataObjectList& Modules = root->getList("moduleComponent");
+ LOGINFO_1(2, "ModelLoader::mapSubsystem: number of module components: %d", Modules.size());
+
+ // Iterate over module components
+ for (int i=0; i<Modules.size(); i++)
+ {
+ // Add each module component to the subsystem
+ Module* Module;
+ Module = subsystem->addModuleComponent(Modules[i]->getCString("name"), Modules[i]->getCString("module"));
+ }
+
+
+ /// @todo Add external services and entry points
+
+
+ LOGEXIT(1, "ModelLoader::mapSubsystem");
+ }
+
+
+ // =====================================================================
+ // loadModules:
+ // Load all the modules from any directory below the configuration root.
+ // Translate the module information to the runtime information
+ // =====================================================================
+ void ModelLoader::loadModules(const string& configurationRoot)
+ {
+ // Get all the sca.module files in the module
+ LOGENTRY(1, "ModelLoader::loadModules");
+ Files files(configurationRoot, "sca.module", true);
+ for (unsigned int i=0; i < files.size(); i++)
+ {
+ loadModuleFile(files[i]);
+ }
+ LOGEXIT(1, "ModelLoader::loadModules");
+ }
+
+
+ // ====================================================================
+ // loadModuleFile:
+ // This method is called for each sca.module file found in the module
+ // folder structure
+ // The location of this module file will indicate the root of a module
+ // ====================================================================
+ void ModelLoader::loadModuleFile(const File& file)
+ {
+ LOGENTRY(1, "ModelLoader::loadModuleFile");
+ LOGINFO_1(2, "module filename: %s", file.getFileName().c_str());
+
+ try
+ {
+ string filename = file.getDirectory() + "/" + file.getFileName();
+
+ XMLDocumentPtr moduleFile = getXMLHelper()->loadFile(filename.c_str());
+ if (moduleFile->getRootDataObject() == 0)
+ {
+ LOGERROR_1(0, "ModelLoader::loadModuleFile: Unable to load file: %s", filename.c_str());
+ }
+ else
+ {
+ string moduleName = moduleFile->getRootDataObject()->getCString("name");
+ mapModule(moduleName, moduleFile->getRootDataObject(), file.getDirectory());
+
+ // --------------------------------------------------------------
+ // Load any module Fragments in the same folder as the sca.module
+ // --------------------------------------------------------------
+ Files files(file.getDirectory(), "*.fragment", false);
+ for (unsigned int i=0; i < files.size(); i++)
+ {
+ filename = file.getDirectory() + "/" + files[i].getFileName();
+ moduleFile = getXMLHelper()->loadFile(filename.c_str());
+ if (moduleFile->getRootDataObject() == 0)
+ {
+ LOGERROR_1(0, "ModelLoader::loadModuleFile: Unable to load file: %s", filename.c_str());
+ }
+ else
+ {
+ mapModule(moduleName, moduleFile->getRootDataObject(), file.getDirectory());
+ }
+ }
+
+ // Load the xsd types and wsdl files in the module
+ loadModuleConfig(file.getDirectory(), moduleName);
+ }
+
+ } catch (SDORuntimeException ex)
+ {
+ LOGERROR_1(0, "ModelLoader::loadModuleFile: Exception caught: %s", ex.getMessageText());
+ }
+
+ LOGEXIT(1, "ModelLoader::loadModuleFile");
+ }
+
+ // ===========
+ // mapModule
+ // ===========
+ void ModelLoader::mapModule(const string& moduleName, DataObjectPtr root, string moduleRootDir)
+ {
+ LOGENTRY(1, "ModelLoader::mapModule");
+
+ LOGINFO_2(2, "ModelLoader::mapModule: Loading module: %s, root Dir: %s", moduleName.c_str(), moduleRootDir.c_str());
+
+ // Find the ModuleComponent(s) that refer to this module. If a ModuleComponent does not refer to this
+ // module then ignore it
+ MODULE_LIST moduleList = system->findModules(moduleName);
+ MODULE_LIST::iterator moduleIter;
+
+ for (moduleIter = moduleList.begin();
+ moduleIter != moduleList.end();
+ moduleIter++ )
+ {
+ LOGINFO_1(2, "ModelLoader::mapModule: Loading module details for module component: %s", (*moduleIter)->getName().c_str());
+
+ string message; // for exceptions
+ // Set module root
+ (*moduleIter)->setRoot(moduleRootDir);
+
+ // ----------------------------
+ // Add components to the module
+ // ----------------------------
+ DataObjectList& componentList = root->getList("component");
+ int i;
+ for (i=0; i < componentList.size(); i++)
+ {
+ addComponent(*moduleIter, componentList[i]);
+ }
+
+ // ------------
+ // Entry points
+ // ------------
+ DataObjectList& entryPointList = root->getList("entryPoint");
+ for (i=0; i < entryPointList.size(); i++)
+ {
+ addEntryPoint(*moduleIter, entryPointList[i]);
+ }
+
+
+ // -----------------
+ // External services
+ // -----------------
+ DataObjectList& externalServiceList = root->getList("externalService");
+ for (i=0; i < externalServiceList.size(); i++)
+ {
+ addExternalService(*moduleIter, externalServiceList[i]);
+ }
+
+ // -----
+ // Wires
+ // -----
+ DataObjectList& wireList = root->getList("wire");
+ for (int l=0; l < wireList.size(); l++)
+ {
+ string source = wireList[l]->getCString("sourceUri");
+ string target = wireList[l]->getCString("targetUri");
+ (*moduleIter)->addWire(source, target);
+ }
+
+ }
+
+ LOGEXIT(1, "ModelLoader::mapModule");
+ }
+
+ // =================================
+ // addComponent:
+ // =================================
+ void ModelLoader::addComponent(Module* module, DataObjectPtr componentDO)
+ {
+ Component* component = module->addComponent(componentDO->getCString("name"));
+
+ string message;
+
+ // -------------------
+ // Implementation type
+ // -------------------
+ DataObjectPtr impl = componentDO->getDataObject("implementation");
+ if (!impl)
+ {
+ message = "No implementation for component: ";
+ message = message + componentDO->getCString("name");
+ throw SystemConfigurationException(message.c_str());
+ }
+ // Determine the type
+ string componentTypeName;
+ string componentTypePath;
+ string implType = impl->getType().getName();
+ if (implType == "CPPImplementation")
+ {
+ string dll = impl->getCString("dll");
+ string header = impl->getCString("header");
+ string className = impl->getCString("class");
+ CPPImplementation* cppImpl = new CPPImplementation(dll, header, className);
+ componentTypePath = cppImpl->getHeaderPath();
+ componentTypeName = cppImpl->getHeaderStub();
+ component->setImplementation(cppImpl);
+
+ }
+ else if (implType == "JavaImplementation")
+ {
+ }
+
+ // -----------------------
+ // Load the .componentType
+ // -----------------------
+ string typeFileName = module->getRoot() + "/" + componentTypePath + componentTypeName + ".componentType";
+ try
+ {
+ XMLDocumentPtr componentTypeFile = getXMLHelper()->loadFile(typeFileName.c_str());
+ if (componentTypeFile->getRootDataObject() == 0)
+ {
+ LOGERROR_1(0, "ModelLoader::mapModule: Unable to load file: %s", typeFileName.c_str());
+ }
+ else
+ {
+ //Utils::printDO(componentTypeFile->getRootDataObject());
+ //commonj::sdo::SDOUtils::printDataObject(componentTypeFile->getRootDataObject());
+ addServices(component, componentTypeFile->getRootDataObject());
+ addReferences(component, componentTypeFile->getRootDataObject());
+ addProperties(component, componentTypeFile->getRootDataObject());
+ }
+ } catch (SDORuntimeException& ex)
+ {
+ LOGERROR_1(0, "ModelLoader::mapModule: Exception caught: %s", ex.getMessageText());
+ throw SystemConfigurationException(ex.getMessageText());
+ }
+
+ // ----------
+ // Properties
+ // ----------
+ DataObjectPtr props = componentDO->getDataObject("properties");
+ component->addProperties(props);
+
+ // ----------
+ // References
+ // ----------
+ DataObjectPtr refs = componentDO->getDataObject("references");
+ if (refs)
+ {
+ PropertyList pl = refs->getInstanceProperties();
+ for (int refI=0; refI < pl.size(); refI++)
+ {
+ // ----------------------------------------------------------
+ // Add the reference to the module wires to be resolved later
+ // ----------------------------------------------------------
+ string refName = pl[refI].getName();
+ if (!component->findReference(pl[refI].getName()))
+ {
+ // Configuration error: reference is not defined
+ message = "Undefined reference: " + refName;
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ string src = component->getName() + "/" + refName;
+
+ // The reflist below is a list of open data objects
+ DataObjectList& reflist = refs->getList(pl[refI]);
+ for (int refslistI=0; refslistI<reflist.size(); refslistI++)
+ {
+ // Get the reference value
+ string refValue = reflist.getDataObject(refslistI)->getSequence()->getCStringValue(0);
+ module->addWire(src, refValue);
+ }
+ }
+ }
+ }
+
+
+ // =====================================================================
+ // addServices: add the services from the componentType to the component
+ // =====================================================================
+ void ModelLoader::addServices(Component* component, DataObjectPtr componentType)
+ {
+ DataObjectList& services = componentType->getList("service");
+ for (int i=0; i<services.size(); i++)
+ {
+ Service* service = component->addService(services[i]->getCString("name"));
+ service->setInterface(getInterface(services[i]));
+ }
+ }
+
+ // ===================================================
+ // addReferences: add the references to the component
+ // ===================================================
+ void ModelLoader::addReferences(Component* component, DataObjectPtr componentType)
+ {
+ DataObjectList& refs = componentType->getList("reference");
+ for (int i=0; i<refs.size(); i++)
+ {
+ ServiceReference* serviceRef = component->addReference(refs[i]->getCString("name"));
+ string multiplicity = "1..1";
+ if (refs[i]->isSet("multiplicity"))
+ {
+ multiplicity = refs[i]->getCString("multiplicity");
+ }
+ serviceRef->setMultiplicity(multiplicity);
+ serviceRef->setInterface(getInterface(refs[i]));
+ }
+ }
+
+
+ // ==============
+ // getInterface
+ // ==============
+ Interface* ModelLoader::getInterface(DataObjectPtr obj)
+ {
+ // -----------------
+ // get the interface
+ // -----------------
+ DataObjectPtr iface = obj->getDataObject("interface");
+ if (!iface)
+ {
+ string message = "No interface for: ";
+ message = message + obj->getCString("name");
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ // Determine the type
+ string componentTypeName;
+ string ifType = iface->getType().getName();
+ if (ifType == "CPPInterface")
+ {
+ string header = iface->getCString("header");
+ string className = iface->getCString("class");
+ string scope = iface->getCString("scope");
+ bool remotable = iface->getBoolean("remotable");
+
+ return new CPPInterface(header, className, scope, remotable);
+ }
+ else
+ {
+ // Error?
+ return 0;
+ }
+ }
+
+ // ==============================================
+ // addProperties: add Properties to the component
+ // ==============================================
+ void ModelLoader::addProperties(Component* component, DataObjectPtr componentType)
+ {
+ DataObjectList& props = componentType->getList("property");
+ for (int i=0; i<props.size(); i++)
+ {
+ string name = props[i]->getCString("name");
+ string type = props[i]->getCString("type");
+ bool many=false;
+ if (props[i]->isSet("many"))
+ {
+ many = props[i]->getBoolean("many");
+ }
+
+ bool required=false;
+ if (props[i]->isSet("required"))
+ {
+ many = props[i]->getBoolean("required");
+ }
+
+ const char* defaultValue = 0;
+ if (props[i]->isSet("default"))
+ {
+ defaultValue = props[i]->getCString("default");
+ }
+
+ component->addProperty(name, type, many, required, defaultValue);
+ }
+ }
+
+ // ===============================================
+ // addEntryPoint: add an EntryPoint to the module
+ // ===============================================
+ void ModelLoader::addEntryPoint(Module* module, DataObjectPtr entryPointDO)
+ {
+ string message;
+
+ //Utils::printDO(entryPointDO);
+ EntryPoint* entryPoint = module->addEntryPoint(entryPointDO->getCString("name"));
+
+ string multiplicity = "1..1";
+ if (entryPointDO->isSet("multiplicity"))
+ {
+ multiplicity = entryPointDO->getCString("multiplicity");
+ }
+
+ entryPoint->setMultiplicity(multiplicity);
+ entryPoint->setInterface(getInterface(entryPointDO));
+
+ DataObjectList& refs = entryPointDO->getList("reference");
+ for (int i=0; i<refs.size(); i++)
+ {
+ // ----------------------------------------------------------
+ // Add the reference to the module wires to be resolved later
+ // ----------------------------------------------------------
+ string targ = refs.getCString(i);
+ module->addWire(entryPoint->getName(), targ);
+ }
+
+ // Get binding, it will be the first and only binding
+ DataObjectPtr binding = entryPointDO->getList("binding")[0];
+ if (!binding)
+ {
+ message = "No binding for entryPoint: ";
+ message = message + entryPointDO->getCString("name");
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ // Utils::printDO(binding);
+
+ string uri = binding->getCString("uri");
+
+ // Determine the binding type
+ string bindingType = binding->getType().getName();
+ if (bindingType == "WebServiceBinding")
+ {
+ string port = binding->getCString("port");
+
+ WSBinding* wsBinding = new WSBinding(uri,port);
+
+ entryPoint->setBinding(wsBinding);
+
+ }
+ else if (bindingType == "SCABinding")
+ {
+ message = "SCA binding not yet implemented. Binding is for entryPoint: ";
+ message = message + entryPointDO->getCString("name");
+ throw SystemConfigurationException(message.c_str());
+ }
+ }
+
+
+ // =========================================================
+ // addExternalService: add an ExternalService to the module
+ // =========================================================
+ void ModelLoader::addExternalService(Module* module, DataObjectPtr externalServiceDO)
+ {
+ string message;
+
+ ExternalService* externalService = module->addExternalService(externalServiceDO->getCString("name"));
+ // Add the interface
+ externalService->setInterface(getInterface(externalServiceDO));
+
+ // Get binding, it will be the first and only binding
+ DataObjectPtr binding = externalServiceDO->getList("binding")[0];
+ if (!binding)
+ {
+ message = "No binding for externalService: ";
+ message = message + externalServiceDO->getCString("name");
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ //Utils::printDO(binding);
+
+ string uri = binding->getCString("uri");
+
+ // Determine the binding type
+ string bindingType = binding->getType().getName();
+ if (bindingType == "WebServiceBinding")
+ {
+ string port = binding->getCString("port");
+
+ WSBinding* wsBinding = new WSBinding(uri,port);
+
+ externalService->setBinding(wsBinding);
+
+ }
+ else if (bindingType == "SCABinding")
+ {
+ }
+ }
+
+
+
+ ///
+ /// Use the Tuscany-model.config file in the module root directory to
+ /// determine which xsds and wsdls to load into a dataFactory.
+ ///
+ void ModelLoader::loadModuleConfig(const string &moduleRootDir, const string &moduleName)
+ {
+ LOGENTRY(1, "ModelLoader::loadModuleConfig");
+
+ // Load the "Tuscany-model.config" file, if it exists
+ Files files(moduleRootDir, "Tuscany-model.config", false);
+ for (unsigned int i=0; i < files.size(); i++)
+ {
+ string filename = moduleRootDir + "/" + files[i].getFileName();
+ XMLDocumentPtr moduleConfigFile = getXMLHelper()->loadFile(filename.c_str());
+ if (moduleConfigFile->getRootDataObject() == 0)
+ {
+ LOGERROR_1(0, "ModelLoader::loadModuleConfig: Unable to load file: %s", filename.c_str());
+ }
+ else
+ {
+ LOGINFO_2(2, "ModelLoader::loadModuleConfig: Loading module config for: %s, root Dir: %s", moduleName.c_str(), moduleRootDir.c_str());
+
+ if(moduleConfigFile->getRootDataObject()->isSet("xsd"))
+ {
+ DataObjectList& xsds = moduleConfigFile->getRootDataObject()->getList("xsd/file");
+
+ for (int i=0; i<xsds.size(); i++)
+ {
+ if(xsds[i]->isSet("name"))
+ {
+ // Load a xsd file -> set the types in the moduleComponents data factory file
+ string xsdName = moduleRootDir + "/" +xsds[i]->getCString("name");
+ loadTypes(xsdName.c_str(), moduleName);
+ }
+ }
+ }
+
+
+ if( moduleConfigFile->getRootDataObject()->isSet("wsdl"))
+ {
+ DataObjectList& wsdls = moduleConfigFile->getRootDataObject()->getList("wsdl/file");
+ for (int j=0; j<wsdls.size(); j++)
+ {
+ if(wsdls[i]->isSet("name"))
+ {
+ string wsdlName = moduleRootDir + "/" +wsdls[j]->getCString("name");
+ // Load a wsdl file -> get the types, then the contents of the wsdl
+ loadTypes(wsdlName.c_str(), moduleName);
+
+ // Load the contents of the wsdl files
+ loadWsdl(wsdlName.c_str(), moduleName);
+ }
+ }
+ }
+ }
+ }
+
+
+ LOGEXIT(1, "ModelLoader::loadModuleConfig");
+ }
+
+
+ ///
+ /// Use the types from an xsd or wsdl file
+ ///
+ void ModelLoader::loadTypes(const char *fileName, const string &moduleName)
+ {
+ LOGENTRY(1, "ModelLoader::loadTypes");
+
+ // Load a xsd file -> set the types in the moduleComponents data factory file
+
+ MODULE_LIST moduleList = system->findModules(moduleName);
+ MODULE_LIST::iterator moduleIter;
+
+ for (moduleIter = moduleList.begin();
+ moduleIter != moduleList.end();
+ moduleIter++ )
+ {
+ try {
+ (*moduleIter)->getXSDHelper()->defineFile(fileName);
+ //Utils::printTypes((*moduleIter)->getXSDHelper()->getDataFactory());
+
+ } catch (SDOTypeNotFoundException ex)
+ {
+ LOGERROR_1(0, "ModuleLoader: Exception caught: %s", ex.getMessageText());
+ throw ex;
+ }
+ }
+ LOGEXIT(1, "ModelLoader::loadTypes");
+ }
+
+ ///
+ /// Load the web services definition from a wsdl
+ ///
+ void ModelLoader::loadWsdl(const char *fileName, const string &moduleName)
+ {
+ LOGENTRY(1, "ModelLoader::loadWsdl");
+
+ try {
+ // Load the wsdl file
+ XMLDocumentPtr doc = getXMLHelper()->loadFile(fileName);
+
+ if (doc!=0 && doc->getRootDataObject()!=0)
+ {
+ //Utils::printDO(doc->getRootDataObject());
+ MODULE_LIST moduleList = system->findModules(moduleName);
+ MODULE_LIST::iterator moduleIter;
+
+ for (moduleIter = moduleList.begin();
+ moduleIter != moduleList.end();
+ moduleIter++ )
+ {
+ // Add the root object to the module
+ (*moduleIter)->addWsdl(doc->getRootDataObject());
+
+ }
+
+ }
+ else
+ {
+ LOGERROR_1(0, "ModuleLoader: Unable to load or parse WSDL %s", fileName);
+ }
+
+ } catch (SDOTypeNotFoundException ex)
+ {
+ LOGERROR_1(0, "ModelLoader: SDOTypeNotFoundException caught: %s", ex.getMessageText());
+ throw ex;
+ }
+ catch (SDONullPointerException ex)
+ {
+ LOGERROR_1(0, "ModelLoader: SDONullPointerException caught: %s", ex.getMessageText());
+ throw ex;
+ }
+ LOGEXIT(1, "ModelLoader::loadWsdl");
+
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+ // Methods used to load the model into memory
+ //////////////////////////////////////////////////////////////////////////////
+
+ ///
+ /// Get an XSDHelper that has the appropriate XSDs already loaded
+ ///
+ const XSDHelperPtr ModelLoader::getXSDHelper()
+ {
+ if (myXSDHelper == 0)
+ {
+
+ // Create an xsd helper
+ myXSDHelper = HelperProvider::getXSDHelper();
+
+ // Now add to it some xsd files
+ try {
+ string root = SCARuntime::getInstance()->getInstallRoot();
+ string filename = root + "/xsd/sca.xsd";
+
+ myXSDHelper->defineFile(filename.c_str());
+
+ // Tuscany specific xsd for config files
+ filename = root + "/xsd/tuscany.xsd";
+ myXSDHelper->defineFile(filename.c_str());
+
+ loadWSDLTypes(myXSDHelper);
+
+ } catch (SDOTypeNotFoundException ex)
+ {
+ LOGERROR_1(0, "ModuleLoader: Exception caught: %s", ex.getMessageText());
+ throw ex;
+ }
+ }
+
+
+ return myXSDHelper;
+ }
+
+
+ ///
+ /// Get an XMLHelper to load files
+ ///
+ const XMLHelperPtr ModelLoader::getXMLHelper()
+ {
+ if (myXMLHelper == 0) {
+
+ // Create an xml helper
+ myXMLHelper = HelperProvider::getXMLHelper(getXSDHelper()->getDataFactory());
+
+ }
+
+ return myXMLHelper;
+ }
+
+ void ModelLoader::loadWSDLTypes(XSDHelperPtr xsdHelper)
+ {
+ DataFactoryPtr dataFactory = xsdHelper->getDataFactory();
+
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBinding",
+ false, true, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperation",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationFault",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationMessage",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDocumentation",
+ true, true, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDocumented",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement",
+ false, false, true);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleAttributesDocumented",
+ false, true, true);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented",
+ false, true, true);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tFault",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tImport",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tMessage",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ false, false, false);
+
+
+ TypeDefinition tpart;
+ tpart.setUri("http://schemas.xmlsoap.org/wsdl/");
+ tpart.setName("tPart");
+ tpart.setParentType("http://schemas.xmlsoap.org/wsdl/",
+ "tExtensibleAttributesDocumented", false);
+ PropertyDefinition propdef;
+ propdef.setName("name");
+ propdef.setLocalName("name");
+ propdef.setType("commonj.sdo", "String");
+ propdef.setIsContainment(true);
+ tpart.addPropertyDefinition(propdef);
+ propdef.setName("element");
+ propdef.setLocalName("element");
+ propdef.setIsQName(true);
+ tpart.addPropertyDefinition(propdef);
+ propdef.setName("type");
+ propdef.setLocalName("type");
+ tpart.addPropertyDefinition(propdef);
+ TypeDefinitions typedefs;
+ typedefs.addTypeDefinition(tpart);
+ xsdHelper->defineTypes(typedefs);
+
+ //Utils::printTypes(dataFactory);
+ /*dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPart",
+ false, false, false);*/
+
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPort",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPortType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tService",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/", "tTypes",
+ false, false, false);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "definitions",
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "import",
+ "http://schemas.xmlsoap.org/wsdl/", "tImport",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "types",
+ "http://schemas.xmlsoap.org/wsdl/", "tTypes",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "message",
+ "http://schemas.xmlsoap.org/wsdl/", "tMessage",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "portType",
+ "http://schemas.xmlsoap.org/wsdl/", "tPortType",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "binding",
+ "http://schemas.xmlsoap.org/wsdl/", "tBinding",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "service",
+ "http://schemas.xmlsoap.org/wsdl/", "tService",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "input",
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "output",
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "fault",
+ "http://schemas.xmlsoap.org/wsdl/", "tFault",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "output",
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "input",
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "fault",
+ "http://schemas.xmlsoap.org/wsdl/", "tFault",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "arrayType",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "RootType",
+ "required",
+ "commonj.sdo", "Boolean",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBinding",
+ "operation",
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperation",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBinding",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBinding",
+ "type",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperation",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperation",
+ "input",
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationMessage",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperation",
+ "output",
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationMessage",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperation",
+ "fault",
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationFault",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperation",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationFault",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationFault",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationMessage",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tBindingOperationMessage",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "import",
+ "http://schemas.xmlsoap.org/wsdl/", "tImport",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "types",
+ "http://schemas.xmlsoap.org/wsdl/", "tTypes",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "message",
+ "http://schemas.xmlsoap.org/wsdl/", "tMessage",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "portType",
+ "http://schemas.xmlsoap.org/wsdl/", "tPortType",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "binding",
+ "http://schemas.xmlsoap.org/wsdl/", "tBinding",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "service",
+ "http://schemas.xmlsoap.org/wsdl/", "tService",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "targetNamespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDefinitions",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tDocumented",
+ "documentation",
+ "http://schemas.xmlsoap.org/wsdl/", "tDocumentation",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement",
+ "required",
+ "commonj.sdo", "Boolean",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleAttributesDocumented",
+ "http://schemas.xmlsoap.org/wsdl/", "tDocumented");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented",
+ "http://schemas.xmlsoap.org/wsdl/", "tDocumented");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tFault",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleAttributesDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tFault",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tFault",
+ "message",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tImport",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleAttributesDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tImport",
+ "namespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tImport",
+ "location",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tMessage",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tMessage",
+ "part",
+ "http://schemas.xmlsoap.org/wsdl/", "tPart",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tMessage",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ "input",
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ "output",
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ "fault",
+ "http://schemas.xmlsoap.org/wsdl/", "tFault",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ "parameterOrder",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleAttributesDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tParam",
+ "message",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPart",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleAttributesDocumented");
+ /*dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPart",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPart",
+ "element",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPart",
+ "type",
+ "commonj.sdo", "URI",
+ false, false, true);*/
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPort",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPort",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPort",
+ "binding",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPortType",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleAttributesDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPortType",
+ "operation",
+ "http://schemas.xmlsoap.org/wsdl/", "tOperation",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tPortType",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tService",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tService",
+ "port",
+ "http://schemas.xmlsoap.org/wsdl/", "tPort",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/", "tService",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/", "tTypes",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibleDocumented");
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "encodingStyle",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tAddress",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBinding",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFault",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes",
+ false, false, true);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tOperation",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tStyleChoice",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ false, false, false);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "binding",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBinding",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "operation",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tOperation",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "body",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "encodingStyle",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "encodingStyle",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "use",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "namespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "fault",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFault",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "header",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "message",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "part",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "use",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "encodingStyle",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "encodingStyle",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "namespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "headerfault",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "RootType",
+ "address",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tAddress",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tAddress",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tAddress",
+ "location",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBinding",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBinding",
+ "transport",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBinding",
+ "style",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tStyleChoice",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody",
+ "parts",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody",
+ "encodingStyle",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "encodingStyle",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody",
+ "use",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody",
+ "namespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFault",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFault",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tBody");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes",
+ "required",
+ "commonj.sdo", "Boolean",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes",
+ "parts",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes",
+ "encodingStyle",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "encodingStyle",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes",
+ "use",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tFaultRes",
+ "namespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ "headerfault",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ true, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ "message",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ "part",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ "use",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ "encodingStyle",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "encodingStyle",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeader",
+ "namespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ "message",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ "part",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ "use",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ "encodingStyle",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "encodingStyle",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tHeaderFault",
+ "namespace",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tOperation",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tOperation",
+ "soapAction",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tOperation",
+ "style",
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tStyleChoice",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "tStyleChoice",
+ "commonj.sdo", "String");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap/", "useChoice",
+ "commonj.sdo", "String");
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "RootType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "addressType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "bindingType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "operationType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "urlEncoded",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "urlReplacement",
+ false, false, false);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "RootType",
+ "address",
+ "http://schemas.xmlsoap.org/wsdl/http/", "addressType",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "RootType",
+ "binding",
+ "http://schemas.xmlsoap.org/wsdl/http/", "bindingType",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "RootType",
+ "operation",
+ "http://schemas.xmlsoap.org/wsdl/http/", "operationType",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "RootType",
+ "urlEncoded",
+ "http://schemas.xmlsoap.org/wsdl/http/", "urlEncoded",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "RootType",
+ "urlReplacement",
+ "http://schemas.xmlsoap.org/wsdl/http/", "urlReplacement",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "addressType",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "addressType",
+ "location",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "bindingType",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "bindingType",
+ "verb",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "operationType",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/http/", "operationType",
+ "location",
+ "commonj.sdo", "URI",
+ false, false, true);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "RootType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "contentType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "multipartRelatedType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "tMimeXml",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "tPart",
+ false, true, false);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "RootType",
+ "content",
+ "http://schemas.xmlsoap.org/wsdl/mime/", "contentType",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "RootType",
+ "multipartRelated",
+ "http://schemas.xmlsoap.org/wsdl/mime/", "multipartRelatedType",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "RootType",
+ "mimeXml",
+ "http://schemas.xmlsoap.org/wsdl/mime/", "tMimeXml",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "contentType",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "contentType",
+ "type",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "contentType",
+ "part",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "multipartRelatedType",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "multipartRelatedType",
+ "part",
+ "http://schemas.xmlsoap.org/wsdl/mime/", "tPart",
+ true, false, true);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "tMimeXml",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "tMimeXml",
+ "part",
+ "commonj.sdo", "String",
+ false, false, true);
+ dataFactory->addPropertyToType(
+ "http://schemas.xmlsoap.org/wsdl/mime/", "tPart",
+ "name",
+ "commonj.sdo", "String",
+ false, false, true);
+
+
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "RootType",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tAddress",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tBinding",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tBody",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tExtensibilityElementOpenAttrs",
+ false, true, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tFault",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tFaultRes",
+ false, false, true);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tHeader",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tHeaderFault",
+ false, true, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tOperation",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tParts",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tStyleChoice",
+ false, false, false);
+ dataFactory->addType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "useChoice",
+ false, false, false);
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tAddress",
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tExtensibilityElementOpenAttrs");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tBinding",
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tExtensibilityElementOpenAttrs");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tBody",
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tExtensibilityElementOpenAttrs");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tExtensibilityElementOpenAttrs",
+ "http://schemas.xmlsoap.org/wsdl/", "tExtensibilityElement");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tFault",
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tFaultRes");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tFaultRes",
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tBody");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tHeader",
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tExtensibilityElementOpenAttrs");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tOperation",
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tExtensibilityElementOpenAttrs");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "tStyleChoice",
+ "commonj.sdo", "String");
+ dataFactory->setBaseType(
+ "http://schemas.xmlsoap.org/wsdl/soap12/", "useChoice",
+ "commonj.sdo", "String");
+ }
+
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.h
new file mode 100644
index 0000000000..97478748e9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ModelLoader.h
@@ -0,0 +1,105 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_modelloader_h
+#define tuscany_sca_model_modelloader_h
+
+#include "osoa/sca/export.h"
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+using commonj::sdo::DataFactoryPtr;
+using commonj::sdo::XSDHelperPtr;
+
+#include "tuscany/sca/model/System.h"
+#include "tuscany/sca/model/Subsystem.h"
+
+#include "tuscany/sca/util/File.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Provides methods to load the runtime model from the SCDL file.
+ */
+ class ModelLoader {
+ public:
+ /**
+ * Constructor.
+ * @param system The SCA system to load.
+ */
+ ModelLoader(System* system);
+
+ /**
+ * Destructor.
+ */
+ virtual ~ModelLoader();
+
+ /**
+ * Load the model from the configuration information.
+ * @param configurationRoot The location of the deployed SCA
+ * modules and subsystems.
+ */
+ void load(const string& configurationRoot);
+
+ private:
+ System* system;
+ void loadModule(const char *moduleRoot);
+
+
+ commonj::sdo::XMLHelperPtr myXMLHelper; // Used to load scdl files
+ commonj::sdo::XSDHelperPtr myXSDHelper; // Used to load xsds
+ const commonj::sdo::XSDHelperPtr getXSDHelper(void);
+ const commonj::sdo::XMLHelperPtr getXMLHelper(void);
+
+ void loadSubsystems(const string& configurationRoot);
+ void loadSubsystemFile(const File& file);
+ void mapSubsystem(commonj::sdo::DataObjectPtr rootDO);
+
+ void loadModules(const string& configurationRoot);
+ void loadModuleFile(const File& file);
+ void mapModule(const string& moduleName, commonj::sdo::DataObjectPtr rootDO, std::string moduleRootDir);
+
+ void addComponent(Module* module, DataObjectPtr componentDO);
+ void addEntryPoint(Module* module, DataObjectPtr entryPointDO);
+ void addExternalService(Module* module, DataObjectPtr externalServiceDO);
+
+ void addServices(Component* component, DataObjectPtr componentType);
+ void addReferences(Component* component, DataObjectPtr componentType);
+ void addProperties(Component* component, DataObjectPtr componentType);
+
+
+ void loadModuleConfig(const string &moduleRootDir, const string &moduleName);
+ void loadTypes(const char *fileName, const string &moduleName);
+ void loadWsdl(const char *fileName, const string &moduleName);
+
+ void loadWSDLTypes(XSDHelperPtr xsdHelper);
+
+ Interface* getInterface(DataObjectPtr obj);
+
+
+ };
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_modelloader_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.cpp
new file mode 100644
index 0000000000..fc8b6b1eb8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.cpp
@@ -0,0 +1,235 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/model/Module.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ Module::Module(const std::string& moduleName)
+ : name(moduleName)
+ {
+ LOGENTRY(1, "Module::constructor");
+ LOGEXIT(1, "Module::constructor");
+ }
+
+ Module::~Module()
+ {
+ }
+
+ void Module::setRoot(const std::string& rootDirectory)
+ {
+ moduleRoot = rootDirectory;
+ }
+
+
+ ///
+ /// Add a new component to the module component
+ ///
+ Component* Module::addComponent(const std::string& name)
+ {
+ LOGENTRY(1, "Module::addComponent");
+ Component* newComponent = new Component(name, this);
+ components[name] = newComponent;
+ LOGEXIT(1, "Module::addComponent");
+ return newComponent;
+ }
+
+ Component* Module::findComponent(const std::string& name)
+ {
+ LOGENTRY(1, "Module::findComponent");
+ Component* foundComponent = components[name];
+ LOGEXIT(1, "Module::findComponent");
+ return foundComponent;
+ }
+
+ Service* Module::findComponentService(const std::string& name)
+ {
+ LOGENTRY(1, "Module::findComponentService");
+
+ Service* service = 0;
+
+ string componentName;
+ string serviceName;
+ Utils::tokeniseUri(name, componentName, serviceName);
+
+ // Locate the component
+ Component* foundComponent = components[componentName];
+ if (foundComponent)
+ {
+ // Locate the service
+ service = foundComponent->findService(serviceName);
+ }
+ LOGEXIT(1, "Module::findComponentService");
+ return service;
+ }
+
+ ExternalService* Module::findExternalService(const std::string& name)
+ {
+ LOGENTRY(1, "Module::findExternalService");
+ ExternalService* foundService = externalServices[name];
+ LOGEXIT(1, "Module::findExternalService");
+ return foundService;
+ }
+
+
+ EntryPoint* Module::addEntryPoint(const std::string& name)
+ {
+ LOGENTRY(1, "Module::addEntryPoint");
+ EntryPoint* ep = new EntryPoint(name);
+ entryPoints[name] = ep;
+ LOGEXIT(1, "Module::addEntryPoint");
+ return findEntryPoint(name);
+ }
+
+ EntryPoint* Module::findEntryPoint(const std::string& name)
+ {
+ return entryPoints[name];
+ }
+
+
+ ExternalService* Module::addExternalService(const std::string& name)
+ {
+ LOGENTRY(1, "Module::addExternalService");
+ ExternalService* es = new ExternalService(name, this);
+ externalServices[name] = es;
+ LOGEXIT(1, "Module::addExternalService");
+ return es;
+ }
+
+ void Module::addWire(const std::string& source, const std::string& target)
+ {
+ LOGENTRY(1, "Module::addWire");
+ wires.push_back(Wire(source, target));
+ LOGEXIT(1, "Module::addWire");
+ }
+
+
+ void Module::resolveWires()
+ {
+ LOGENTRY(1, "Module::resolveWires");
+ for (WIRES::iterator iter = wires.begin();
+ iter != wires.end();
+ iter++)
+ {
+ // -----------------
+ // Locate the target
+ // -----------------
+ WireTarget* target = findComponentService(iter->getTarget());
+ if (!target)
+ {
+ target = findExternalService(iter->getTarget());
+ }
+ if (!target)
+ {
+ LOGERROR_1(0, "Module::resolveWires: Wire target %s not found", iter->getTarget().c_str());
+ }
+ else
+ {
+ EntryPoint* entrypoint = findEntryPoint(iter->getSourceComponent());
+ if (entrypoint)
+ {
+ entrypoint->addTarget(target);
+ }
+ else
+ {
+ Component* component = findComponent(iter->getSourceComponent());
+ if (component)
+ {
+ ServiceReference* serviceReference = component->findReference(iter->getSourceReference());
+ if (serviceReference)
+ {
+ serviceReference->addTarget(target);
+ }
+ else
+ {
+ LOGERROR_1(0, "Module::resolveWires: Wire source reference %s not found", iter->getSourceReference().c_str());
+ }
+ }
+ else
+ {
+ LOGERROR_1(0, "Module::resolveWires: Wire source %s not found", iter->getSourceComponent().c_str());
+ }
+ }
+ }
+ }
+
+ LOGEXIT(1, "Module::resolveWires");
+ }
+
+
+
+ void Module::addWsdl(commonj::sdo::DataObjectPtr wsdlModel)
+ {
+ LOGENTRY(1, "Module::addWsdl");
+ Wsdl* wsdl = new Wsdl(wsdlModel);
+ wsdls[wsdl->getNamespace()] = wsdl;
+ LOGEXIT(1, "Module::addWsdl");
+
+ }
+
+ Wsdl* Module::findWsdl(const std::string& wsdlNamespace )
+ {
+ return wsdls[wsdlNamespace];
+
+ }
+
+
+ // Get an XSDHelper - one will be created for each module
+ commonj::sdo::XSDHelperPtr Module::getXSDHelper()
+ {
+ if (xsdHelper == 0)
+ {
+ xsdHelper = commonj::sdo::HelperProvider::getXSDHelper();
+ }
+
+ return xsdHelper;
+ }
+
+ // Get an XMLHelper - one will be created for each module
+ commonj::sdo::XMLHelperPtr Module::getXMLHelper()
+ {
+ if (xmlHelper == 0)
+ {
+ xmlHelper = commonj::sdo::HelperProvider::getXMLHelper(getXSDHelper()->getDataFactory());
+ }
+
+ return xmlHelper;
+ }
+
+
+ // Get a data factory - the one in the xsd/xml helper
+ commonj::sdo::DataFactoryPtr Module::getDataFactory()
+ {
+ return getXSDHelper()->getDataFactory();
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.h
new file mode 100644
index 0000000000..f73f1d36bc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Module.h
@@ -0,0 +1,235 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_module_h
+#define tuscany_sca_model_module_h
+
+#include <string>
+using std::string;
+
+#include <map>
+using std::map;
+#include <vector>
+using std::vector;
+
+#include "commonj/sdo/SDO.h"
+
+
+#include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/ExternalService.h"
+#include "tuscany/sca/model/EntryPoint.h"
+#include "tuscany/sca/model/Wire.h"
+#include "tuscany/sca/model/Wsdl.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+ /**
+ * Information about a module.
+ */
+ class Module
+ {
+ public:
+ /**
+ * Constructor.
+ * @param name the name of the module.
+ */
+ Module(const std::string& name);
+
+ /**
+ * Destructor.
+ */
+ virtual ~Module();
+
+ /**
+ * Set the root directory of the module information.
+ * @param rootDirectory The root of the module in the file system.
+ */
+ void setRoot(const std::string& rootDirectory);
+
+ /**
+ * Get the root directory of the module.
+ * @return The root of the module in the file system.
+ */
+ const std::string& getRoot() {return moduleRoot;}
+
+ /**
+ * Return the name of the module.
+ * @return Name of the module.
+ */
+ const std::string& getName() {return name;}
+
+ /**
+ * Add a new component to the module.
+ * @param componentName The name of the new component.
+ * @return The Component added to the module.
+ */
+ Component* addComponent(const std::string& componentName);
+
+ /**
+ * Add a new entry point to the module.
+ * @param name The name of the new entry point.
+ * @return The entry point added to the module.
+ */
+ EntryPoint* addEntryPoint(const std::string& name);
+
+ /**
+ * Find an entry point by name.
+ * @param name The name of the entry point to be found.
+ * @return The entry point that was found, or 0 if not found.
+ */
+ EntryPoint* findEntryPoint(const std::string& name);
+
+ /**
+ * Add a new external service to the module.
+ * @param name The name of the new external service.
+ * @return The external service added to the module.
+ */
+ ExternalService* addExternalService(const std::string& name);
+
+ /**
+ * Add a wire to the model.
+ * @param source The source location. Either the source component and
+ * reference (optional), or an entry point.
+ * @param target The target location. Either the target component and
+ * service (optional), or an external service.
+ */
+ void addWire(const std::string& source, const std::string& target);
+
+ /**
+ * Find a component by name.
+ * @param componentName The name of the component to be found.
+ * @return The component that was found, or 0 if not found.
+ */
+ Component* findComponent(const std::string& componentName);
+
+ /**
+ * Find a component and service by name.
+ * @param componentServiceName A string of the form
+ * "componentName"/"serviceName" where the service name is optional
+ * if there is only one service on the component.
+ * @return The Service that was found, or 0 if not found.
+ */
+ Service* findComponentService(const std::string& componentServiceName);
+
+ /**
+ * Find an external service by name.
+ * @param serviceName The name of the external service to be found.
+ * @return The external service that was found, or 0 if not found.
+ */
+ ExternalService* findExternalService(const std::string& serviceName);
+
+ /**
+ * Add a WSDL definition to the module.
+ * @param wsdlModel A data object holding all the information about
+ * the WSDL definition from a WSDL file.
+ */
+ void addWsdl(commonj::sdo::DataObjectPtr wsdlModel);
+
+ /**
+ * Find a WSDL definition by target namespace.
+ * @param wsdlNamespace The namespace of the WSDL definitions to find.
+ */
+ Wsdl* findWsdl(const std::string& wsdlNamespace);
+
+ /**
+ * Return a cached SDO XSDHelper.
+ */
+ commonj::sdo::XSDHelperPtr getXSDHelper(void);
+
+ /**
+ * Return a cached SDO XMLHelper.
+ */
+ commonj::sdo::XMLHelperPtr getXMLHelper(void);
+
+ /**
+ * Return a data factory which has all the types defined in XSDs and
+ * WSDL files configured for this module.
+ * @return The data factory for this module.
+ */
+ commonj::sdo::DataFactoryPtr getDataFactory(void);
+
+ /**
+ * Work through the list of wires and connect the source and target uris.
+ */
+ void resolveWires();
+
+ private:
+ /**
+ * Name of the module.
+ */
+ string name;
+
+ /**
+ * Directory of the root of the module.
+ */
+ string moduleRoot;
+
+ /**
+ * Cached XSDHelper.
+ */
+ commonj::sdo::XSDHelperPtr xsdHelper;
+
+ /**
+ * Cached XMLHelper.
+ */
+ commonj::sdo::XMLHelperPtr xmlHelper;
+
+ typedef map<std::string, Component*> COMPONENT_MAP;
+ /**
+ * Map (by name) of all the components in this module.
+ */
+ COMPONENT_MAP components;
+
+ typedef map<std::string, ExternalService*> EXTERNALSERVICE_MAP;
+ /**
+ * Map (by name) of all the external services in this module.
+ */
+ EXTERNALSERVICE_MAP externalServices;
+
+ typedef map<std::string, EntryPoint*> ENTRYPOINT_MAP;
+ /**
+ * Map (by name) of all the entry points in this module.
+ */
+ ENTRYPOINT_MAP entryPoints;
+
+ typedef vector<Wire> WIRES;
+ /**
+ * Vector of all the wires in this module.
+ */
+ WIRES wires;
+
+ typedef map<std::string, Wsdl*> WSDL_MAP;
+ /**
+ * Map by namespace of all the wsdl definitions in this module.
+ */
+ WSDL_MAP wsdls;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // SCA_ModuleComponent_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.cpp
new file mode 100644
index 0000000000..42ccecbc99
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.cpp
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/Service.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+
+ // Constructor
+ Service::Service(const std::string& serviceName, Component* comp)
+ : WireTarget(serviceName),
+ component(comp)
+ {
+ LOGENTRY(1, "Service::constructor (Component)");
+ LOGINFO_1(3, "Service::constructor: Service name: %s", serviceName.c_str());
+ LOGEXIT(1, "Service::constructor");
+ }
+
+ Service::~Service()
+ {
+ }
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.h
new file mode 100644
index 0000000000..6c37dabb3e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Service.h
@@ -0,0 +1,81 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_service_h
+#define tuscany_sca_model_service_h
+
+#include <string>
+using std::string;
+
+#include "tuscany/sca/model/WireTarget.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ class Component;
+
+ /**
+ * Information about a service defined on a component.
+ */
+ class Service : public WireTarget
+ {
+ public:
+ /**
+ * Destructor.
+ */
+ virtual ~Service();
+
+ /**
+ * Return the type of the wire target.
+ * @return Always returns ComponentServiceType.
+ */
+ virtual Type getServiceType() {return ComponentServiceType;}
+
+ /**
+ * Get the component on which this service is defined.
+ * @return The component on which this service is defined.
+ */
+ Component* getComponent() {return component;}
+
+
+ private:
+ friend class Component;
+ /**
+ * Constructor.
+ * @param name The name of the service.
+ * @param component The component on which this service is defined.
+ */
+ Service(const std::string& name, Component* component);
+
+ /**
+ * The component on which this service is defined.
+ */
+ Component* component;
+
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_service_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.cpp
new file mode 100644
index 0000000000..cada38dec2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.cpp
@@ -0,0 +1,89 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/model/ServiceReference.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+
+ // Constructor
+ ServiceReference::ServiceReference(const std::string& referenceName)
+ : name(referenceName), multiplicity(ONE_ONE)
+ {
+ }
+
+ ServiceReference::~ServiceReference()
+ {
+ }
+
+ void ServiceReference::addTarget(WireTarget* targ)
+ {
+ if (multiplicity == ONE_ONE || multiplicity == ZERO_ONE)
+ {
+ if (targets.size() > 0)
+ {
+ // throw exception
+ string message = "Duplicate wire for reference: " + name;
+ throw SystemConfigurationException(message.c_str());
+ }
+ }
+
+ targets.push_back(targ);
+ }
+
+ void ServiceReference::setMultiplicity(const std::string& multip)
+ {
+ if (multip == "0..1")
+ {
+ multiplicity = ZERO_ONE;
+ }
+ else if (multip == "1..1")
+ {
+ multiplicity = ONE_ONE;
+ }
+ else if (multip == "0..n")
+ {
+ multiplicity = ZERO_MANY;
+ }
+ else if (multip == "1..n")
+ {
+ multiplicity = ONE_MANY;
+ }
+ else
+ {
+ string msg = "Invalid multiplicity specified, " + multip + ", for reference: " +name;
+ throw SystemConfigurationException(msg.c_str());
+ }
+ }
+
+ void ServiceReference::setInterface(Interface* interf)
+ {
+ iface = interf;
+ }
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.h
new file mode 100644
index 0000000000..062d7a4c19
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/ServiceReference.h
@@ -0,0 +1,136 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_servicereference_h
+#define tuscany_sca_model_servicereference_h
+
+#include <string>
+using std::string;
+#include <vector>
+using std::vector;
+
+#include "tuscany/sca/model/Interface.h"
+#include "tuscany/sca/model/WireTarget.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Information about a reference on a serivce.
+ */
+ class ServiceReference
+ {
+ public:
+ /**
+ * Constructor.
+ * @param name The name of the reference.
+ */
+ ServiceReference(const std::string& name)
+
+ /**
+ * Destructor.
+ */;
+ virtual ~ServiceReference();
+
+ /**
+ * Get the name of the service.
+ * @return The name of the service.
+ */
+ const std::string& getName() {return name;}
+
+ /**
+ * Multiplicity (how many wires can be attached to this
+ * reference as their source)
+ */
+ enum Multiplicity
+ {
+ ZERO_ONE,
+ ONE_ONE,
+ ZERO_MANY,
+ ONE_MANY
+ };
+
+ /**
+ * Set the multiplicity of this reference.
+ * @param multiplicity One of "0..1", "1..1", "0..n", "1..n"
+ */
+ void setMultiplicity(const std::string& multiplicity);
+
+ /**
+ * Get the multiplicity of this reference.
+ * @return The multiplicity.
+ */
+ Multiplicity getMultiplicity() {return multiplicity;}
+
+ /**
+ * Set the interface required by this reference.
+ * @param iface The interface.
+ */
+ void setInterface(Interface* iface);
+
+ /**
+ * Get the interface.
+ * @return The interface.
+ */
+ Interface* getInterface() {return iface;}
+
+ /**
+ * Add a target for a reference. There may be more than
+ * one if the multiplicity is 0..n or 1..n.
+ * @param target The target for a wire.
+ */
+ void addTarget(WireTarget* target);
+ typedef vector<WireTarget*> TARGETS;
+
+ /**
+ * Get a vector of all the targets from this reference.
+ * @return The targets of this reference.
+ */
+ const TARGETS& getTargets() {return targets;}
+ private:
+ /**
+ * Name of this reference.
+ */
+ string name;
+
+ /**
+ * The interface defining this reference.
+ */
+ Interface* iface;
+
+ /**
+ * The multiplicity of this reference.
+ */
+ Multiplicity multiplicity;
+
+ /**
+ * Vector of all the targets wired from this reference.
+ */
+ TARGETS targets;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_servicereference_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.cpp
new file mode 100644
index 0000000000..08ef0dde49
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.cpp
@@ -0,0 +1,122 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/Subsystem.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+ // Constructor
+ Subsystem::Subsystem(const std::string& subsystemName) : name(subsystemName)
+ {
+ LOGENTRY(1, "Subsystem::constructor");
+
+
+ LOGEXIT(1, "Subsystem::constructor");
+ }
+
+ Subsystem::~Subsystem()
+ {
+ }
+
+ ///
+ /// Add a new module component
+ ///
+ Module* Subsystem::addModuleComponent(const std::string& name, const std::string& moduleName)
+ {
+ LOGENTRY(1, "Subsystem::addModuleComponent");
+
+ Module* newModule = new Module(moduleName);
+
+ // TODO: Should check for duplicates and throw exception
+ moduleComponents[name] = newModule;
+
+ LOGEXIT(1, "Subsystem::addModuleComponent");
+
+ return newModule;
+ }
+
+ Module* Subsystem::findModule(const std::string& moduleName)
+ {
+ for (MODULECOMPONENT_MAP::iterator moduleComponentIter = moduleComponents.begin();
+ moduleComponentIter != moduleComponents.end();
+ moduleComponentIter++)
+ {
+ if (moduleName == moduleComponentIter->second->getName())
+ {
+ return (Module*)moduleComponentIter->second;
+ }
+ }
+ return 0;
+ }
+
+ Module* Subsystem::findModuleByComponentName(const std::string& moduleComponentName)
+ {
+ return moduleComponents[moduleComponentName];
+ }
+
+ Module* Subsystem::getDefaultModule()
+ {
+ if (moduleComponents.size() == 1)
+ {
+ MODULECOMPONENT_MAP::iterator moduleComponentIter = moduleComponents.begin();
+ return moduleComponentIter->second;
+ }
+ return 0;
+ }
+
+ ///
+ /// Add a new entrypoint
+ ///
+ EntryPoint* Subsystem::addEntryPoint(const std::string& name)
+ {
+ LOGENTRY(1, "Subsystem::addEntryPoint");
+
+ EntryPoint* newEntryPoint = new EntryPoint(name);
+ entryPoints[name] = newEntryPoint;
+ LOGEXIT(1, "Subsystem::addEntryPoint");
+ return findEntryPoint(name);
+ }
+
+ EntryPoint* Subsystem::findEntryPoint(const std::string& name)
+ {
+ return entryPoints[name];
+ }
+
+ void Subsystem::resolveWires()
+ {
+ for (MODULECOMPONENT_MAP::iterator moduleComponentIter = moduleComponents.begin();
+ moduleComponentIter != moduleComponents.end();
+ moduleComponentIter++)
+ {
+ moduleComponentIter->second->resolveWires();
+ }
+
+ // Resolve EntryPoint wires
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.h
new file mode 100644
index 0000000000..b3c59898eb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Subsystem.h
@@ -0,0 +1,131 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_h
+#define tuscany_sca_model_h
+
+#include <string>
+using std::string;
+#include <map>
+using std::map;
+
+#include "tuscany/sca/model/Module.h"
+#include "tuscany/sca/model/EntryPoint.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Information about a subsystem.
+ */
+ class Subsystem {
+ public:
+ /**
+ * Constructor.
+ * @param name The name of the subsystem.
+ */
+ Subsystem(const std::string& name);
+
+ /**
+ * Destructor.
+ */
+ virtual ~Subsystem();
+
+ /**
+ * Add a new module component to the subsystem.
+ * @param name The name of the module component.
+ * @param moduleName The name of the module.
+ * @return The new Module added to the subsystem.
+ */
+ Module* addModuleComponent(const std::string& name, const std::string& moduleName);
+
+ /**
+ * Find a module by module name.
+ * @param moduleName The name of the module to be found.
+ * @return The Module that was found, or 0 if not found.
+ */
+ Module* findModule(const std::string& moduleName);
+
+ /**
+ * Find a module by the module component name.
+ * @param moduleComponentName The module component name to be used to find
+ * the module.
+ * @return The Module that was found, or 0 if not found.
+ */
+ Module* findModuleByComponentName(const std::string& moduleComponentName);
+
+ /**
+ * Get the default module set for this subsystem.
+ * @return The default module.
+ */
+ Module* getDefaultModule();
+
+ /**
+ * Add an new entry point to the subsystem.
+ * @param name The name of the entry point.
+ * @return The new EntryPoint added to the subsystem.
+ */
+ EntryPoint* addEntryPoint(const std::string& name);
+
+ /**
+ * Find an entry point by name.
+ * @param name The name of the entry point to be found.
+ * @return The EntryPoint that was found, or 0 if not found.
+ */
+ EntryPoint* findEntryPoint(const std::string& name);
+
+ /**
+ * Return the name of the subsystem.
+ * @return The name.
+ */
+ const std::string& getName() {return name;}
+
+ /**
+ * Resolve all the wires configured in all the modules in this
+ * subsystem.
+ */
+ void resolveWires();
+
+ private:
+ /**
+ * The name of the subsystem.
+ */
+ std::string name;
+
+ typedef std::map<std::string, Module*> MODULECOMPONENT_MAP;
+ /**
+ * A map by module component name of modules.
+ */
+ MODULECOMPONENT_MAP moduleComponents;
+
+ typedef map<string, EntryPoint*> ENTRYPOINT_MAP;
+ /**
+ * A map of entry points defined in this subsystem.
+ */
+ ENTRYPOINT_MAP entryPoints;
+ };
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.cpp
new file mode 100644
index 0000000000..dfc4a21b1c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.cpp
@@ -0,0 +1,118 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/System.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+ // ============
+ // Constructor
+ // ============
+ System::System()
+ {
+ LOGENTRY(1, "System::constructor");
+
+
+ LOGEXIT(1, "System::constructor");
+ }
+
+ System::~System()
+ {
+ SUBSYSTEM_MAP::iterator subsystemsIter;
+ for (subsystemsIter = subsystemMap.begin();
+ subsystemsIter != subsystemMap.end();
+ subsystemsIter++ )
+ {
+ delete subsystemsIter->second;
+ }
+ }
+
+ // =================================
+ // Add a new subsystem to the system
+ // =================================
+ Subsystem* System::addSubsystem(const std::string& name)
+ {
+ LOGENTRY(1, "System::addSubsystem");
+
+ Subsystem* newSubsystem = new Subsystem(name);
+
+ subsystemMap[name] = newSubsystem;
+
+ LOGEXIT(1, "System::addSubsystem");
+
+ return newSubsystem;
+ }
+
+ // ====================================================================
+ // Get a map of all the moduleComponents that use a particular module
+ // ====================================================================
+ MODULE_LIST System::findModules(const std::string& name)
+ {
+ LOGENTRY(1, "System::findModules");
+ MODULE_LIST foundModules;
+
+ SUBSYSTEM_MAP::iterator subsystemsIter;
+ for (subsystemsIter = subsystemMap.begin();
+ subsystemsIter != subsystemMap.end(); subsystemsIter++ ) {
+ LOGINFO_1(2, "System::findModules: Found subsystem: %s", subsystemsIter->second->getName().c_str());
+ // In each subsystem, find module components with this module defined
+
+ Module* module = subsystemsIter->second->findModule(name);
+ if (module)
+ {
+ LOGINFO_1(2, "System::findModules: Found module: %s", module->getName().c_str());
+ foundModules.push_back(module);
+ }
+ }
+ LOGEXIT(1, "System::findModules");
+
+ return foundModules;
+ }
+
+
+ // ====================================================================
+ // Get a map of all the moduleComponents that use a particular module
+ // ====================================================================
+ Subsystem* System::findSubsystem(const std::string& subsystem)
+ {
+ return subsystemMap[subsystem];
+ }
+
+ void System::resolveWires()
+ {
+ SUBSYSTEM_MAP::iterator subsystemsIter;
+ for (subsystemsIter = subsystemMap.begin();
+ subsystemsIter != subsystemMap.end();
+ subsystemsIter++ )
+ {
+ subsystemsIter->second->resolveWires();
+ }
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.h
new file mode 100644
index 0000000000..a0f62ce67a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/System.h
@@ -0,0 +1,89 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_system_h
+#define tuscany_sca_model_system_h
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "tuscany/sca/model/Subsystem.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ typedef std::vector<Module*> MODULE_LIST;
+
+ /**
+ * The root of the runtime model supported by a Tuscany runtime.
+ */
+ class System {
+ public:
+ System();
+ virtual ~System();
+
+ /**
+ * Add a new subsystem to the system.
+ * @param subsystemName The name of the new subsystem to add.
+ * @return The new Subsystem added to the system.
+ */
+ Subsystem* addSubsystem(const std::string& subsystemName);
+
+ /**
+ * Find subsystem by name.
+ * @param subsystemName The name of the subsystem to be found.
+ * @return The Subsystem found, or 0 if not found.
+ */
+ Subsystem* findSubsystem(const std::string& subsystemName);
+
+ typedef std::vector<Module*> MODULE_LIST;
+
+ /**
+ * Return a vector of all the modules with a given module name.
+ * @param moduleName The name of the module to find
+ * @return A vector of all the times the module appears in the
+ * system. It can be more than once because the same module name
+ * is used by more than one module component.
+ */
+ MODULE_LIST findModules(const std::string& moduleName);
+
+ /**
+ * Resolve all the wires defined in the system.
+ */
+ void resolveWires();
+
+ private:
+
+ typedef std::map<std::string, Subsystem*> SUBSYSTEM_MAP;
+
+ /**
+ * Map by name of subsystems.
+ */
+ SUBSYSTEM_MAP subsystemMap;
+ };
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_system_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.cpp
new file mode 100644
index 0000000000..85cb7482bd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.cpp
@@ -0,0 +1,127 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/WSBinding.h"
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+
+ namespace model
+ {
+
+ // Constructor
+ WSBinding::WSBinding(const string& uri, const string& port)
+ : Binding(uri), port(port)
+ {
+
+ // Port is of the form: <wsdl-namepace-uri>#wsdl.endpoint(<service-name>/<port-name>)
+ string::size_type hash = port.find("#");
+ if (hash != string::npos)
+ {
+ // Found a hash
+
+ // Namepace is the part before the #
+ wsdlNamespaceURL = port.substr(0, hash);
+
+
+ if ( (hash+1) < port.length())
+ {
+ // Check the next part is wsdl.endpoint(
+ int ending = hash+15;
+ string check = port.substr(hash+1, 14);
+ if (check.compare("wsdl.endpoint(") == 0)
+ {
+ // Find the matching )
+ int endBracket = port.find(")",ending);
+ if (endBracket-1 > ending+1)
+ {
+ string serviceAndPort = port.substr(ending, endBracket-ending);
+ // Look for a '/'
+ string::size_type slash = serviceAndPort.find("/");
+ if (slash != string::npos)
+ {
+ serviceName = serviceAndPort.substr(0, slash);
+
+ if ( (slash+1) < serviceAndPort.length())
+ {
+ portName = serviceAndPort.substr(slash+1);
+ }
+ else
+ {
+ portName = "";
+ }
+
+ }
+ else
+ {
+ // No '/' so all of it is the service name
+ serviceName = serviceAndPort;
+ portName = "";
+
+ }
+ }
+ else
+ {
+ // Nothing between the ()
+ serviceName = "";
+ portName = "";
+ }
+ }
+ else
+ {
+ // not the correct characters after the #, ignore the rest
+ serviceName = "";
+ portName = "";
+ }
+
+ }
+ else
+ {
+ // Nothing after the hash
+ serviceName = "";
+ portName = "";
+ }
+ }
+ else
+ {
+ // No hash at all
+ wsdlNamespaceURL = port;
+ serviceName = "";
+ portName = "";
+ }
+
+
+
+
+
+
+ }
+
+ WSBinding::~WSBinding()
+ {
+ }
+
+ } // End namespace model
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.h
new file mode 100644
index 0000000000..e7963d205b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WSBinding.h
@@ -0,0 +1,106 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_wsbinding_h
+#define tuscany_sca_model_wsbinding_h
+
+#include "tuscany/sca/model/Binding.h"
+
+#include <string>
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Information about a web service binding for an entry point or an
+ * external service.
+ */
+ class WSBinding : public Binding
+ {
+ public:
+ /**
+ * Constructor.
+ * @param uri The uri of the binding.
+ * @param port The definition of the port to which the entrypoint
+ * or external service is to be bound. This is of the form
+ * "namespace"#endpoint("service"/"port")
+ */
+ WSBinding(const string&uri, const string& port);
+
+ /**
+ * Destructor.
+ */
+ virtual ~WSBinding();
+
+ /**
+ * Return the type of the binding.
+ * @return Always returns WS.
+ */
+ virtual Type getBindingType() {return WS;};
+
+ /**
+ * Return the part of the port definition describing the wsdl
+ * namespace.
+ * @return The wsdl namespace.
+ */
+ string getWSDLNamespaceURL() {return wsdlNamespaceURL;};
+
+ /**
+ * Return the service part of the port definition.
+ * @return The service to use.
+ */
+ string getServiceName() {return serviceName;};
+
+ /**
+ * Return the port name part of the port definition.
+ * @return The port name to use.
+ */
+ string getPortName() {return portName;};
+
+ private:
+ /**
+ * The full port string.
+ */
+ string port;
+
+ /**
+ * Namespace from the port.
+ */
+ string wsdlNamespaceURL;
+
+ /**
+ * Service name from the port.
+ */
+ string serviceName;
+
+ /**
+ * Port name from the port.
+ */
+ string portName;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_wsbinding_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.cpp
new file mode 100644
index 0000000000..6c1b14940f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.cpp
@@ -0,0 +1,46 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/model/Wire.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+ // Constructor
+ Wire::Wire(const std::string& source, const std::string& targ)
+ {
+ Utils::tokeniseUri(source, sourceComponent, sourceReference);
+ target = targ;
+ }
+
+ Wire::~Wire()
+ {
+ }
+
+ } // End namespace model
+
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.h
new file mode 100644
index 0000000000..b126137118
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wire.h
@@ -0,0 +1,91 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_wire_h
+#define tuscany_sca_model_wire_h
+
+#include <string>
+using std::string;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Information about a wire in the model.
+ */
+ class Wire
+ {
+ public:
+ /**
+ * Constructor.
+ * @param source The source of the wire. Either the component and
+ * reference name (optional) or an entry point.
+ * @param target The target of the wire. Either a component and service
+ * service name (optional) or an external sevice.
+ */
+ Wire(const std::string& source, const std::string& target);
+
+ /**
+ * Destructor.
+ */
+ virtual ~Wire();
+
+ /**
+ * Get the component name defined by the source of the wire.
+ * @return The component name which is the source of the wire.
+ */
+ const std::string& getSourceComponent() {return sourceComponent;}
+
+ /**
+ * Get the reference name defined by the source of the wire.
+ * @return The reference name which is the source of the wire.
+ */
+ const std::string& getSourceReference() {return sourceReference;}
+
+ /**
+ * Get the target uri defined by the target of the wire.
+ * @return The target uri which is the source of the wire.
+ */
+ const std::string& getTarget() {return target;}
+ private:
+ /**
+ * The source component of the wire.
+ */
+ string sourceComponent;
+
+ /**
+ * The source reference of the wire.
+ */
+ string sourceReference;
+
+ /**
+ * The target uri of the wire.
+ */
+ string target;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_wire_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.cpp
new file mode 100644
index 0000000000..a35b07f5fe
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.cpp
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/WireTarget.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+ // Constructor
+ WireTarget::WireTarget(const std::string& targetName)
+ : name(targetName)
+ {
+ }
+
+ WireTarget::~WireTarget()
+ {
+ }
+
+ void WireTarget::setInterface(Interface* interf)
+ {
+ iface = interf;
+ }
+
+ } // End namespace model
+
+
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.h
new file mode 100644
index 0000000000..312d20a704
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WireTarget.h
@@ -0,0 +1,106 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_wiretarget_h
+#define tuscany_sca_model_wiretarget_h
+
+#include <string>
+using std::string;
+
+#include "tuscany/sca/model/Interface.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+ /**
+ * Represents the target of a wire. This could be a service on a
+ * component or an external service.
+ */
+ class WireTarget
+ {
+ public:
+ /**
+ * Supported types of wire target.
+ */
+ enum Type
+ {
+ ComponentServiceType,
+ ExternalServiceType
+ };
+
+ /**
+ * Constructor.
+ * @param name The name of the wire target.
+ */
+ WireTarget(const std::string& name);
+
+ /**
+ * Destructor.
+ */
+ virtual ~WireTarget();
+
+ /**
+ * Return the name of the wire target.
+ */
+ string getName() {return name;}
+
+ /**
+ * Get the type of the wire target.
+ * @return Depends on the type of the wire target.
+ */
+ virtual Type getServiceType() = 0;
+
+ /**
+ * Set the interface describing the wire target.
+ * @param iface The interface.
+ */
+ void setInterface(Interface* iface);
+
+ /**
+ * Get the interface describing the wire target.
+ * @return The interface.
+ */
+ Interface* getInterface() {return iface;}
+
+ private:
+ /**
+ * Name of the wire target (service name or external service name)
+ */
+ string name;
+
+ /**
+ * Type of the service.
+ */
+ Type serviceType;
+
+ /**
+ * Interface describing the wire target.
+ */
+ Interface* iface;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_wiretarget_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.cpp
new file mode 100644
index 0000000000..d2ca9e96c1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.cpp
@@ -0,0 +1,356 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/model/Wsdl.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Exceptions.h"
+
+using namespace tuscany::sca;
+
+using namespace commonj::sdo;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+
+ // Constructor
+ Wsdl::Wsdl(DataObjectPtr wsdlModel)
+ : wsdlModel(wsdlModel)
+ {
+ LOGENTRY(1, "Wsdl::constructor");
+
+ // Trace
+ //Utils::printDO(wsdlModel);
+
+
+
+ LOGEXIT(1, "Wsdl::constructor");
+ }
+
+ Wsdl::~Wsdl()
+ {
+ }
+
+
+ ///
+ /// The namespace of the service and other definitions defined in this wsdl definition
+ string Wsdl::getNamespace()
+ {
+
+ return wsdlModel->getCString("targetNamespace");
+
+ }
+
+ ///
+ /// Find the operation defined in this wsdl
+ ///
+ const WsdlOperation& Wsdl::findOperation(const string& serviceName,
+ const string& portName,
+ const string& operationName)
+ {
+ string message;
+
+ string operationKey = serviceName+"#"+portName+"#"+operationName;
+ OperationMap::iterator iter = operationMap.find(operationKey);
+ if (iter != operationMap.end())
+ {
+ return iter->second;
+ }
+
+ // Find the service
+ DataObjectPtr service = findService(serviceName);
+ if (!service)
+ {
+ // Service not found
+ message = "Unable to find service ";
+ message = message + serviceName;
+ message = message + " in the WSDL definition";
+ throw SystemConfigurationException(message.c_str());
+ }
+ else
+ {
+
+
+ // Found the service
+ DataObjectList& portList = service->getList("port");
+ for (int j=0; j<portList.size();j++)
+ {
+ string portListName(portList[j]->getCString("name"));
+ if (portListName.compare(portName) == 0)
+ {
+ // found port
+ // Add address at this point
+ string targetAddress(portList[j]->getCString("address/location"));
+
+ // find operation by traversing the binding, portType then operation
+ string wsBindingName(portList[j]->getCString("binding"));
+
+ DataObjectPtr wsBinding = findBinding(wsBindingName);
+ if (!wsBinding)
+ {
+ message = "Unable to find binding ";
+ message = message + wsBindingName;
+ message = message + " in the WSDL definition";
+ throw SystemConfigurationException(message.c_str());
+ }
+
+
+ string soapAction;
+ bool documentStyle = false;
+ bool useEncoded = false;
+ WsdlOperation::soapVersion soapVer = WsdlOperation::SOAP11;
+
+ // Find the binding operation
+ DataObjectList& bindingOperationList = wsBinding->getList("operation");
+ for (int i=0; i<bindingOperationList.size(); i++)
+ {
+ string name(bindingOperationList[i]->getCString("name"));
+
+ if (name.compare(operationName) == 0)
+ {
+ DataObjectPtr op = bindingOperationList[i]->getDataObject("operation");
+ string opType = op->getType().getURI();
+ if (opType == "http://schemas.xmlsoap.org/wsdl/soap12/")
+ {
+ soapVer = WsdlOperation::SOAP12;
+ }
+ // Get the soapAction
+ soapAction = bindingOperationList[i]->getCString("operation/soapAction");
+
+ // Get the style
+ string style = bindingOperationList[i]->getCString("operation/style");
+ if (style == "")
+ {
+ style = wsBinding->getCString("binding/style");
+ }
+ if (style == "document")
+ {
+ documentStyle = true;
+ }
+
+ // get the use
+ string use = bindingOperationList[i]->getCString("input/body/use");
+ if (style == "encoded")
+ {
+ useEncoded = true;
+ }
+ }
+ }
+
+
+ // TODO - get the style from the binding or operation????
+
+ // Found the binding, get the portType
+ string wsPortTypeName(wsBinding->getCString("type"));
+ DataObjectPtr wsPortType = findPortType(wsPortTypeName);
+ if (!wsPortType)
+ {
+ message = "Unable to find PortType ";
+ message = message + wsPortTypeName;
+ message = message + " in the WSDL definition";
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ //Utils::printDO(wsPortType);
+
+ // Found the portType, find the operation
+ DataObjectList& operationList = wsPortType->getList("operation");
+ for (int k=0; k< operationList.size(); k++)
+ {
+ string opName(operationList[k]->getCString("name"));
+ if( opName.compare(operationName) == 0)
+ {
+ // Found the operation
+
+ // Find the type of the request message
+ string inputMessageType = string(operationList[k]->getCString("input/message"));
+
+ DataObjectPtr wsMessageIn = findMessage(inputMessageType);
+ if (!wsMessageIn)
+ {
+ message = "Unable to find message ";
+ message = message + inputMessageType;
+ message = message + " in the WSDL definition";
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ string requestType(wsMessageIn->getList("part")[0]->getCString("element"));
+
+ // Find the type of the response message
+ string outputMessageType = string(operationList[k]->getCString("output/message"));
+
+ DataObjectPtr wsMessageOut = findMessage(outputMessageType);
+ if (!wsMessageOut)
+ {
+ message = "Unable to find message ";
+ message = message + outputMessageType;
+ message = message + " in the WSDL definition";
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ string responseType(wsMessageOut->getList("part")[0]->getCString("element"));
+
+ WsdlOperation& wsdlOp = operationMap[operationKey];
+ wsdlOp.setOperationName(operationName);
+ wsdlOp.setSoapAction(soapAction);
+ wsdlOp.setEndpoint(targetAddress);
+ wsdlOp.setSoapVersion(soapVer);
+ wsdlOp.setDocumentStyle(documentStyle);
+ wsdlOp.setEncoded(useEncoded);
+ wsdlOp.setInputType(requestType);
+ wsdlOp.setOutputType(responseType);
+ return wsdlOp;
+ }
+
+ }
+
+ message = "Unable to find Operation ";
+ message = message + operationName;
+ message = message + " in the WSDL definition";
+ throw SystemConfigurationException(message.c_str());
+ }
+ }
+ // cannot find the port
+ message = "Unable to find port ";
+ message = message + portName;
+ message = message + " in the WSDL definition";
+ throw SystemConfigurationException(message.c_str());
+ }
+
+ }
+
+ ///
+ /// Find a service
+ ///
+ DataObjectPtr Wsdl::findService(const string& serviceName)
+ {
+ DataObjectPtr service = 0;
+
+
+ // Find the binding
+ DataObjectList& serviceList = wsdlModel->getList("service");
+ for (int i=0; i<serviceList.size(); i++)
+ {
+ string name(serviceList[i]->getCString("name"));
+
+ if (name.compare(serviceName) == 0)
+ {
+ return serviceList[i];
+ }
+ }
+
+ return service;
+ }
+
+
+ ///
+ /// Find a named binding
+ ///
+ DataObjectPtr Wsdl::findBinding(const string& bindingName)
+ {
+ DataObjectPtr binding = 0;
+ string uri;
+ string name;
+
+
+ //Utils::tokeniseQName(bindingName, uri, name);
+ Utils::rTokeniseString(":", bindingName, uri, name);
+
+
+ // Find the binding
+ DataObjectList& bindingList = wsdlModel->getList("binding");
+ for (int i=0; i<bindingList.size(); i++)
+ {
+ string nameBinding(bindingList[i]->getCString("name"));
+
+ if (nameBinding.compare(name) == 0)
+ {
+ return bindingList[i];
+ }
+ }
+
+ return binding;
+ }
+
+ ///
+ /// Find a named portType
+ ///
+ DataObjectPtr Wsdl::findPortType(const string& portTypeName)
+ {
+ DataObjectPtr portType = 0;
+ string uri;
+ string name;
+
+
+ // Utils::tokeniseQName(portTypeName, uri, name);
+ Utils::rTokeniseString(":", portTypeName, uri, name);
+
+
+ // Find the binding
+ DataObjectList& portTypeList = wsdlModel->getList("portType");
+ for (int i=0; i<portTypeList.size(); i++)
+ {
+ string namePortType(portTypeList[i]->getCString("name"));
+
+ if (namePortType.compare(name) == 0)
+ {
+ return portTypeList[i];
+ }
+ }
+
+ return portType;
+ }
+
+ ///
+ /// Find a named message
+ ///
+ DataObjectPtr Wsdl::findMessage(const string& messageName)
+ {
+ DataObjectPtr message = 0;
+ string uri;
+ string name;
+
+
+ // Utils::tokeniseQName(messageName, uri, name);
+ Utils::rTokeniseString(":", messageName, uri, name);
+
+
+ // Find the binding
+ DataObjectList& messageList = wsdlModel->getList("message");
+ for (int i=0; i<messageList.size(); i++)
+ {
+ string nameMessage(messageList[i]->getCString("name"));
+
+ if (nameMessage.compare(name) == 0)
+ {
+ return messageList[i];
+ }
+ }
+
+ return message;
+ }
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.h
new file mode 100644
index 0000000000..70a07996cc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/Wsdl.h
@@ -0,0 +1,129 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_wsdl_h
+#define tuscany_sca_model_wsdl_h
+
+#include "osoa/sca/export.h"
+#include <string>
+using std::string;
+
+#include "tuscany/sca/model/WsdlOperation.h"
+
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+
+#include <map>
+using std::map;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+ /**
+ * Holds information about a WSDL definition loaded into the runtime.
+ */
+ class Wsdl
+ {
+ public:
+ /**
+ * Constructor.
+ * @param wsdlModel The data object representing the WSDL document
+ * defining a web service.
+ */
+ Wsdl(DataObjectPtr wsdlModel);
+
+ /**
+ * Destructor.
+ */
+ ~Wsdl();
+
+
+ /**
+ * Returns the target namespace of the WSDL definitions.
+ * @return The target namespace.
+ */
+ string getNamespace(void);
+
+ /**
+ * Find an operation in the WSDL definitions.
+ * @param serviceName The name of the service on which this
+ * operation is defined.
+ * @param portName The name of the port in the service to
+ * use.
+ * @param operationName The name of the operation to find.
+ * @return The operation if found. Exception thrown if not found.
+ */
+ const WsdlOperation& findOperation(const string& serviceName,
+ const string& portName,
+ const string& operationName);
+
+ private:
+
+ /**
+ * Find a service in the wsdl definition.
+ * @param serviceName The name of the service.
+ * @return A data object describing the service if found, otherwise
+ * a 0 if not found.
+ */
+ DataObjectPtr findService(const string& serviceName);
+
+ /**
+ * Find a binding in the wsdl definition.
+ * @param bindingName The name of the binding to find.
+ * @return A data object describing the binding if found, otherwise
+ * a 0 if not found.
+ */
+ DataObjectPtr findBinding(const string& bindingName);
+
+ /**
+ * Find a portType in the wsdl definition.
+ * @param portTypeName The name of the portType.
+ * @return A data object describing the portType if found, otherwise
+ * a 0 if not found.
+ */
+ DataObjectPtr findPortType(const string& portTypeName);
+
+ /**
+ * Find a message in the wsdl definition.
+ * @param messageName The name of the message.
+ * @return A data object describing the message if found, otherwise
+ * a 0 if not found.
+ */
+ DataObjectPtr findMessage(const string& messageName);
+
+
+ /**
+ * The data object representation of the WSDL document.
+ */
+ DataObjectPtr wsdlModel;
+
+ typedef map<string, WsdlOperation> OperationMap;
+ OperationMap operationMap;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_wsdl_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.cpp
new file mode 100644
index 0000000000..40964ea20e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.cpp
@@ -0,0 +1,56 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/model/WsdlOperation.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Utils.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+
+ // Constructor
+ WsdlOperation::WsdlOperation()
+ {
+ LOGENTRY(1, "WsdlOperation::constructor");
+ LOGEXIT(1, "WsdlOperation::constructor");
+ }
+
+ WsdlOperation::~WsdlOperation()
+ {
+ }
+
+
+ void WsdlOperation::setInputType(const string& inputType)
+ {
+ Utils::tokeniseQName(inputType, inputTypeUri, inputTypeName);
+ }
+
+ void WsdlOperation::setOutputType(const string& outputType)
+ {
+ Utils::tokeniseQName(outputType, outputTypeUri, outputTypeName);
+ }
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.h
new file mode 100644
index 0000000000..9fe22b6f57
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/model/WsdlOperation.h
@@ -0,0 +1,141 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_model_wsdlOperation_h
+#define tuscany_sca_model_wsdlOperation_h
+#include "osoa/sca/export.h"
+#include <string>
+using std::string;
+
+
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace model
+ {
+
+ /**
+ * Represents a single.,bound WSDL defined operation.
+ * This class includes information from the soapBinding
+ * in addition to the WSDL definition of the operation.
+ */
+ class WsdlOperation
+ {
+ public:
+ /**
+ * Constructor.
+ * @param operation The name of the operation.
+ * @param soapAction The soapAction associated with this operation
+ * in the SOAP binding of the operation.
+ * @param endpoint The endpoint address of the operation.
+ * @param responseName The name of the response message.
+ */
+ WsdlOperation();
+
+ /**
+ * Destructor.
+ */
+ ~WsdlOperation();
+
+ /**
+ * Return the name of the operation for use when serializing an
+ * outgoing message.
+ * @return The name of the element in the request message.
+ */
+ const string& getOperationName() const {return operationName;}
+ void setOperationName(const string& opName) {operationName = opName;}
+
+ /**
+ * The soap action string for this operation.
+ * @return The soap action.
+ */
+ const string& getSoapAction() const {return soapAction;}
+ void setSoapAction(const string& soapAct) {soapAction = soapAct;}
+
+ /**
+ * Return the endpoint address for the target web service.
+ * @return The endpoint address.
+ */
+ const string& getEndpoint() const {return endpoint;}
+ void setEndpoint(const string& ep) {endpoint = ep;}
+
+ enum soapVersion
+ {
+ SOAP11,
+ SOAP12
+ };
+
+ void setSoapVersion(soapVersion ver) {soapVer = ver;}
+ soapVersion getSoapVersion() const {return soapVer;}
+
+ void setDocumentStyle(bool docStyle) {documentStyle = docStyle;}
+ bool isDocumentStyle() const {return documentStyle;}
+
+ void setEncoded(bool enc) {encoded = enc;}
+ bool isEncoded() const {return encoded;}
+
+
+ void setInputType(const string& inputType);
+ const string& getInputTypeUri() const {return inputTypeUri;}
+ const string& getInputTypeName() const {return inputTypeName;}
+ void setOutputType(const string& outputType);
+ const string& getOutputTypeUri() const {return outputTypeUri;}
+ const string& getOutputTypeName() const {return outputTypeName;}
+
+ private:
+ /**
+ * The name of the operation for use when serializing an
+ * outgoing message.
+ */
+ string operationName;
+
+ /**
+ * The soap action string for this operation.
+ */
+ string soapAction;
+
+ /**
+ * The endpoint address of the target web service.
+ */
+ string endpoint;
+
+ bool documentStyle;
+ bool encoded;
+ soapVersion soapVer;
+
+ string inputTypeUri;
+ string inputTypeName;
+
+ string outputTypeUri;
+ string outputTypeName;
+
+ DataObjectPtr inputMessage;
+ DataObjectPtr outputMessage;
+ };
+
+ } // End namespace model
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_model_wsdlOperation_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.cpp
new file mode 100644
index 0000000000..3ea2212f7c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.cpp
@@ -0,0 +1,43 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/DefaultLogWriter.h"
+#include <iostream>
+using namespace std;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ DefaultLogWriter::~DefaultLogWriter()
+ {
+ }
+
+ void DefaultLogWriter::log(int level, const char* msg)
+ {
+ for (int i=0; i < level; i++)
+ {
+ cout << " ";
+ }
+ cout << msg <<endl;
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.h
new file mode 100644
index 0000000000..4d45579907
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/DefaultLogWriter.h
@@ -0,0 +1,46 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_defaultlogwriter_h
+#define tuscany_sca_util_defaultlogwriter_h
+
+#include "tuscany/sca/util/LogWriter.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Log writer to write out to standard out.
+ */
+ class DefaultLogWriter : public LogWriter
+ {
+ public:
+ virtual ~DefaultLogWriter();
+
+ /**
+ * Will write to the console.
+ * See LogWriter#log.
+ */
+ virtual void log(int level, const char* msg);
+ };
+
+ } // End namespace sca
+} // End namespace tuscany
+#endif // tuscany_sca_util_defaultlogwriter_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Exceptions.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Exceptions.h
new file mode 100644
index 0000000000..daad31f59f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Exceptions.h
@@ -0,0 +1,48 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_exceptions_h
+#define tuscany_sca_util_exceptions_h
+
+#include "osoa/sca/ServiceRuntimeException.h"
+using osoa::sca::ServiceRuntimeException;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Indicates a problem in the consistency of the SCA model provided to the
+ * Tuscany runtime.
+ */
+ class SCA_API SystemConfigurationException: public ServiceRuntimeException
+ {
+ public:
+ SystemConfigurationException(const char* msg)
+ : ServiceRuntimeException("SystemConfigurationException", Severe,
+ msg)
+ {
+ }
+ private:
+ };
+
+
+ } // End namespace sca
+} // End namespace tuscany
+#endif // tuscany_sca_util_exceptions_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.cpp
new file mode 100644
index 0000000000..33e33d1aad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.cpp
@@ -0,0 +1,221 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "tuscany/sca/util/File.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include <iostream>
+
+#include <string>
+#include <iostream>
+using namespace std;
+
+#if defined(WIN32) || defined (_WINDOWS)
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#endif
+
+namespace tuscany
+{
+ namespace sca
+ {
+ File::File(const string& dir, const string& file)
+ : directory(dir), fileName(file)
+ {
+ }
+ File::~File()
+ {
+ }
+
+
+ Files::Files(const string& rootDir, const string& pattern, bool subdirectories)
+ : rootDirectory(rootDir)
+ {
+ findFiles(rootDirectory, pattern, subdirectories);
+ }
+
+ Files::~Files()
+ {
+ }
+
+ unsigned int Files::size()
+ {
+ return files.size();
+ }
+
+ const File& Files::operator[] (unsigned int index)
+ {
+ if (size() <= index)
+ {
+ throw ServiceRuntimeException("Files::operator[] index out of bounds");
+ }
+
+ FILES::iterator iter = files.begin();
+ for (unsigned int i=0; i<index; i++)
+ {
+ iter++;
+ }
+
+ return *iter;
+ }
+
+
+ void Files::findFiles(const string& rootDir, const string& pattern, bool subdirectories)
+ {
+
+#if defined(WIN32) || defined (_WINDOWS)
+ char currentDir[ _MAX_FNAME];
+
+
+ GetCurrentDirectory(_MAX_FNAME, currentDir);
+
+ // Set current directory, from which to search.
+ if (!SetCurrentDirectory(rootDir.c_str()))
+ {
+ cout << "Unable to set current directory to: " << rootDir.c_str() << endl;
+ return;
+ }
+ char fullDirname[ _MAX_FNAME];
+ GetCurrentDirectory(_MAX_FNAME, fullDirname);
+
+ // First, look for all files in this directory that meet the pattern
+ char search[ _MAX_FNAME];
+ strcpy(search, pattern.c_str());
+
+ // Find the first file in the directory
+ WIN32_FIND_DATA data;
+ HANDLE searchHandle = FindFirstFile(search, &data);
+
+ int more = TRUE;
+ if (searchHandle != INVALID_HANDLE_VALUE)
+ {
+ // Found some matching files, so call the function with the details of each one
+ while (more)
+ {
+ // Skip over directories
+ if (!(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
+ {
+ // Add the file to our list
+ files.push_back(File(fullDirname, data.cFileName));
+ }
+
+ more = FindNextFile(searchHandle, &data);
+ }
+ }
+
+
+ if (!subdirectories)
+ return;
+
+ // Now recurse down all the directories
+ // Find the first file in the directory
+ searchHandle = FindFirstFile( "*.*", &data);
+ more = TRUE;
+
+ if (searchHandle != INVALID_HANDLE_VALUE)
+ {
+ // Found some files in the directory.
+ while (more)
+ {
+ // If directory
+ if (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ {
+ // Skip over '.' and '..'
+ if ((strcmp(data.cFileName, ".")) && (strcmp("..", data.cFileName)))
+ {
+ // Recurse
+ findFiles(data.cFileName, pattern, subdirectories);
+ }
+ }
+
+ more = FindNextFile(searchHandle, &data);
+ }
+ }
+ SetCurrentDirectory(currentDir);
+#else
+ // Linux
+ //char fullDirname[MAX_PATH];
+ //getcwd(fullDirname, MAX_PATH);
+
+ DIR* root = opendir(rootDir.c_str());
+ if (!root)
+ {
+ cout << "Unable to open directory: " << rootDir.c_str() << endl;
+ return;
+ }
+
+ bool exactMatch = true;
+ string token1, token2;
+ if (pattern.find('*') != string::npos)
+ {
+ exactMatch = false;
+ Utils::tokeniseString("*", pattern, token1, token2);
+ }
+
+ struct dirent *entry=0;
+ while ((entry = readdir(root)))
+ {
+ string entryName = rootDir + "/" + entry->d_name;
+ struct stat statbuf;
+ if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
+ continue;
+ if (stat(entryName.c_str(), &statbuf) != 0)
+ {
+ perror("stat");
+ }
+ else
+ {
+ if (S_ISDIR(statbuf.st_mode))
+ {
+ if (subdirectories)
+ {
+ findFiles(entryName, pattern, subdirectories);
+ }
+ }
+ else if (S_ISREG(statbuf.st_mode))
+ {
+ string filename = entry->d_name;
+
+ if ((exactMatch && filename == pattern) ||
+ (!exactMatch &&
+ ((filename.find(token1) == 0)
+ && (filename.length() >= token2.length())
+ && (filename.rfind(token2) == (filename.length() - token2.length())) )))
+ {
+ // Add the file to our list
+ files.push_back(File(rootDir, filename));
+ }
+ }
+ }
+ }
+ closedir(root);
+#endif
+ }
+
+
+ } // End namespace sca
+} // End namespace tuscany
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.h
new file mode 100644
index 0000000000..f177401442
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/File.h
@@ -0,0 +1,133 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_file_h
+#define tuscany_sca_util_file_h
+
+#include <string>
+using std::string;
+#include <vector>
+using std::vector;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * File access methods. Provides platform independent
+ * access to files.
+ */
+ class File
+ {
+ public:
+ /**
+ * Constructor.
+ * @param directory Name of the directory in which this file is located.
+ * Either / or \ can be used interchangeably for separating directory elements.
+ * @param fileName Name of the file in the dirctory.
+ */
+ File(const string& directory, const string& fileName);
+
+ /**
+ * Destructor.
+ */
+ virtual ~File();
+
+ /**
+ * Return the directory in which this file is located.
+ * @return Name of the directory.
+ */
+ const string& getDirectory() const {return directory;}
+
+ /**
+ * Name of the file.
+ * @return Name of the file.
+ */
+ const string& getFileName() const {return fileName;}
+ private:
+ /**
+ * Name of the directory.
+ */
+ string directory;
+
+ /**
+ * Name of the file.
+ */
+ string fileName;
+ };
+
+ /**
+ * Collection of File to provide platform independent access
+ * to files and directories.
+ */
+ class Files
+ {
+ public:
+ /**
+ * Constructor which will search a given directory with a pattern and return a
+ * new instance of this collection class.
+ * @param rootDirectory The directory in which to search.
+ * @param pattern A pattern for matching file names. Can include * and ?.
+ * @param subdirectories Whether subdirectories should be searched too.
+ */
+ Files(const string& rootDirectory, const string& pattern, bool subdirectories = false);
+
+ /**
+ * Destructor.
+ */
+ virtual ~Files();
+
+ /**
+ * Return the number of files found.
+ * @return The number of files found.
+ */
+ unsigned int size();
+
+ /**
+ * Return a File at this position in the collection.
+ * @param index The index into the collection.
+ * @return The File at this index in the collection.
+ */
+ const File& operator[] (unsigned int index);
+
+ private:
+ /**
+ * Search the given directory and pattern for matching files.
+ * @param rootDirectory The directory in which to search.
+ * @param pattern A pattern for matching file names. Can include * and ?.
+ * @param subdirectories Whether subdirectories should be searched too.
+ */
+ void findFiles(const string& rootDirectory, const string& pattern, bool subdirectories);
+
+ /**
+ * The top level directory to search.
+ */
+ string rootDirectory;
+
+ typedef vector<File> FILES;
+
+ /**
+ * Vector of File.
+ */
+ FILES files;
+ };
+
+ } // End namespace sca
+} // End namespace tuscany
+#endif // tuscany_sca_util_file_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.cpp
new file mode 100644
index 0000000000..c3749c1be2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.cpp
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "tuscany/sca/util/FileLogWriter.h"
+#include <iostream>
+using namespace std;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ FileLogWriter::FileLogWriter(const char* logfile)
+ {
+ logFile.open(logfile, ios_base::app);
+ }
+
+ FileLogWriter::~FileLogWriter()
+ {
+ logFile.close();
+ }
+
+ void FileLogWriter::log(int level, const char* msg)
+ {
+ for (int i=0; i < level; i++)
+ {
+ logFile << " ";
+ }
+ logFile << msg <<endl;
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.h
new file mode 100644
index 0000000000..4f230a8f0b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/FileLogWriter.h
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef tuscany_sca_util_filelogwriter_h
+#define tuscany_sca_util_filelogwriter_h
+
+#include "tuscany/sca/util/LogWriter.h"
+#include <iostream>
+#include <fstream>
+using std::ofstream;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Log writer to write out to standard out.
+ */
+ class FileLogWriter : public LogWriter
+ {
+ public:
+ FileLogWriter(const char* logfile);
+
+ virtual ~FileLogWriter();
+
+ /**
+ * Will write to the console.
+ * See LogWriter#log.
+ */
+ virtual void log(int level, const char* msg);
+ private:
+ ofstream logFile;
+ };
+
+ } // End namespace sca
+} // End namespace tuscany
+#endif // tuscany_sca_util_defaultlogwriter_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.cpp
new file mode 100644
index 0000000000..0a50f396c7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.cpp
@@ -0,0 +1,122 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "tuscany/sca/util/Library.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/util/Logging.h"
+using namespace osoa::sca;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ Library::Library()
+ : hDLL(NULL)
+ {
+ }
+
+ Library::Library(const string& libraryName)
+ : name(libraryName), hDLL(NULL)
+ {
+ LOGINFO_1(3, "Library::construcor : %s", name.c_str());
+ load();
+ }
+
+ Library::Library(const Library& lib)
+ : name(lib.name), hDLL(NULL)
+ {
+ LOGINFO_1(3, "Library::copy constructor : %s", name.c_str());
+ if (lib.hDLL)
+ {
+ load();
+ }
+ }
+
+ Library& Library::operator=(const Library& lib)
+ {
+ LOGINFO_1(3, "Library::operator= : %s", name.c_str());
+ if (&lib != this)
+ {
+ unload();
+ name = lib.name;
+ load();
+ }
+ return *this;
+ }
+
+ Library::~Library()
+ {
+ LOGINFO_1(3, "Library::destructor: %s", name.c_str());
+ unload();
+ }
+
+
+ void Library::load()
+ {
+ LOGINFO_1(3, "Library::load : %s", name.c_str());
+ string msg;
+#if defined(WIN32) || defined (_WINDOWS)
+ hDLL = LoadLibrary(name.c_str());
+#else
+ hDLL = dlopen(name.c_str(), RTLD_NOW);
+#endif
+ if (hDLL == NULL)
+ {
+ LOGERROR_1(1, "Library::load: Unable to load library %s", name.c_str());
+ msg = "Unable to load dll: " + name;
+ throw ServiceRuntimeException(msg.c_str());
+ }
+ }
+
+ void Library::unload()
+ {
+ if (hDLL != NULL)
+ {
+ LOGINFO_1(3, "Library::unload : %s", name.c_str());
+#if defined(WIN32) || defined (_WINDOWS)
+ FreeLibrary(hDLL);
+#else
+ dlclose(hDLL);
+#endif
+ hDLL = NULL;
+ }
+ }
+
+ void* Library::getSymbol(const string& symbol)
+ {
+ LOGINFO_1(3, "Library::getSymbol : %s", symbol.c_str());
+ if (!hDLL)
+ {
+ return 0;
+ }
+#if defined(WIN32) || defined (_WINDOWS)
+ return GetProcAddress(hDLL, symbol.c_str());
+#else
+ return dlsym(hDLL, symbol.c_str());
+#endif
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.h
new file mode 100644
index 0000000000..69b2f5352a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Library.h
@@ -0,0 +1,97 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_library_h
+#define tuscany_sca_util_library_h
+
+
+#if defined(WIN32) || defined (_WINDOWS)
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <dlfcn.h>
+#endif
+
+#include <string>
+using std::string;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Information about shared libraries and methods to
+ * access these shared libraries.
+ */
+ class Library
+ {
+ public:
+ Library();
+
+ /**
+ * Constructor. Will load the library.
+ * @param libraryName Fully qualified name of the library.
+ */
+ Library(const string& libraryName);
+
+ /**
+ * Destructor. Will unload the library.
+ */
+ virtual ~Library();
+
+ Library(const Library& lib);
+ Library& operator=(const Library& lib);
+
+ /**
+ * Find an externalized symbol in the library.
+ * @param symbol The name of the symbol to be found.
+ * @return The pointer to the symbol if found, otherwise 0.
+ */
+ void* getSymbol(const string& symbol);
+ private:
+ /**
+ * Name of the library.
+ */
+ string name;
+
+ /**
+ * Handle to the loaded library.
+ */
+#if defined(WIN32) || defined (_WINDOWS)
+ HINSTANCE hDLL;
+#else
+ void* hDLL;
+#endif
+
+ /**
+ * Load the library.
+ */
+ void load();
+
+ /**
+ * Unload the library, if successfully loaded.
+ */
+ void unload();
+
+ };
+
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_util_library_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.cpp
new file mode 100644
index 0000000000..d77d1e4bfd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.cpp
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/LogWriter.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ LogWriter::~LogWriter()
+ {
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.h
new file mode 100644
index 0000000000..edb07c3684
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/LogWriter.h
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_logwriter_h
+#define tuscany_sca_util_logwriter_h
+
+#include "osoa/sca/export.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Abstract class for extending logging to other destinations.
+ */
+ class SCA_API LogWriter
+ {
+ public:
+ virtual ~LogWriter();
+
+ /**
+ * Log a message.
+ * @param level The level of logging for this message.
+ * @param msg The message to log.
+ */
+ virtual void log(int level, const char* msg) = 0;
+ };
+
+ } // End namespace sca
+} // End namespace tuscany
+#endif // tuscany_sca_util_logwriter_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.cpp
new file mode 100644
index 0000000000..0a888a69ef
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.cpp
@@ -0,0 +1,107 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include <iostream>
+#include <stdarg.h>
+
+#include "tuscany/sca/util/Logger.h"
+#include "tuscany/sca/util/DefaultLogWriter.h"
+#include "tuscany/sca/util/FileLogWriter.h"
+
+using namespace std;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ LogWriter* Logger::logWriter = getLogWriter();
+
+ LogWriter* Logger::getLogWriter()
+ {
+ if (logWriter == 0)
+ {
+ setLogWriter(0);
+ }
+ return logWriter;
+ }
+
+ void Logger::setLogWriter(LogWriter* writer)
+ {
+ if (logWriter != writer
+ && logWriter != 0)
+ {
+ delete logWriter;
+ }
+
+ if (writer == 0)
+ {
+ char* loggingVar = 0;
+ loggingVar = getenv("TUSCANY_SCACPP_LOG");
+ if (loggingVar == 0)
+ logWriter = new DefaultLogWriter;
+ else
+ logWriter = new FileLogWriter(loggingVar);
+ }
+ else
+ {
+ logWriter = writer;
+ }
+ }
+
+ int Logger::loggingLevel = setLogging();
+
+ int Logger::setLogging()
+ {
+ char* loggingVar = 0;
+ loggingVar = getenv("TUSCANY_SCACPP_LOGGING");
+ if (loggingVar == 0)
+ return 0;
+ else
+ return atoi(loggingVar);
+ }
+
+ void Logger::setLogging(int level)
+ {
+ loggingLevel = level;
+ }
+
+ void Logger::log(int level, const char* msg)
+ {
+ if (level <= loggingLevel)
+ {
+ logWriter->log(level, msg);
+ }
+ }
+
+ void Logger::logArgs(int level, const char* msg, ...)
+ {
+ if (level <= loggingLevel)
+ {
+ va_list variableArguments;
+ va_start(variableArguments, msg);
+ char messageBuffer[1024];
+ vsprintf(messageBuffer, msg, variableArguments);
+ logWriter->log(level, messageBuffer);
+ va_end(variableArguments);
+ }
+ }
+
+ } // End namespace sca
+} // End namespace tuscany
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.h
new file mode 100644
index 0000000000..be5e47e02a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logger.h
@@ -0,0 +1,89 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_logger_h
+#define tuscany_sca_util_logger_h
+
+#include "osoa/sca/export.h"
+#include "tuscany/sca/util/LogWriter.h"
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Provide a logging interface.
+ */
+ class Logger {
+
+ public:
+ /**
+ * Set the log writer to use.
+ * @param writer The writer to use for all subsequent logging.
+ */
+ SCA_API static void setLogWriter(LogWriter* writer);
+
+ /**
+ * Set or reset the logging level. Any message with a higher logging
+ * level than this value will be filtered (i.e. not shown).
+ * @param level The level of logging to use for all subsequent logging.
+ */
+ SCA_API static void setLogging(int level);
+
+ /**
+ * Log a message.
+ * @param level The log level of this message.
+ * @param msg The message to be logged.
+ */
+ SCA_API static void log(int level, const char* msg);
+
+ /**
+ * Log a message with variable arguments.
+ * @param level The log level of this message.
+ * @param msg The message to be logged. Must include template
+ * characters as described in printf.
+ * @param ... Variable arguments.
+ */
+ SCA_API static void logArgs(int level, const char* msg, ...);
+
+ /**
+ * The currently set logging level
+ */
+ SCA_API static int loggingLevel;
+
+ private:
+ /**
+ * The current log writer.
+ */
+ static LogWriter* logWriter;
+
+ /**
+ * Get the current log writer.
+ * @return The current log writer.
+ */
+ static LogWriter* getLogWriter();
+
+ /**
+ * Retrieves the logging level set as an environment variable.
+ */
+ static int setLogging();
+ };
+
+ } // End namespace sca
+} // End namespace tuscany
+#endif // tuscany_sca_util_logger_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logging.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logging.h
new file mode 100644
index 0000000000..7e3a1a84ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Logging.h
@@ -0,0 +1,57 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_logging_h
+#define tuscany_sca_util_logging_h
+
+#include "tuscany/sca/util/Logger.h"
+
+#define LOGENTRY(level, methodName) \
+if (Logger::loggingLevel >= level) \
+Logger::log(level, "Entering: " methodName);
+
+#define LOGEXIT(level, methodName) \
+if (Logger::loggingLevel >= level) \
+Logger::log(level, "Exiting: " methodName);
+
+#define LOGINFO(level, message) \
+if (Logger::loggingLevel >= level) \
+Logger::log(level, message);
+
+#define LOGINFO_1(level, message, arg1) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(level, message, arg1);
+
+#define LOGINFO_2(level, message, arg1, arg2) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(level, message, arg1, arg2);
+
+#define LOGERROR(level, message) \
+if (Logger::loggingLevel >= level) \
+Logger::log(level, message);
+
+#define LOGERROR_1(level, message, arg1) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(level, message, arg1);
+
+#define LOGERROR_2(level, message, arg1, arg2) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(level, message, arg1, arg2);
+
+#endif // tuscany_sca_util_logging_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.cpp
new file mode 100644
index 0000000000..6417ed3da4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.cpp
@@ -0,0 +1,215 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "tuscany/sca/util/Utils.h"
+
+using namespace std;
+using namespace commonj::sdo;
+namespace tuscany
+{
+ namespace sca
+ {
+ void Utils::tokeniseUri(const string& uri, string& token1, string& token2)
+ {
+ tokeniseString("/", uri, token1, token2);
+ }
+
+ void Utils::tokeniseQName(const string& qname, string& uri, string& name)
+ {
+ tokeniseString("#", qname, uri, name);
+ if (name == "")
+ {
+ name = uri;
+ uri = "";
+ }
+ }
+
+ void Utils::tokeniseString(
+ const string& separator,
+ const string& str,
+ string& token1,
+ string& token2)
+ {
+ string::size_type sep = str.find(separator);
+ if (sep != string::npos)
+ {
+ token1 = str.substr(0, sep);
+ if ( (sep+1) < str.length())
+ {
+ token2 = str.substr(sep+1);
+ }
+ else
+ {
+ token2 = "";
+ }
+ }
+ else
+ {
+ token1 = str;
+ token2 = "";
+ }
+ }
+
+ void Utils::rTokeniseString(
+ const string& separator,
+ const string& str,
+ string& token1,
+ string& token2)
+ {
+ string::size_type sep = str.rfind(separator);
+ if (sep != string::npos)
+ {
+ token1 = str.substr(0, sep);
+ if ( (sep+1) < str.length())
+ {
+ token2 = str.substr(sep+1);
+ }
+ else
+ {
+ token2 = "";
+ }
+ }
+ else
+ {
+ token1 = "";
+ token2 = str;
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // Print a DatObject tree
+ //////////////////////////////////////////////////////////////////////////
+ void Utils::tabs(int inc)
+ {
+ for (int ind=0; ind <inc; ind++)
+ {
+ cout << " ";
+ }
+ }
+
+ void Utils::printDO(DataObjectPtr dataObject, int increment)
+ {
+ int inc=increment;
+ if (!dataObject)
+ return;
+ const Type& dataObjectType = dataObject->getType();
+ tabs(inc);
+ cout << "DataObject type: " << dataObjectType.getURI()<< "#" << dataObjectType.getName() << endl;
+ inc++;
+
+ //////////////////////////////////////////////////////////////////////////
+ // Iterate over all the properties
+ //////////////////////////////////////////////////////////////////////////
+ PropertyList pl = dataObject->getInstanceProperties();
+ for (int i = 0; i < pl.size(); i++)
+ {
+ tabs(inc);
+ cout << "Property: " << pl[i].getName() << endl;
+
+ const Type& propertyType = pl[i].getType();
+
+ tabs(inc);
+ cout << "Property Type: " << propertyType.getURI()<< "#" << propertyType.getName() << endl;
+
+ if (dataObject->isSet(pl[i]))
+ {
+
+ //////////////////////////////////////////////////////////////////////
+ // For a many-valued property get the list of values
+ //////////////////////////////////////////////////////////////////////
+ if (pl[i].isMany())
+ {
+ inc++;
+ DataObjectList& dol = dataObject->getList(pl[i]);
+ for (int j = 0; j <dol.size(); j++)
+ {
+ tabs(inc);
+ cout << "Value " << j <<endl;
+ inc++;
+
+ if (propertyType.isDataType())
+ {
+ tabs(inc);
+ cout<< "Property Value: " << dol.getCString(j) <<endl ;
+ }
+ else
+ printDO(dol[j], inc);
+ inc--;
+ }
+ inc--;
+ } // end IsMany
+
+
+ //////////////////////////////////////////////////////////////////////
+ // For a primitive data type print the value
+ //////////////////////////////////////////////////////////////////////
+ else if (propertyType.isDataType())
+ {
+ tabs(inc);
+ cout<< "Property Value: " << dataObject->getCString(pl[i]) <<endl ;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // For a dataobject print the do
+ //////////////////////////////////////////////////////////////////////
+ else
+ {
+ inc++;
+ printDO(dataObject->getDataObject(pl[i]), inc);
+ inc--;
+ }
+ }
+ else
+ {
+ tabs(inc);
+ cout<< "Property Value: not set" <<endl ;
+ }
+
+ }
+ inc--;
+ }
+
+ void Utils::printTypes(DataFactoryPtr df)
+ {
+ //////////////////////////////////////////////////////////////////////////
+ // Retrieve the DataFactory from the mediator
+ // get the list of Types in the DataFactory and list them
+ //////////////////////////////////////////////////////////////////////////
+ TypeList tl = df->getTypes();
+ for (int i = 0; i < tl.size(); i++)
+ {
+ cout << "Type: " << tl[i].getURI()<< "#" << tl[i].getName() << endl;
+ PropertyList pl = tl[i].getProperties();
+ for (int j = 0; j < pl.size(); j++)
+ {
+ cout << "\tProperty: " << pl[j].getName()
+ << " type: " <<pl[j].getType().getURI()<<"#"<<pl[j].getType().getName()<< endl;
+
+ }
+ }
+
+ }
+
+
+ } // End namespace sca
+} // End namespace tuscany
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.h
new file mode 100644
index 0000000000..184bcd3dad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/util/Utils.h
@@ -0,0 +1,61 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_util_utils_h
+#define tuscany_sca_util_utils_h
+#include <string>
+using std::string;
+#include "commonj/sdo/SDO.h"
+
+#include "osoa/sca/export.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ /**
+ * Utility methods to parse strings and provide debugging information.
+ */
+ class Utils {
+
+ public:
+ static void tokeniseUri(const string& uri, string& token1, string& token2);
+ static void tokeniseQName(const string& sdoname, string& uri, string& name);
+ static void tokeniseString(
+ const string& separator,
+ const string& str,
+ string& token1,
+ string& token2);
+
+ static void rTokeniseString(
+ const string& separator,
+ const string& str,
+ string& token1,
+ string& token2);
+
+ SCA_API static void printDO(commonj::sdo::DataObjectPtr dataObject, int increment=0);
+ SCA_API static void printTypes(commonj::sdo::DataFactoryPtr df);
+
+ private:
+ static void tabs(int increment=0);
+ };
+
+ } // End namespace sca
+} // End namespace tuscany
+#endif // tuscany_sca_util_utils_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.cpp
new file mode 100644
index 0000000000..dcf974623d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.cpp
@@ -0,0 +1,677 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * 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.
+ */
+#include "tuscany/sca/ws/EntryPointProxy.h"
+
+using namespace tuscany::sca;
+
+#include "tuscany/sca/util/Exceptions.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/core/SCARuntime.h"
+
+#include "tuscany/sca/model/WSBinding.h"
+
+#include "commonj/sdo/SDO.h"
+using namespace commonj::sdo;
+
+using namespace tuscany::sca::ws;
+
+
+// Singleton pattern
+EntryPointProxy* EntryPointProxy::entryPointProxyInstance = new EntryPointProxy();
+
+EntryPointProxy* EntryPointProxy::getInstance()
+{
+ return entryPointProxyInstance;
+}
+
+EntryPointProxy::EntryPointProxy()
+{
+ LOGENTRY(1,"EntryPointProxy::constructor");
+ tuscanyRuntime = NULL;
+ scaEntryPoint = NULL;
+ entryPointName = "";
+ systemRoot = "";
+ moduleComponent = "";
+ LOGEXIT(1,"EntryPointProxy::constructor");
+}
+
+EntryPointProxy::~EntryPointProxy()
+{
+ LOGENTRY(1,"EntryPointProxy::destructor");
+
+ if(tuscanyRuntime != NULL)
+ {
+ tuscanyRuntime->stop();
+ delete tuscanyRuntime;
+ tuscanyRuntime = NULL;
+ }
+ if(scaEntryPoint != NULL)
+ {
+ delete scaEntryPoint;
+ }
+ LOGEXIT(1,"EntryPointProxy::destructor");
+}
+
+void EntryPointProxy::init(const char* systemRootPath, const char* fullEntryPointName)
+{
+ LOGENTRY(1,"EntryPointProxy::init");
+
+ try
+ {
+
+ // fullEntryPointName is of the form "subsystem name"/"module component name"/"entry point name"
+ // Get the "subsystem name"/"module component name" part for setDefaultModuleComponent
+ // Keep the "entry point name" part for use in invoke
+ string subsystemAndComponentName, epName;
+ Utils::rTokeniseString("/", fullEntryPointName, subsystemAndComponentName, epName);
+
+ bool newInitParams = false;
+
+ if(systemRoot.length() != 0 && systemRoot != systemRootPath)
+ {
+ systemRoot = systemRootPath;
+ newInitParams = true;
+ }
+
+ if(moduleComponent.length() != 0 && moduleComponent != subsystemAndComponentName)
+ {
+ moduleComponent = subsystemAndComponentName;
+ newInitParams = true;
+ }
+
+ if(entryPointName.length() != 0 && entryPointName != epName)
+ {
+ entryPointName = epName;
+ newInitParams = true;
+ }
+
+
+ if(tuscanyRuntime == NULL)
+ {
+ LOGINFO(4, "Creating new TuscanyRuntime");
+ moduleComponent = subsystemAndComponentName;
+ systemRoot = systemRootPath;
+ entryPointName = epName;
+ tuscanyRuntime = new TuscanyRuntime(moduleComponent, systemRoot);
+ tuscanyRuntime->start();
+ }
+ else if(tuscanyRuntime != NULL && newInitParams)
+ {
+ LOGINFO(4, "Restarting TuscanyRuntime with new SystemRoot or DefaultModule");
+ tuscanyRuntime->stop();
+ tuscanyRuntime->setDefaultModuleComponent(moduleComponent);
+ tuscanyRuntime->setSystemRoot(systemRoot);
+ tuscanyRuntime->start();
+ }
+
+ if(scaEntryPoint == NULL)
+ {
+ scaEntryPoint = new SCAEntryPoint(fullEntryPointName);
+ }
+ else
+ {
+ if(newInitParams)
+ {
+ delete scaEntryPoint;
+ scaEntryPoint = NULL;
+ scaEntryPoint = new SCAEntryPoint(fullEntryPointName);
+ }
+ }
+ }
+ catch(SystemConfigurationException &ex)
+ {
+ LOGERROR_1(0, "SystemConfigurationException has been caught: %s\n", ex.getMessageText());
+ scaEntryPoint = 0;
+ }
+ catch(ServiceRuntimeException &ex)
+ {
+ LOGERROR_2(0, "%s has been caught: %s\n", ex.getEClassName(), ex.getMessageText());
+ scaEntryPoint = 0;
+ }
+ LOGEXIT(1,"EntryPointProxy::init");
+}
+
+DataFactoryPtr EntryPointProxy::getDataFactory()
+{
+ if (scaEntryPoint == 0) return 0;
+ return scaEntryPoint->getDataFactory();
+}
+
+///
+/// This method will be called when an EntryPoint needs to be invoked.
+///
+DataObjectPtr EntryPointProxy::invoke(const char* operationName, DataObjectPtr inputDataObject)
+{
+ LOGENTRY(1,"EntryPointProxy::invoke");
+
+ if (scaEntryPoint == 0)
+ {
+ LOGINFO(4, "EntryPointProxy has not got an sca EntryPoint\n");
+ return NULL;
+ }
+
+ DataFactoryPtr dataFactoryPtr = scaEntryPoint->getDataFactory();
+
+ DataObjectPtr outputDataObject = NULL;
+ SCARuntime* runtime = SCARuntime::getInstance();
+
+ Module* module = runtime->getCurrentModule();
+
+ EntryPoint* entryPoint = module->findEntryPoint(entryPointName);
+
+ Binding* binding = entryPoint->getBinding();
+ if(binding->getBindingType() == Binding::SCA)
+ {
+ LOGINFO_1(4, "EntryPointProxy has got SCA binding: %s\n", binding->getUri().c_str());
+ LOGERROR(0, "EntryPoints with SCA bindings are not yet supported");
+ return NULL;
+ }
+ else if(binding->getBindingType() == Binding::WS)
+ {
+ WSBinding* wsBinding = (WSBinding*) binding;
+
+ string wsdlNamespace = wsBinding->getWSDLNamespaceURL();
+ string wsdlPort = wsBinding->getPortName();
+ string wsdlService = wsBinding->getServiceName();
+
+ Wsdl* wsdl = module->findWsdl(wsdlNamespace);
+ if (wsdl == 0)
+ {
+ LOGINFO_1(0, "WSDL description %s not found\n", wsdlNamespace.c_str());
+ return NULL;
+ }
+
+ WsdlOperation operation;
+ try
+ {
+ operation = wsdl->findOperation(wsdlService, wsdlPort, operationName);
+ }
+ catch(SystemConfigurationException &ex)
+ {
+ LOGERROR_1(0, "SystemConfigurationException has been caught: %s\n", ex.getMessageText());
+ return NULL;
+ }
+
+ LOGINFO_2(4, "EntryPointProxy has got WsdlOperation with inputType: %s#%s",
+ operation.getInputTypeUri().c_str(),
+ operation.getInputTypeName().c_str());
+ LOGINFO_2(4, "EntryPointProxy has got WsdlOperation with outputType: %s#%s",
+ operation.getOutputTypeUri().c_str(),
+ operation.getOutputTypeName().c_str());
+ LOGINFO_2(4, "EntryPointProxy has got WsdlOperation with documentStyle=%d and encoded=%d",
+ operation.isDocumentStyle(),
+ operation.isEncoded());
+
+ if(operation.isDocumentStyle())
+ {
+ // Document style
+ outputDataObject = dataFactoryPtr->create(operation.getOutputTypeUri().c_str(), operation.getOutputTypeName().c_str());
+
+ //printf("outputDataObject %s#%s\n", outputDataObject->getType().getURI(), outputDataObject->getType().getName());
+ //Utils::printDO(outputDataObject);
+ }
+ else
+ {
+ // RPC style
+ LOGERROR(0, "EntryPoints with RPC style WSDL Operations are not yet supported");
+ return NULL;
+ }
+ }
+
+ // Create new Operation object and set parameters and return value
+ Operation operation(operationName);
+
+ // Go through input data object to set the operation parameters
+ PropertyList pl = inputDataObject->getInstanceProperties();
+
+ for(int i=0; i<pl.size(); i++)
+ {
+ const char* name = pl[i].getName();
+
+ switch (pl[i].getTypeEnum())
+ {
+ case Type::BooleanType:
+ {
+ bool* boolData = new bool;
+ *boolData = inputDataObject->getBoolean(pl[i]);
+ //printf("inputDataObject has BooleanType named %s with value %d\n", name, boolData);
+ operation.addParameter(boolData);
+ }
+ break;
+ case Type::ByteType:
+ {
+ char* byteData = new char;
+ //printf("inputDataObject has ByteType named %s\n", name);
+ *byteData = inputDataObject->getByte(pl[i]);
+ operation.addParameter(byteData);
+ }
+ break;
+ case Type::BytesType:
+ {
+ int len = inputDataObject->getLength(pl[i]);
+ char* bytesData = new char[len+1];
+ int bytesWritten = inputDataObject->getBytes(pl[i], bytesData, len);
+ // Ensure the bytes end with the null char. Not sure if this is neccessary
+ if(bytesWritten <= len)
+ {
+ bytesData[bytesWritten] = 0;
+ }
+ else
+ {
+ bytesData[len] = 0;
+ }
+ //printf("inputDataObject has BytesType named %s with length %d\n", name, bytesWritten);
+ operation.addParameter(&bytesData);
+ }
+ break;
+ case Type::CharacterType:
+ {
+ // This code should work but won't be used as there is no mapping from an XSD type to the SDO CharacterType
+ wchar_t* charData = new wchar_t;
+ //printf("inputDataObject has CharacterType named %s\n", name);
+ *charData = inputDataObject->getCharacter(pl[i]);
+ operation.addParameter(charData);
+ }
+ break;
+ case Type::DoubleType:
+ {
+ long double* doubleData = new long double;
+ *doubleData = inputDataObject->getDouble(pl[i]);
+ //printf("inputDataObject has DoubleType named %s\n", name);
+ operation.addParameter(doubleData);
+ }
+ break;
+ case Type::FloatType:
+ {
+ float* floatData = new float;
+ *floatData = inputDataObject->getFloat(pl[i]);
+ //printf("inputDataObject has FloatType named %s with value %f\n", name, *floatData);
+ operation.addParameter(floatData);
+ }
+ break;
+ case Type::IntegerType:
+ {
+ long* intData = new long;
+ //printf("inputDataObject has IntegerType named %s\n", name);
+ *intData = inputDataObject->getInteger(pl[i]);
+ operation.addParameter(intData);
+ }
+ break;
+ case Type::ShortType:
+ {
+ short* shortData = new short;
+ //printf("inputDataObject has ShortType named %s\n", name);
+ *shortData = inputDataObject->getShort(pl[i]);
+ operation.addParameter(shortData);
+ }
+ break;
+ case Type::StringType:
+ {
+ const char* stringData = inputDataObject->getCString(pl[i]);
+ //printf("inputDataObject has StringType named %s with value %s\n", name, stringData);
+ operation.addParameter(&stringData);
+ }
+ break;
+ case Type::DataObjectType:
+ {
+ DataObjectPtr dataObjectData = inputDataObject->getDataObject(pl[i]);
+ //printf("inputDataObject has DataObjectType named %s (#%d)\n", name, dataObjectData);
+
+ if(!dataObjectData)
+ {
+ LOGINFO_1(4, "SDO DataObject parameter named %s was null", name);
+ }
+ operation.addParameter(&dataObjectData);
+ }
+ break;
+ case Type::OpenDataObjectType:
+ {
+ /*
+ * This code deals with xsd:any element parameters
+ * Get each element as a DataObject and add in to the parameter list
+ */
+
+ //printf("inputDataObject has OpenDataObjectType named %s\n", name);
+ DataObjectList& dataObjectList = inputDataObject->getList(pl[i]);
+
+ for(int j=0; j<dataObjectList.size(); j++)
+ {
+ DataObjectPtr dataObjectData = dataObjectList[j];
+ if(!dataObjectData)
+ {
+ LOGINFO_2(4, "SDO OpenDataObject parameter named %s[%d] was null", name, j);
+ }
+ operation.addParameter(&dataObjectData);
+ //Utils::printDO(dataObjectData);
+ }
+ }
+ break;
+ case Type::DateType:
+ LOGERROR_1(0, "SDO DateType parameters are not yet supported (%s)", name);
+ return NULL;
+ case Type::LongType:
+ LOGERROR_1(0, "SDO LongType (int64_t) parameters are not yet supported (%s)", name);
+ return NULL;
+ break;
+ case Type::UriType:
+ LOGERROR_1(0, "SDO UriType parameters are not yet supported (%s)", name);
+ return NULL;
+ break;
+ case Type::BigDecimalType:
+ LOGERROR_1(0, "SDO BigDecimalType parameters are not yet supported (%s)", name);
+ return NULL;
+ break;
+ case Type::BigIntegerType:
+ LOGERROR_1(0, "SDO BigIntegerType parameters are not yet supported (%s)", name);
+ return NULL;
+ break;
+ default:
+ LOGERROR_1(0, "Unknown SDO type parameter named %s has been found. Unknown types are not yet supported", name);
+ return NULL;
+ }
+ }
+
+ // Now go through outputDataObject to set the return value
+ pl = outputDataObject->getInstanceProperties();
+
+ // Set up the possible return value pointers
+ bool boolData = 0;
+ char byteData = 0;
+ wchar_t charData = 0;
+ long double doubleData = 0;
+ float floatData = 0;
+ long intData = 0;
+ short shortData = 0;
+ const char* stringData;
+ DataObjectPtr dataObjectData;
+
+
+ // There should only be one return value, but go through any list anyway?
+ if(pl.size() > 1)
+ {
+ LOGINFO(4, "More than one return value is defined in the WSDL, just defining the first");
+ }
+ else if(pl.size() == 0)
+ {
+ if(outputDataObject->getType().isOpenType() && outputDataObject->getType().isDataObjectType())
+ {
+ /*
+ * This code deals with returning xsd:any elements
+ * Return as a DataObject set within the outputDataObject
+ */
+
+ // An OpenDataObject for the data to return in
+ operation.setReturnValue(&dataObjectData);
+ }
+ else
+ {
+ LOGINFO(4, "No return values are defined in the WSDL");
+ }
+
+ }
+
+ if(pl.size() > 0)
+ {
+ const char* name = pl[0].getName();
+
+ switch (pl[0].getTypeEnum())
+ {
+ case Type::BooleanType:
+ {
+ //printf("outputDataObject has BooleanType named %s\n", name);
+ operation.setReturnValue(&boolData);
+ }
+ break;
+ case Type::ByteType:
+ {
+ //printf("outputDataObject has ByteType named %s\n", name);
+ operation.setReturnValue(&byteData);
+ }
+ break;
+ case Type::CharacterType:
+ {
+ //printf("outputDataObject has CharacterType named %s\n", name);
+ operation.setReturnValue(&charData);
+ }
+ break;
+ case Type::DoubleType:
+ {
+ //printf("outputDataObject has DoubleType named %s\n", name);
+ operation.setReturnValue((long double*) &doubleData);
+ }
+ break;
+ case Type::FloatType:
+ {
+ //printf("outputDataObject has FloatType named %s\n", name);
+ operation.setReturnValue(&floatData);
+ }
+ break;
+ case Type::IntegerType:
+ {
+ //printf("outputDataObject has IntegerType named %s\n", name);
+ operation.setReturnValue(&intData);
+ }
+ break;
+ case Type::ShortType:
+ {
+ //printf("outputDataObject has ShortType named %s\n", name);
+ operation.setReturnValue(&shortData);
+ }
+ break;
+ case Type::StringType:
+ case Type::BytesType:
+ {
+ //printf("outputDataObject has StringType or BytesType named %s\n", name);
+ operation.setReturnValue((const char**) &stringData);
+ }
+ break;
+ case Type::DataObjectType:
+ {
+ // printf("outputDataObject has DataObjectType named %s with type %s # %s\n", name, pl[0].getType().getURI(), pl[0].getType().getName());
+ operation.setReturnValue(&dataObjectData);
+ }
+ break;
+ case Type::DateType:
+ LOGERROR_1(0, "SDO DateType return values are not yet supported (%s)", name);
+ return NULL;
+ case Type::LongType:
+ LOGERROR_1(0, "SDO LongType (int64_t) return values are not yet supported (%s)", name);
+ return NULL;
+ case Type::UriType:
+ LOGERROR_1(0, "SDO UriType return values are not yet supported (%s)", name);
+ return NULL;
+ case Type::BigDecimalType:
+ LOGERROR_1(0, "SDO BigDecimalType return values are not yet supported (%s)", name);
+ return NULL;
+ case Type::BigIntegerType:
+ LOGERROR_1(0, "SDO BigIntegerType return values are not yet supported (%s)", name);
+ return NULL;
+ default:
+ LOGERROR_1(0, "Unknown SDO type return value named %s has been found. Unknown types are not yet supported", name);
+ return NULL;
+ }
+ }
+
+ try
+ {
+ // Call into the wired module
+ scaEntryPoint->invoke(operation);
+
+ // Set the data in the outputDataObject to be returned
+ setOutputData(operation, outputDataObject);
+ }
+ catch(SDORuntimeException &ex)
+ {
+ // TODO: Return more error information than just a null DataObject
+ LOGERROR_2(0, "%s has been caught: %s\n", ex.getEClassName(), ex.getMessageText());
+ return NULL;
+ }
+ catch(ServiceRuntimeException &ex)
+ {
+ // TODO: Return more error information than just a null DataObject
+ LOGERROR_2(0, "%s has been caught: %s\n", ex.getEClassName(), ex.getMessageText());
+ return NULL;
+ }
+
+ LOGEXIT(1,"EntryPointProxy::invoke");
+
+ return outputDataObject;
+}
+
+
+void EntryPointProxy::setOutputData(Operation operation, DataObjectPtr outputDataObject)
+{
+ // Go through data object to set the return value
+ PropertyList pl = outputDataObject->getInstanceProperties();
+
+ if(pl.size() == 0)
+ {
+ if(outputDataObject->getType().isOpenType() && outputDataObject->getType().isDataObjectType())
+ {
+ /*
+ * This code deals with returning xsd:any elements
+ * Return as a DataObject set within the outputDataObject
+ */
+
+ DataObjectPtr* dataObjectData = (DataObjectPtr*) operation.getReturnValue();
+ //Utils::printDO(*dataObjectData);
+
+ // Need to provide a name for the dataobject being returned, use the containment property name if there is one.
+ const char* rootName = "OpenDataObject";
+ try
+ {
+ const Property& prop = (*dataObjectData)->getContainmentProperty();
+ rootName = prop.getName();
+ (*dataObjectData)->detach();
+ }
+ catch(SDOPropertyNotFoundException&)
+ {
+ // DataObject has no containment property - use default rootName
+ }
+ outputDataObject->setDataObject(rootName, *dataObjectData);
+ }
+ else
+ {
+ LOGINFO(4, "No return values are defined in the WSDL");
+ }
+
+ }
+
+ // Should only be one return value.. This goes through all return values
+ for(int i=0; i<pl.size(); i++)
+ {
+ const char* name = pl[i].getName();
+
+ switch (pl[i].getTypeEnum())
+ {
+ case Type::BooleanType:
+ {
+ bool* boolData = (bool*)operation.getReturnValue();
+ //printf("outputDataObject has BooleanType named %s with value %d\n", name, *boolData);
+ outputDataObject->setBoolean(pl[i], *boolData);
+ }
+ break;
+ case Type::ByteType:
+ {
+ char* byteData = (char*) operation.getReturnValue();
+ //printf("outputDataObject has ByteType named %s with value %c (#%d)\n", name, *byteData, *byteData);
+ outputDataObject->setByte(pl[i], *byteData);
+ }
+ break;
+ case Type::BytesType:
+ {
+ const char** bytesData = (const char**) operation.getReturnValue();
+ // TODO This looks for the first NULL byte - this may not be the full length of the data...
+ int len = 0;
+ while((*bytesData)[len] != 0)
+ {
+ len++;
+ }
+ //printf("outputDataObject has BytesType named %s with value %s and length %d\n", name, *bytesData, len);
+ outputDataObject->setBytes(pl[i], *bytesData, len);
+ }
+ break;
+ case Type::CharacterType:
+ {
+ wchar_t* charData = (wchar_t*) operation.getReturnValue();
+ //printf("outputDataObject has CharacterType named %s with value %s\n", name, charData);
+ outputDataObject->setCharacter(pl[i], *charData);
+ }
+ break;
+ case Type::DoubleType:
+ {
+ long double* doubleData = (long double*) operation.getReturnValue();
+ //printf("outputDataObject has DoubleType named %s with value %f\n", name, *doubleData);
+ outputDataObject->setDouble(pl[i], *doubleData);
+ }
+ break;
+ case Type::FloatType:
+ {
+ float* floatData = (float*) operation.getReturnValue();
+ //printf("outputDataObject has FloatType named %s with value %f \n", name, *floatData);
+ outputDataObject->setFloat(pl[i], *floatData);
+ }
+ break;
+ case Type::IntegerType:
+ {
+ long* intData = (long*) operation.getReturnValue();
+ //printf("outputDataObject has IntegerType named %s with value %d\n", name, *intData);
+ outputDataObject->setInteger(pl[i], *intData);
+ }
+ break;
+ case Type::ShortType:
+ {
+ short* shortData = (short*) operation.getReturnValue();
+ //printf("outputDataObject has ShortType named %s with value %d\n", name, *shortData);
+ outputDataObject->setShort(pl[i], *shortData);
+ }
+ break;
+ case Type::StringType:
+ {
+ const char** stringData = (const char**) operation.getReturnValue();
+ //printf("outputDataObject has StringType named %s with value %s\n", name, *stringData);
+ outputDataObject->setCString(pl[i], *stringData);
+ }
+ break;
+ case Type::DataObjectType:
+ {
+ DataObjectPtr* dataObjectData = (DataObjectPtr*) operation.getReturnValue();
+ //printf("outputDataObject has DataObjectType named %s with value (%d)\n", name, (*dataObjectData));
+ outputDataObject->setDataObject(pl[i], *dataObjectData);
+ }
+ break;
+ case Type::DateType:
+ LOGERROR_1(0, "SDO DateType return values are not yet supported (%s)", name);
+ break;
+ case Type::LongType:
+ LOGERROR_1(0, "SDO LongType (int64_t) return values are not yet supported (%s)", name);
+ break;
+ case Type::UriType:
+ LOGERROR_1(0, "SDO UriType return values are not yet supported (%s)", name);
+ break;
+ case Type::BigDecimalType:
+ LOGERROR_1(0, "SDO BigDecimalType return values are not yet supported (%s)", name);
+ break;
+ case Type::BigIntegerType:
+ LOGERROR_1(0, "SDO BigIntegerType return values are not yet supported (%s)", name);
+ break;
+ default:
+ LOGERROR_1(0, "Unknown SDO type return value named %s has been found. Unknown types are not yet supported", name);
+ }
+ }
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.h
new file mode 100644
index 0000000000..959a5ee07c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/EntryPointProxy.h
@@ -0,0 +1,63 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef tuscany_sca_ws_entrypointproxy_h
+#define tuscany_sca_ws_entrypointproxy_h
+
+#include "osoa/sca/export.h"
+
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+
+#include "tuscany/sca/core/SCAEntryPoint.h"
+using tuscany::sca::SCAEntryPoint;
+
+#include "tuscany/sca/core/TuscanyRuntime.h"
+using tuscany::sca::TuscanyRuntime;
+
+#include <string>
+using std::string;
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace ws
+ {
+ class SCA_API EntryPointProxy
+ {
+ public:
+ static EntryPointProxy* getInstance();
+ virtual ~EntryPointProxy();
+ virtual void init(const char* systemRoot, const char* entryPointName);
+ virtual DataFactoryPtr getDataFactory(void);
+ virtual DataObjectPtr invoke(const char* operationName, DataObjectPtr inputDataObject);
+ private:
+ EntryPointProxy();
+ static EntryPointProxy* entryPointProxyInstance;
+ virtual void setOutputData(Operation operation, DataObjectPtr outputDataObject);
+ string entryPointName;
+ string systemRoot;
+ string moduleComponent;
+ SCAEntryPoint* scaEntryPoint;
+ TuscanyRuntime* tuscanyRuntime;
+ };
+ } // End namespace ws
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_ws_entrypointproxy_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/WSServiceWrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/WSServiceWrapper.h
new file mode 100644
index 0000000000..713c575735
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/src/tuscany/sca/ws/WSServiceWrapper.h
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef tuscany_sca_ws_wsservicewrapper_h
+#define tuscany_sca_ws_wsservicewrapper_h
+#include "osoa/sca/export.h"
+
+#include "tuscany/sca/core/ExternalServiceWrapper.h"
+#include "tuscany/sca/model/ExternalService.h"
+#include "tuscany/sca/core/Operation.h"
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace ws
+ {
+
+ class SCA_API WSServiceWrapper : public tuscany::sca::ExternalServiceWrapper
+ {
+ public:
+ WSServiceWrapper(tuscany::sca::model::WireTarget* target);
+ virtual ~WSServiceWrapper();
+
+ virtual void invoke(Operation& operation);
+ };
+ } // End namespace ws
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_ws_wsservicewrapper_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtbuild b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtbuild
new file mode 100644
index 0000000000..ed308ead8d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtbuild
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 3.0.0?>
+
+<ManagedProjectBuildInfo>
+<project id="tuscany_sca_test_CustomerInfo.cdt.managedbuild.target.gnu.so.1305856867" name="Shared Library (Gnu)" projectType="cdt.managedbuild.target.gnu.so">
+<configuration artifactExtension="so" artifactName="CustomerInfo" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.so.debug.180210457" name="Debug" parent="cdt.managedbuild.config.gnu.so.debug">
+<toolChain id="cdt.managedbuild.toolchain.gnu.so.debug.150489083" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.so.debug">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.so.debug.744339895" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.so.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.so.debug.773936698" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.so.debug">
+<option id="gnu.cpp.compiler.option.preprocessor.def.1937348866" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+<listOptionValue builtIn="false" value="_DEBUG"/>
+</option>
+<option id="gnu.cpp.compiler.option.include.paths.1481017815" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/include"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.so.debug.2091259285" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.so.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.so.debug.509296678" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.so.debug"/>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.so.debug.187343736" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.so.debug"/>
+<macros/>
+</toolChain>
+</configuration>
+<configuration artifactExtension="so" artifactName="CustomerInfo" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.so.release.954607388" name="Release" parent="cdt.managedbuild.config.gnu.so.release">
+<toolChain id="cdt.managedbuild.toolchain.gnu.so.release.1899157892" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.so.release">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.so.release.1905763267" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.so.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.so.release.91975924" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.so.release">
+<option id="gnu.cpp.compiler.option.include.paths.695258843" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/include"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.so.release.749931234" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.so.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.so.release.636362934" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.so.release"/>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.so.release.1971799783" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.so.release"/>
+<macros/>
+</toolChain>
+</configuration>
+<macros/>
+</project>
+</ManagedProjectBuildInfo>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtproject b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtproject
new file mode 100644
index 0000000000..48a12e6664
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.cdtproject
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject id="org.eclipse.cdt.managedbuilder.core.managedMake">
+<extension id="org.eclipse.cdt.managedbuilder.core.ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
+<data>
+<item id="org.eclipse.cdt.core.pathentry">
+<pathentry kind="src" path=""/>
+<pathentry kind="out" path=""/>
+<pathentry kind="con" path="org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER"/>
+</item>
+</data>
+</cdtproject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.project b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.project
new file mode 100644
index 0000000000..60a0a75176
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tuscany_sca_test_CustomerInfo</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ </natures>
+</projectDescription>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000000..691a33706a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,9 @@
+#Tue Nov 29 15:05:50 GMT 2005
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.so.debug.180210457=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.so.release.954607388=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.so.debug.180210457=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.so.release.954607388=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.so.debug.180210457=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.so.release.954607388=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfo.h
new file mode 100644
index 0000000000..6372a5a45a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfo.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+ virtual const char* getCustomerInformation(const char* customerID) = 0;
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.cpp
new file mode 100644
index 0000000000..371ab74f14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.cpp
@@ -0,0 +1,80 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "CustomerInfoImpl.h"
+#include <ostream>
+#include <string.h>
+#include "osoa/sca/sca.h"
+#include "commonj/sdo/DataObjectInstance.h"
+using namespace osoa::sca;
+using namespace commonj::sdo;
+using namespace std;
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CustomerInfoImpl::CustomerInfoImpl()
+{
+ cout << "Construct CustomerInfoImpl" << endl;
+
+}
+
+CustomerInfoImpl::~CustomerInfoImpl()
+{
+ cout << "Destroy CustomerInfoImpl" << endl;
+}
+
+//////////////////////////////////////////////////////////////////////
+// Other methods
+//////////////////////////////////////////////////////////////////////
+const char* CustomerInfoImpl::getCustomerInformation(const char* customerID)
+{
+ cout << "In getCustomerInformation with customerid: " << customerID << endl;
+
+
+
+ ComponentContext myContext = ComponentContext::getCurrent();
+
+ DataObjectInstance properties = myContext.getProperties();
+ DataObjectInstance props2 = properties;
+ if (properties)
+ {
+ const char* fredVal = properties->getCString("Fred");
+ cout << "Property Fred value: " << fredVal <<endl;
+
+
+ DataObjectList& joeList = properties->getList("Joe");
+ for (int i=0; i<joeList.size();i++)
+ {
+ cout << "Property Joe value " << i << ": " << joeList.getInteger(i) <<endl;
+ }
+ }
+
+ if (!strcmp("12345", customerID))
+ {
+ return "xzderg";
+ }
+ else
+ {
+ throw "Wobbler";
+ }
+
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.h
new file mode 100644
index 0000000000..7f70664f68
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl.h
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
new file mode 100644
index 0000000000..e6cb3b3426
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Proxy* CustomerInfoImpl_CustomerInfoService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CustomerInfoImpl_CustomerInfoService_Proxy_Destructor(void* proxy)
+ {
+ delete (CustomerInfoImpl_CustomerInfoService_Proxy*)proxy;
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::CustomerInfoImpl_CustomerInfoService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::~CustomerInfoImpl_CustomerInfoService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.h
new file mode 100644
index 0000000000..7173dacd34
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
new file mode 100644
index 0000000000..1f28bf5715
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Wrapper* CustomerInfoImpl_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::CustomerInfoImpl_CustomerInfoService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl*)getImplementation();
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::~CustomerInfoImpl_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformation")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformation(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.h
new file mode 100644
index 0000000000..5fb82c4295
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/CustomerInfoImpl_CustomerInfoService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CustomerInfoImpl* impl;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/Makefile.am
new file mode 100644
index 0000000000..baf839d51a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/CustomerInfo/Makefile.am
@@ -0,0 +1,15 @@
+lib_LTLIBRARIES = libCustomerInfo.la
+
+libCustomerInfo_la_SOURCES = \
+CustomerInfoImpl.cpp \
+CustomerInfoImpl_CustomerInfoService_Proxy.cpp \
+CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
+
+noinst_HEADERS = *.h
+
+libCustomerInfo_la_LIBADD =
+
+INCLUDES = -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include
+
+install: \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/Makefile.am
new file mode 100644
index 0000000000..52ea80e3fb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/Makefile.am
@@ -0,0 +1,28 @@
+SUBDIRS = CustomerInfo MyValue src
+
+EXTRA_DIST = testSCASystem/subsystems \
+testSCASystem/modules/MyValueServiceModule/sca.module \
+testSCASystem/modules/MyValueServiceModule/*.fragment \
+testSCASystem/modules/MyValueServiceModule/*.componentType \
+testSCASystem/modules/MyValueServiceModule/*.wsdl \
+testSCASystem/modules/MyValueServiceModule/*.xsd \
+testSCASystem/modules/MyValueServiceModule/*.config
+
+
+BUILT_SOURCES = scagen
+
+scagen:
+ cp ./MyValue/MyValue.h ./testSCASystem/modules/MyValueServiceModule
+ cp ./MyValue/MyValueImpl.h ./testSCASystem/modules/MyValueServiceModule
+ cp ./MyValue/StockQuoteService.h ./testSCASystem/modules/MyValueServiceModule
+ cp ./CustomerInfo/CustomerInfo.h ./testSCASystem/modules/MyValueServiceModule
+ cp ./CustomerInfo/CustomerInfoImpl.h ./testSCASystem/modules/MyValueServiceModule
+ java -jar $(top_builddir)/tools/scagen/bld/scagen.jar -dir testSCASystem/modules/MyValueServiceModule -output tmp
+ cp tmp/CustomerInfoImpl*.* CustomerInfo
+ cp tmp/MyValueImpl*.* MyValue
+
+
+install-exec-local:
+ cp CustomerInfo/.libs/libCustomerInfo.so testSCASystem/modules/MyValueServiceModule
+ cp MyValue/.libs/libMyValue.so testSCASystem/modules/MyValueServiceModule
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtbuild b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtbuild
new file mode 100644
index 0000000000..acc65c20f2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtbuild
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 3.0.0?>
+
+<ManagedProjectBuildInfo>
+<project id="tuscany_sca_test_MyValue.cdt.managedbuild.target.gnu.so.757075771" name="Shared Library (Gnu)" projectType="cdt.managedbuild.target.gnu.so">
+<configuration artifactExtension="so" artifactName="MyValue" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.so.debug.903609302" name="Debug" parent="cdt.managedbuild.config.gnu.so.debug">
+<toolChain id="cdt.managedbuild.toolchain.gnu.so.debug.255326897" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.so.debug">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.so.debug.1055337069" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.so.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.so.debug.1856329612" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.so.debug">
+<option id="gnu.cpp.compiler.option.preprocessor.def.1031467482" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+<listOptionValue builtIn="false" value="_DEBUG"/>
+</option>
+<option id="gnu.cpp.compiler.option.include.paths.571240659" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src"/>
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/test/CustomerInfo"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/include"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.so.debug.1169623816" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.so.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.so.debug.578216644" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.so.debug"/>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.so.debug.1431997590" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.so.debug"/>
+<macros/>
+</toolChain>
+</configuration>
+<configuration artifactExtension="so" artifactName="MyValue" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.so.release.1558347965" name="Release" parent="cdt.managedbuild.config.gnu.so.release">
+<toolChain id="cdt.managedbuild.toolchain.gnu.so.release.957726846" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.so.release">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.so.release.625045304" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.so.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.so.release.1998422811" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.so.release">
+<option id="gnu.cpp.compiler.option.include.paths.687314264" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src"/>
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/test/CustomerInfo"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/include"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.so.release.1598091246" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.so.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.so.release.1373242294" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.so.release"/>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.so.release.1820024298" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.so.release"/>
+<macros/>
+</toolChain>
+</configuration>
+<macros/>
+</project>
+</ManagedProjectBuildInfo>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtproject b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtproject
new file mode 100644
index 0000000000..48a12e6664
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.cdtproject
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject id="org.eclipse.cdt.managedbuilder.core.managedMake">
+<extension id="org.eclipse.cdt.managedbuilder.core.ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
+<data>
+<item id="org.eclipse.cdt.core.pathentry">
+<pathentry kind="src" path=""/>
+<pathentry kind="out" path=""/>
+<pathentry kind="con" path="org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER"/>
+</item>
+</data>
+</cdtproject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.project b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.project
new file mode 100644
index 0000000000..113442bfd8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tuscany_sca_test_MyValue</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ </natures>
+</projectDescription>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000000..4c585d5bb1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,9 @@
+#Tue Nov 29 15:11:39 GMT 2005
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.so.debug.903609302=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.so.release.1558347965=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.so.debug.903609302=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.so.release.1558347965=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.so.debug.903609302=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.so.release.1558347965=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/Makefile.am
new file mode 100644
index 0000000000..0eb5f89ad3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/Makefile.am
@@ -0,0 +1,18 @@
+lib_LTLIBRARIES = libMyValue.la
+
+noinst_HEADERS = *.h
+
+libMyValue_la_SOURCES = \
+MyValueImpl.cpp \
+MyValueImpl_customerInfo_Proxy.cpp \
+MyValueImpl_MyValueService_Proxy.cpp \
+MyValueImpl_MyValueService_Wrapper.cpp \
+MyValueImpl_stockQuote_Proxy.cpp
+
+libMyValue_la_LIBADD =
+
+INCLUDES = -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include \
+ -I../CustomerInfo
+
+install: \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValue.h
new file mode 100644
index 0000000000..710910f08c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValue.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+class MyValue
+{
+public:
+ virtual float getMyValue(const char* customerID) = 0;
+ virtual float getMyValueS(const string& customerID) = 0;
+ virtual string getCustname(string& customerID) = 0;
+ virtual const string& getCustnamecs(string customerID) = 0;
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.cpp
new file mode 100644
index 0000000000..a6e10384e4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.cpp
@@ -0,0 +1,150 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.h"
+#include "CustomerInfo.h"
+#include "StockQuoteService.h"
+#include <iostream>
+using namespace std;
+
+#include "osoa/sca/sca.h"
+#include "commonj/sdo/SDO.h"
+
+using namespace osoa::sca;
+using namespace commonj::sdo;
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+MyValueImpl::MyValueImpl()
+{
+ cout << "Construct MyValueImpl" << endl;
+
+}
+
+MyValueImpl::~MyValueImpl()
+{
+ cout << "Destroy MyValueImpl" << endl;
+}
+
+//////////////////////////////////////////////////////////////////////
+// Other methods
+//////////////////////////////////////////////////////////////////////
+float MyValueImpl::getMyValue(const char *customerID)
+{
+ cout << "In getMyValue with customerid: " << customerID << endl;
+
+
+ ComponentContext myContext = ComponentContext::getCurrent();
+ CustomerInfo* customerInfoService = (CustomerInfo*)myContext.getService("customerInfo");
+
+ if (customerInfoService == 0)
+ {
+ cout << "unable to find customer info service" << endl;
+
+ return 0.0f;
+ }
+
+ const char * stock;
+ try
+ {
+ stock = customerInfoService->getCustomerInformation(customerID);
+ }
+ catch(const char* x)
+ {
+ cout << "Exception caught: " << x <<endl;
+ throw;
+ }
+
+ ServiceList serviceList = myContext.getServices("customerInfo");
+
+ for (unsigned int i=0; i<serviceList.size();i++)
+ {
+ CustomerInfo* service = (CustomerInfo*)(serviceList[i]);
+ stock = service->getCustomerInformation(customerID);
+ cout << "Stock from getServices " << i << " : " << stock <<endl;
+
+ }
+
+ // Use a second SCA reference to get the stock price
+ StockQuoteService* stockQuoteService = (StockQuoteService*)myContext.getService("stockQuote");
+
+ if (stockQuoteService == 0)
+ {
+ cout << "unable to find stock quote service" << endl;
+
+ return 0.1f;
+ }
+
+ // Create a data object representing the requests (use dynamic API until static is available)
+ DataObjectPtr requestDO;
+
+
+ // Invoke the service
+ string result = stockQuoteService->GetQuote("IBM");
+
+ cout << result<<endl;
+ float stockPrice = 0.0f;
+
+ try
+ {
+ XMLHelperPtr xmlHelper = HelperProvider::getXMLHelper(myContext.getDataFactory());
+ XMLDocumentPtr stockDoc = xmlHelper->load(result.c_str());
+ if (stockDoc->getRootDataObject())
+ {
+ stockPrice=stockDoc->getRootDataObject()->getFloat("Stock.0/Last");
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << e;
+ throw;
+ }
+
+ return stockPrice;
+}
+
+float MyValueImpl::getMyValueS(const string& customerID)
+{
+ cout << "In getMyValueS with customerid: " << customerID.c_str() << endl;
+ return 87.35f;
+}
+
+string MyValueImpl::getCustname(string& customerID)
+{
+ cout << "In getCustname with customerid: " << customerID.c_str() << endl;
+ customerID = "FRED";
+ cout << "setting customer name to " << customerID.c_str() <<endl;
+ return "done";
+}
+
+static string fred("FEREDDEYY");
+const string& MyValueImpl::getCustnamecs(string customerID)
+{
+ cout << "In getCustname with customerid: " << customerID.c_str() << endl;
+ customerID = "FRED";
+ cout << "setting customer name to " << customerID.c_str() <<endl;
+ return fred;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.h
new file mode 100644
index 0000000000..fa4053692e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl.h
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+
+class MyValueImpl : public MyValue
+{
+public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.cpp
new file mode 100644
index 0000000000..d34b63ea14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValue(const char* arg0)
+{
+ Operation operation("getMyValue");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueS(const string& arg0)
+{
+ Operation operation("getMyValueS");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustname( string& arg0)
+{
+ Operation operation("getCustname");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecs( string arg0)
+{
+ Operation operation("getCustnamecs");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.h
new file mode 100644
index 0000000000..742947ca69
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Proxy.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname( string& customerID);
+ virtual const string& getCustnamecs( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.cpp
new file mode 100644
index 0000000000..da60e4c1e3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValue")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValue(p0);
+ return;
+ }
+ if (operationName == "getMyValueS")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueS(p0);
+ return;
+ }
+ if (operationName == "getCustname")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustname(p0);
+ return;
+ }
+ if (operationName == "getCustnamecs")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecs(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.h
new file mode 100644
index 0000000000..82fbcf76cc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_MyValueService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.cpp
new file mode 100644
index 0000000000..cda55a99c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_customerInfo_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_customerInfo_Proxy* MyValueImpl_customerInfo_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_customerInfo_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_customerInfo_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_customerInfo_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_customerInfo_Proxy::MyValueImpl_customerInfo_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_customerInfo_Proxy::~MyValueImpl_customerInfo_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* MyValueImpl_customerInfo_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.h
new file mode 100644
index 0000000000..6ac33b4ef6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_customerInfo_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_customerInfo_Proxy_h
+#define MyValueImpl_customerInfo_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_customerInfo_Proxy : public CustomerInfo
+{
+public:
+ MyValueImpl_customerInfo_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_customerInfo_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_customerInfo_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.cpp
new file mode 100644
index 0000000000..6b0e4df2d5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_stockQuote_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_stockQuote_Proxy* MyValueImpl_stockQuote_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_stockQuote_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_stockQuote_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_stockQuote_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_stockQuote_Proxy::MyValueImpl_stockQuote_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_stockQuote_Proxy::~MyValueImpl_stockQuote_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+string MyValueImpl_stockQuote_Proxy::GetQuote(const char* arg0)
+{
+ Operation operation("GetQuote");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..54b70fd684
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/MyValueImpl_stockQuote_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_stockQuote_Proxy_h
+#define MyValueImpl_stockQuote_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_stockQuote_Proxy : public StockQuoteService
+{
+public:
+ MyValueImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_stockQuote_Proxy();
+ virtual string GetQuote(const char* request);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_stockQuote_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/StockQuoteService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/StockQuoteService.h
new file mode 100644
index 0000000000..e53f41c736
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/MyValue/StockQuoteService.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#ifndef StockQuoteService_h
+#define StockQuoteService_h
+#include <string>
+#include "commonj/sdo/SDO.h"
+using std::string;
+class StockQuoteService
+{
+public:
+ virtual string GetQuote(const char* request) = 0;
+
+};
+
+#endif // StockQuoteService_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtbuild b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtbuild
new file mode 100644
index 0000000000..73f28e14fd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtbuild
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 3.0.0?>
+
+<ManagedProjectBuildInfo>
+<project id="tuscany_sca_test.cdt.managedbuild.target.gnu.exe.2075572137" name="Executable (Gnu)" projectType="cdt.managedbuild.target.gnu.exe">
+<configuration artifactName="tuscany_sca_test" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.exe.debug.961609061" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1940833295" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1305113089" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.526049094" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+<option id="gnu.cpp.compiler.option.preprocessor.def.257257608" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+<listOptionValue builtIn="false" value="_DEBUG"/>
+</option>
+<option id="gnu.cpp.compiler.option.include.paths.2142231807" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/include"/>
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/test/MyValue"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.966487740" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.1717129068" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+<option id="gnu.cpp.link.option.libs.111258106" superClass="gnu.cpp.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="tuscany_sca"/>
+<listOptionValue builtIn="false" value="axis_clientC"/>
+<listOptionValue builtIn="false" value="axis_client"/>
+<listOptionValue builtIn="false" value="tuscany_sdo"/>
+<listOptionValue builtIn="false" value="xml2"/>
+</option>
+<option id="gnu.cpp.link.option.paths.746681481" superClass="gnu.cpp.link.option.paths" valueType="stringList">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src/Debug"/>
+<listOptionValue builtIn="false" value="${AXISCPP_DEPLOY}/lib"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/lib"/>
+</option>
+</tool>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.exe.debug.888159856" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug"/>
+<macros/>
+</toolChain>
+</configuration>
+<configuration artifactName="tuscany_sca_test" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.exe.release.278641057" name="Release" parent="cdt.managedbuild.config.gnu.exe.release">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.204044209" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.822246239" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.1002800488" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+<option id="gnu.cpp.compiler.option.include.paths.454857737" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/include"/>
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/test/MyValue"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1733957415" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.1578655729" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+<option id="gnu.cpp.link.option.libs.18758324" superClass="gnu.cpp.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="xml2"/>
+<listOptionValue builtIn="false" value="tuscany_sca"/>
+<listOptionValue builtIn="false" value="tuscany_sdo"/>
+<listOptionValue builtIn="false" value="axis_clientC"/>
+<listOptionValue builtIn="false" value="axis_client"/>
+</option>
+<option id="gnu.cpp.link.option.paths.1663707007" superClass="gnu.cpp.link.option.paths" valueType="stringList">
+<listOptionValue builtIn="false" value="${SCA4CPP_HOME}/runtime/core/src/Release"/>
+<listOptionValue builtIn="false" value="${SDO4CPP}/lib"/>
+<listOptionValue builtIn="false" value="${AXISCPP_DEPLOY}/lib"/>
+</option>
+</tool>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.exe.release.464104013" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release"/>
+<macros/>
+</toolChain>
+</configuration>
+<macros/>
+</project>
+</ManagedProjectBuildInfo>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtproject b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtproject
new file mode 100644
index 0000000000..48a12e6664
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.cdtproject
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject id="org.eclipse.cdt.managedbuilder.core.managedMake">
+<extension id="org.eclipse.cdt.managedbuilder.core.ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
+<data>
+<item id="org.eclipse.cdt.core.pathentry">
+<pathentry kind="src" path=""/>
+<pathentry kind="out" path=""/>
+<pathentry kind="con" path="org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER"/>
+</item>
+</data>
+</cdtproject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.project b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.project
new file mode 100644
index 0000000000..5e5b12e9d8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tuscany_sca_test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ </natures>
+</projectDescription>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000000..fe629d7d5b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,9 @@
+#Tue Nov 29 17:30:33 GMT 2005
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.961609061=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.release.278641057=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.961609061=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.release.278641057=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.exe.debug.961609061=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.exe.release.278641057=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/Makefile.am
new file mode 100644
index 0000000000..e9a449aaf0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/Makefile.am
@@ -0,0 +1,12 @@
+prgbindir=$(prefix)/bin/test
+prgbin_PROGRAMS = tuscany_sca_test
+SUBDIRS =
+AM_CPPFLAGS = $(CPPFLAGS)
+tuscany_sca_test_SOURCES = TestSCA.cpp
+
+tuscany_sca_test_LDADD = -L$(top_builddir)/runtime/core/src -ltuscany_sca \
+ -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo
+
+INCLUDES = -I$(top_builddir)/runtime/core/test/MyValue \
+ -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/TestSCA.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/TestSCA.cpp
new file mode 100644
index 0000000000..489fdab622
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/src/TestSCA.cpp
@@ -0,0 +1,86 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 11:33:21 $ */
+
+#include "tuscany/sca/util/Logger.h"
+#include "commonj/sdo/Logger.h"
+#include "osoa/sca/sca.h"
+#include <iostream>
+using namespace std;
+
+using namespace osoa::sca;
+#include "tuscany/sca/core/TuscanyRuntime.h"
+using namespace tuscany::sca;
+#include "MyValue.h"
+
+int main(int argc, char* argv[])
+{
+ tuscany::sca::Logger::setLogging(4);
+ commonj::sdo::Logger::setLogging(20);
+ cout << "Start of SCA test" << endl;
+
+ // Set default module
+ TuscanyRuntime runtime("SubSystem1");
+
+ try
+ {
+ runtime.start();
+
+ // Locate a service
+ ModuleContext myContext = ModuleContext::getCurrent();
+ ModuleContext myContext2 = myContext;
+
+ MyValue* myService = (MyValue*) myContext.locateService("MyValueServiceComponent");
+ if (myService == 0)
+ {
+ cout << "Unable to find service" << endl;
+ }
+ else
+ {
+
+ try
+ {
+ float value = myService->getMyValue("12345");
+ cout << "My value is: " << value << endl;
+ value = myService->getMyValueS("12345");
+ cout << "My valueSS is: " << value << endl;
+ string custid = "fred";
+ string name = myService->getCustname(custid);
+ cout << "Returned string: " << name.c_str() << " custid now: " << custid.c_str() <<endl;
+ custid = "fred";
+ const string& csname = myService->getCustnamecs(custid);
+ cout << "Returned string: " << csname.c_str() << " custid now: " << custid.c_str() <<endl;
+ //value = myService->getMyValue("999");
+ cout << "My value is: " << value << endl;
+ }
+ catch (char* x)
+ {
+ cout << "Exception caught: " << x << endl;
+ }
+ }
+ cout << "End of SCA test" << endl;
+
+ }
+ catch (ServiceRuntimeException& ex)
+ {
+ cout << ex << endl;
+ }
+
+ runtime.stop();
+ return 0;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment
new file mode 100644
index 0000000000..f473f59748
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfo.fragment
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="libCustomerInfo.so" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..48651b63fe
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/CustomerInfoImpl.componentType
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType
new file mode 100644
index 0000000000..ace4154966
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/MyValueImpl.componentType
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="customerInfo">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl
new file mode 100644
index 0000000000..5bce10d2f9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteService.wsdl
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://www.webserviceX.NET/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" targetNamespace="http://www.webserviceX.NET/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+ <wsdl:types>
+ <s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET/">
+ <s:element name="GetQuote">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="symbol" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+
+ </s:element>
+ <s:element name="GetQuoteResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="GetQuoteResult" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="string" nillable="true" type="s:string" />
+
+ </s:schema>
+ </wsdl:types>
+ <wsdl:message name="GetQuoteSoapIn">
+ <wsdl:part name="parameters" element="tns:GetQuote" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteSoapOut">
+ <wsdl:part name="parameters" element="tns:GetQuoteResponse" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetIn">
+
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetOut">
+ <wsdl:part name="Body" element="tns:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostIn">
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostOut">
+
+ <wsdl:part name="Body" element="tns:string" />
+ </wsdl:message>
+ <wsdl:portType name="StockQuoteSoap">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteSoapIn" />
+ <wsdl:output message="tns:GetQuoteSoapOut" />
+ </wsdl:operation>
+
+ </wsdl:portType>
+ <wsdl:portType name="StockQuoteHttpGet">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteHttpGetIn" />
+ <wsdl:output message="tns:GetQuoteHttpGetOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:portType name="StockQuoteHttpPost">
+ <wsdl:operation name="GetQuote">
+ <documentation xmlns="http://schemas.xmlsoap.org/wsdl/">Get Stock quote for a company Symbol</documentation>
+ <wsdl:input message="tns:GetQuoteHttpPostIn" />
+ <wsdl:output message="tns:GetQuoteHttpPostOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="StockQuoteSoap" type="tns:StockQuoteSoap">
+
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
+ <wsdl:operation name="GetQuote">
+ <soap:operation soapAction="http://www.webserviceX.NET/GetQuote" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuoteHttpGet" type="tns:StockQuoteHttpGet">
+ <http:binding verb="GET" />
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+ <wsdl:input>
+ <http:urlEncoded />
+ </wsdl:input>
+
+ <wsdl:output>
+ <mime:mimeXml part="Body" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuoteHttpPost" type="tns:StockQuoteHttpPost">
+ <http:binding verb="POST" />
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded" />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:mimeXml part="Body" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="StockQuote">
+
+ <wsdl:port name="StockQuoteSoap" binding="tns:StockQuoteSoap">
+ <soap:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuoteHttpGet" binding="tns:StockQuoteHttpGet">
+ <http:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuoteHttpPost" binding="tns:StockQuoteHttpPost">
+ <http:address location="http://www.webservicex.net/stockquote.asmx" />
+ </wsdl:port>
+
+ </wsdl:service>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd
new file mode 100644
index 0000000000..5bce3a63dc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/StockQuoteTypes.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="StockQuotes" type="tStockQuotes"/>
+ <xs:complexType name="tStockQuotes">
+ <xs:sequence>
+ <xs:element name="Stock" type="tStock" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+
+ <xs:complexType name="tStock">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1" name="Symbol" type="xs:string"/>
+ <xs:element minOccurs="0" maxOccurs="1" name="Last" type="xs:float"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config
new file mode 100644
index 0000000000..cba35b444b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/Tuscany-model.config
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="StockQuoteService.wsdl"/>
+ </wsdl>
+ <xsd>
+ <file name="StockQuoteTypes.xsd"/>
+ </xsd>
+</tuscany-model> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/sca.module
new file mode 100644
index 0000000000..b9b9b51036
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/modules/MyValueServiceModule/sca.module
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="libMyValue.so" header="MyValueImpl.h"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h"/>
+ <binding.ws port="http://www.webserviceX.NET/#wsdl.endpoint(StockQuote/StockQuoteSoap)"/>
+ </externalService>
+
+ <wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire>
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/subsystems/SubSystem1/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/subsystems/SubSystem1/sca.subsystem
new file mode 100644
index 0000000000..1b32bf8a93
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/core/test/testSCASystem/subsystems/SubSystem1/sca.subsystem
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
+
+ name="SubSystem1">
+
+ <moduleComponent name="MyValue" module="MyValueServiceModule">
+
+ </moduleComponent>
+
+</subsystem>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/Makefile.am
new file mode 100644
index 0000000000..f3ba006041
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = axis2c
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/Makefile.am
new file mode 100644
index 0000000000..af437a64d6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = src
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.cpp
new file mode 100644
index 0000000000..4064235062
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.cpp
@@ -0,0 +1,362 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#include "osoa/sca/export.h"
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4091)
+#endif
+
+#include <axis2_client.h>
+
+#include <axis2_error_default.h>
+#include <axis2_log_default.h>
+#include <axis2_defines.h>
+#include <axiom_soap_const.h>
+#include <platforms/axis2_platform_auto_sense.h>
+
+#include <sdo_axiom.h>
+#include "Axis2Client.h"
+
+
+#include <osoa/sca/sca.h>
+using namespace osoa::sca;
+#include "tuscany/sca/core/SCARuntime.h"
+#include "tuscany/sca/util/Logging.h"
+#include "tuscany/sca/model/WSBinding.h"
+#include "tuscany/sca/util/Utils.h"
+#include "tuscany/sca/util/Exceptions.h"
+
+using namespace tuscany::sca::ws;
+
+
+using namespace commonj::sdo;
+using namespace commonj::sdo_axiom;
+
+Axis2Client::Axis2Client(ExternalService* extService)
+ : externalService(extService)
+{
+}
+
+Axis2Client::~Axis2Client()
+{
+}
+
+void Axis2Client::invoke(tuscany::sca::Operation& operation)
+{
+ LOGENTRY(1, "Axis2Client::invoke");
+
+ // From the external service ws-binding, get the namespace of the wsdl endpoint
+ WSBinding* binding = (WSBinding *)externalService->getBinding();
+ // TODO check 0 throw
+
+ string portNamespace = binding->getWSDLNamespaceURL();
+
+ // Lookup the wsdl model from the module, keyed on the namespace
+ // (the wsdl will have been loaded at startup, based on the information in the config file)
+ Wsdl* wsdlDefinition = externalService->getContainingModule()->findWsdl(portNamespace);
+ if (wsdlDefinition == 0)
+ {
+ string msg = "WSDL not found for " + portNamespace;
+ throw SystemConfigurationException(msg.c_str());
+ }
+
+ const string& operationName = operation.getName();
+
+ // Match the operation in Operation to the operation in the wsdl port type.
+ const WsdlOperation& wsdlOperation = wsdlDefinition->findOperation(
+ binding->getServiceName(),
+ binding->getPortName(),
+ operationName);
+
+ // Initialize Axis2 stuff
+ axis2_allocator_t *allocator = axis2_allocator_init (NULL);
+ axis2_log_t *log = axis2_log_create(allocator, NULL, "tuscany_client.log");
+ axis2_error_t *error = axis2_error_create(allocator);
+ axis2_env_t *env = axis2_env_create_with_error_log(allocator, error, log);
+ env->log->level = AXIS2_LOG_LEVEL_TRACE;
+ axis2_error_init();
+
+ axis2_char_t* address = (axis2_char_t*)wsdlOperation.getEndpoint().c_str();
+ axis2_char_t* opName = (axis2_char_t*)operationName.c_str();
+ axis2_char_t* soap_action = (axis2_char_t*)wsdlOperation.getSoapAction().c_str();
+ axis2_char_t* serviceName = (axis2_char_t*)binding->getServiceName().c_str();
+
+ // create OM from Operation and wsdlOperation
+ axiom_node_t* payload = createPayload(operation, wsdlOperation, env);
+
+ /* Create EPR with given address */
+ axis2_endpoint_ref_t* endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ axis2_options_t* options = axis2_options_create(env);
+ AXIS2_OPTIONS_SET_TO(options, env, endpoint_ref);
+ int soap_version = AXIOM_SOAP11;
+ if (wsdlOperation.getSoapVersion() == WsdlOperation::SOAP12)
+ {
+ soap_version = AXIOM_SOAP12;
+ }
+
+ AXIS2_OPTIONS_SET_SOAP_VERSION(options, env, soap_version);
+ AXIS2_OPTIONS_SET_ACTION(options, env, soap_action);
+
+ /* Create service client */
+
+ axis2_char_t* client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home)
+ {
+ throw SystemConfigurationException("Environment error: AXIS2C_HOME not set");
+ }
+ axis2_svc_client_t* svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+
+ throw ServiceRuntimeException("Axis2Client: axis2_svc_client_create failed");
+ }
+
+ /* Set service client options */
+ AXIS2_SVC_CLIENT_SET_OPTIONS(svc_client, env, options);
+
+ /* Send request */
+ axiom_node_t* ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE(svc_client, env, payload);
+ if(ret_node)
+ {
+ setReturn(ret_node, operation, wsdlOperation, env);
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Invoke failed: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ throw ServiceRuntimeException("Axis2Client: Invoke failed");
+ }
+
+ if (svc_client)
+ {
+ AXIS2_SVC_CLIENT_FREE(svc_client, env);
+ svc_client = NULL;
+ }
+
+ LOGEXIT(1, "Axis2Client::invoke");
+}
+
+axiom_node_t* Axis2Client::createPayload(Operation& operation,
+ const WsdlOperation& wsdlOp,
+ axis2_env_t* env)
+{
+ LOGENTRY(1, "Axis2Client::createPayload");
+ axiom_node_t* requestOM = NULL;
+
+ // map the operation request to the wsdl
+ if (wsdlOp.isDocumentStyle())
+ {
+ // Document style
+ // only support single part messages - WS-I compliant
+
+ // Build up the payload as an SDO
+
+ // Get the data factory for the module (it will already have the typecreates loaded for the xsds)
+ DataFactoryPtr dataFactory = externalService->getContainingModule()->getDataFactory();
+ DataObjectPtr requestDO = dataFactory->create(wsdlOp.getInputTypeUri().c_str(),
+ wsdlOp.getInputTypeName().c_str());
+
+ // Each parameter in the operation should be a property on the request dataobject
+ for (int i=0; i<operation.getNParms(); i++)
+ {
+ Operation::Parameter& parm = operation.getParameter(i);
+ switch(parm.getType())
+ {
+ case Operation::BOOL:
+ {
+ requestDO->setBoolean(i, *(bool*)parm.getValue());
+ break;
+ }
+ case Operation::SHORT:
+ {
+ requestDO->setShort(i, *(short*)parm.getValue());
+ break;
+ }
+ case Operation::LONG:
+ {
+ requestDO->setLong(i, *(long*)parm.getValue());
+ break;
+ }
+ case Operation::USHORT:
+ {
+ requestDO->setInteger(i, *(unsigned short*)parm.getValue());
+ break;
+ }
+ case Operation::ULONG:
+ {
+ requestDO->setInteger(i, *(unsigned long*)parm.getValue());
+ break;
+ }
+ case Operation::FLOAT:
+ {
+ requestDO->setFloat(i, *(float*)parm.getValue());
+ break;
+ }
+ case Operation::DOUBLE:
+ {
+ requestDO->setDouble(i, *(double*)parm.getValue());
+ break;
+ }
+ case Operation::LONGDOUBLE:
+ {
+ requestDO->setDouble(i, *(long double*)parm.getValue());
+ break;
+ }
+ case Operation::CHARS:
+ {
+ requestDO->setCString(i, *(char**)parm.getValue());
+ break;
+ }
+ case Operation::STRING:
+ {
+ requestDO->setCString(i, (*(string*)parm.getValue()).c_str());
+ break;
+ }
+ case Operation::DATAOBJECT:
+ {
+ requestDO->setDataObject(i, *(DataObjectPtr*)parm.getValue());
+ break;
+ }
+ default: throw "unsupported parameter type";
+ }
+ }
+
+ // Create the Axiom object from the request dataobject
+ AxiomHelper myHelper;
+ requestOM = myHelper.toAxiomNode(requestDO);
+ }
+ else
+ {
+ // RPC
+ }
+
+ // Logging start
+ axiom_xml_writer_t* xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE, AXIS2_XML_PARSER_TYPE_BUFFER);
+ axiom_output_t* om_output = axiom_output_create( env, xml_writer);
+
+ AXIOM_NODE_SERIALIZE(requestOM, env, om_output);
+ axis2_char_t* buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(xml_writer, env);
+ LOGINFO_1(3, "Sending this OM node in XML : %s \n", buffer);
+ AXIOM_OUTPUT_FREE(om_output, env);
+ AXIS2_FREE((env)->allocator, buffer);
+ // Logging end
+
+ return requestOM;
+
+ LOGEXIT(1, "Axis2Client::createPayload");
+}
+
+void Axis2Client::setReturn(axiom_node_t* ret_node,
+ Operation& operation,
+ const WsdlOperation& wsdlOp,
+ axis2_env_t* env)
+{
+ LOGENTRY(1, "Axis2Client::setReturn");
+ /* Get the response value from the SOAP message */
+
+ // logging start
+ axiom_xml_writer_t* writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0, AXIS2_XML_PARSER_TYPE_BUFFER);
+ axiom_output_t* om_output = axiom_output_create (env, writer);
+ AXIOM_NODE_SERIALIZE (ret_node, env, om_output);
+ axis2_char_t* buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(writer, env);
+ LOGINFO_1(3,"Received OM node in XML : %s\n", buffer);
+ AXIOM_OUTPUT_FREE(om_output, env);
+ AXIS2_FREE((env)->allocator, buffer);
+ // Logging end
+
+
+ if (wsdlOp.isDocumentStyle())
+ {
+ // Document style
+
+ DataFactoryPtr dataFactory = externalService->getContainingModule()->getDataFactory();
+ AxiomHelper myHelper;
+ DataObjectPtr returnDO = myHelper.toSdo(ret_node, dataFactory);
+
+ unsigned int index = 0;
+ switch(operation.getReturnType())
+ {
+ case Operation::BOOL:
+ {
+ *(bool*)operation.getReturnValue() = returnDO->getBoolean(index);
+ break;
+ }
+ case Operation::SHORT:
+ {
+ *(short*)operation.getReturnValue() = returnDO->getShort(index);
+ break;
+ }
+ case Operation::LONG:
+ {
+ *(long*)operation.getReturnValue() = returnDO->getLong(index);
+ break;
+ }
+ case Operation::USHORT:
+ {
+ *(unsigned short*)operation.getReturnValue() = (unsigned short)returnDO->getInteger(index);
+ break;
+ }
+ case Operation::ULONG:
+ {
+ *(unsigned long*)operation.getReturnValue() = (unsigned long)returnDO->getInteger(index);
+ break;
+ }
+ case Operation::FLOAT:
+ {
+ *(float*)operation.getReturnValue() = returnDO->getFloat(index);
+ break;
+ }
+ case Operation::DOUBLE:
+ {
+ *(double*)operation.getReturnValue() = returnDO->getDouble(index);
+ break;
+ }
+ case Operation::LONGDOUBLE:
+ {
+ *(long double*)operation.getReturnValue() = returnDO->getDouble(index);
+ break;
+ }
+ case Operation::CHARS:
+ {
+ *(char**)operation.getReturnValue() = strdup(returnDO->getCString(index));
+ break;
+ }
+ case Operation::STRING:
+ {
+ *(string*)operation.getReturnValue() = returnDO->getCString(index);
+ break;
+ }
+ case Operation::DATAOBJECT:
+ {
+ *(DataObjectPtr*)operation.getReturnValue() = returnDO->getDataObject(index);
+ break;
+ }
+ default:;
+ }
+ }
+ else
+ {
+ // RPC
+ }
+ LOGEXIT(1, "Axis2Client::setReturn");
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.h
new file mode 100644
index 0000000000..c07e1fee4e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Axis2Client.h
@@ -0,0 +1,68 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef tuscany_sca_ws_axis2client_h
+#define tuscany_sca_ws_axis2client_h
+
+#include "osoa/sca/export.h"
+
+#include <axiom.h>
+
+#include <osoa/sca/export.h>
+
+#include "tuscany/sca/core/ExternalServiceWrapper.h"
+#include "tuscany/sca/model/ExternalService.h"
+
+#include "tuscany/sca/model/Wsdl.h"
+#include "tuscany/sca/core/Operation.h"
+using namespace tuscany::sca;
+using namespace tuscany::sca::model;
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace ws
+ {
+
+ class SCA_API Axis2Client
+ {
+ public:
+ Axis2Client(tuscany::sca::model::ExternalService* externalService);
+ virtual ~Axis2Client();
+
+ virtual void invoke(tuscany::sca::Operation& operation);
+
+ private:
+ tuscany::sca::model::ExternalService* externalService;
+
+ axiom_node_t* createPayload(Operation& operation,
+ const WsdlOperation& wsdlOp,
+ axis2_env_t* env);
+
+ void setReturn(axiom_node_t* returnNode,
+ Operation& operation,
+ const WsdlOperation& wsdlOp,
+ axis2_env_t* env);
+
+ };
+ } // End namespace ws
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_ws_axis2client_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Makefile.am
new file mode 100644
index 0000000000..60678dd31b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/Makefile.am
@@ -0,0 +1,26 @@
+lib_LTLIBRARIES = libtuscany_sca_ws_reference.la
+
+libtuscany_sca_ws_reference_la_SOURCES = WSServiceWrapper.cpp Axis2Client.cpp
+
+noinst_HEADERS = *.h
+
+AM_CPPFLAGS = $(CPPFLAGS) -D_DEBUG
+
+libtuscany_sca_ws_reference_la_LIBADD = \
+ -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo -ltuscany_sdo_axiom \
+ -L$(AXIS2C_HOME)/lib \
+ -laxis2_util \
+ -laxis2_axiom \
+ -laxis2_wsdl \
+ -laxis2_engine \
+ -laxis2_parser \
+ -laxis2_minizip \
+ -lpthread \
+ -laxis2_http_sender \
+ -laxis2_http_receiver
+
+
+INCLUDES = -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include \
+ -I${AXIS2C_HOME}/include
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/WSServiceWrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/WSServiceWrapper.cpp
new file mode 100644
index 0000000000..2a4d6a1d8d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_reference/axis2c/src/WSServiceWrapper.cpp
@@ -0,0 +1,71 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4091)
+#endif
+
+#include "tuscany/sca/ws/WSServiceWrapper.h"
+
+#include "Axis2Client.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+
+#include "tuscany/sca/util/Logging.h"
+using namespace tuscany::sca;
+using namespace tuscany::sca::ws;
+
+
+
+
+WSServiceWrapper::WSServiceWrapper(tuscany::sca::model::WireTarget* target) : ExternalServiceWrapper(target)
+{
+
+}
+
+WSServiceWrapper::~WSServiceWrapper()
+{
+
+}
+
+///
+/// This method will be called when a web service call needs to be made.
+///
+void WSServiceWrapper::invoke(Operation& operation)
+{
+ LOGENTRY(1, "WSServiceWrapper::invoke");
+
+ const string& operationName = operation.getName();
+
+ LOGINFO_2(2,"External service: %s, Operation: %s", getTarget()->getName().c_str() , operationName.c_str());
+
+ for (unsigned int i=0; i<operation.getNParms(); i++)
+ {
+ LOGINFO_2(2, "Parameter %p, Type %u", operation.getParameterValue(i),(int) operation.getParameterType(i));
+ }
+
+ // From the external service ws-binding, get the namespace of the wsdl endpoint
+ ExternalService* externalService = getExternalService();
+
+ Axis2Client client(externalService);
+ client.invoke(operation);
+
+ LOGEXIT(1, "WSServiceWrapper::invoke");
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/Makefile.am
new file mode 100644
index 0000000000..f3ba006041
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = axis2c
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/Makefile.am
new file mode 100644
index 0000000000..af437a64d6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = src
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2EntryPointService_skeleton.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2EntryPointService_skeleton.cpp
new file mode 100644
index 0000000000..c2a06e05c0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2EntryPointService_skeleton.cpp
@@ -0,0 +1,253 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * 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.
+ */
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#pragma warning(disable: 4091)
+#endif
+
+#include <axis2_svc_skeleton.h>
+#include <axis2_array_list.h>
+#include <axis2_log_default.h>
+#include <axis2_error_default.h>
+#include <axiom.h>
+#include <stdio.h>
+
+#include <sdo_axiom.h>
+using namespace commonj::sdo;
+using namespace commonj::sdo_axiom;
+
+#include "tuscany/sca/util/Utils.h"
+using namespace tuscany::sca;
+
+#include "tuscany/sca/ws/EntryPointProxy.h"
+#include "Axis2Utils.h"
+using namespace tuscany::sca::ws;
+
+
+int AXIS2_CALL
+Axis2EntryPointService_free(axis2_svc_skeleton_t *svc_skeleton,
+ const axis2_env_t *env);
+
+/*
+ * This method invokes the right service method
+ */
+axiom_node_t* AXIS2_CALL
+Axis2EntryPointService_invoke(axis2_svc_skeleton_t *svc_skeleton,
+ const axis2_env_t *env,
+ axiom_node_t *node,
+ axis2_msg_ctx_t *msg_ctx);
+
+int AXIS2_CALL Axis2EntryPointService_init(axis2_svc_skeleton_t *svc_skeleton,
+ const axis2_env_t *env);
+
+EntryPointProxy* entryPointProxy = NULL;
+
+axis2_svc_skeleton_t *
+axis2_Axis2EntryPointService_create(axis2_env_t *env)
+{
+ axis2_svc_skeleton_t *svc_skeleton = NULL;
+ svc_skeleton = (axis2_svc_skeleton_t *) AXIS2_MALLOC((env)->allocator,
+ sizeof(axis2_svc_skeleton_t));
+
+
+ svc_skeleton->ops = (axis2_svc_skeleton_ops_t *) AXIS2_MALLOC(
+ (env)->allocator, sizeof(axis2_svc_skeleton_ops_t));
+
+ svc_skeleton->func_array = NULL;
+
+ svc_skeleton->ops->free = Axis2EntryPointService_free;
+ svc_skeleton->ops->init = Axis2EntryPointService_init;
+ svc_skeleton->ops->invoke = Axis2EntryPointService_invoke;
+ /*svc_skeleton->ops->on_fault = Axis2Service_on_fault;*/
+
+ if(entryPointProxy == NULL)
+ {
+ entryPointProxy = EntryPointProxy::getInstance();
+ }
+
+ return svc_skeleton;
+}
+
+int AXIS2_CALL
+Axis2EntryPointService_init(axis2_svc_skeleton_t *svc_skeleton,
+ const axis2_env_t *env)
+{
+ // This method never seems to be called - an old Axis2C artifact?
+
+ svc_skeleton->func_array = axis2_array_list_create(env, 0);
+ return AXIS2_SUCCESS;
+}
+
+int AXIS2_CALL
+Axis2EntryPointService_free(axis2_svc_skeleton_t *svc_skeleton,
+ const axis2_env_t *env)
+{
+ /*if(svc_skeleton->func_array)
+ {
+ AXIS2_ARRAY_LIST_FREE(svc_skeleton->func_array, env);
+ svc_skeleton->func_array = NULL;
+ }*/
+
+ if(svc_skeleton->ops)
+ {
+ AXIS2_FREE((env)->allocator, svc_skeleton->ops);
+ svc_skeleton->ops = NULL;
+ }
+
+ if(svc_skeleton)
+ {
+ AXIS2_FREE((env)->allocator, svc_skeleton);
+ svc_skeleton = NULL;
+ }
+ return AXIS2_SUCCESS;
+}
+
+/*
+ * This method invokes the right service method
+ */
+axiom_node_t* AXIS2_CALL
+Axis2EntryPointService_invoke(axis2_svc_skeleton_t *svc_skeleton,
+ const axis2_env_t *env,
+ axiom_node_t *node,
+ axis2_msg_ctx_t *msg_ctx)
+{
+ axiom_node_t *returnNode = node;
+
+ /* Depending on the function name invoke the
+ * corresponding Axis2Service method
+ */
+ if (node)
+ {
+ if (AXIOM_NODE_GET_NODE_TYPE(node, env) == AXIOM_ELEMENT)
+ {
+ axiom_element_t *element = NULL;
+ element = (axiom_element_t *)AXIOM_NODE_GET_DATA_ELEMENT(node, env);
+ if (element)
+ {
+ // This gets the operation name from the root element name - this is correct for DocLit Wrapped style
+ axis2_char_t *op_name = AXIOM_ELEMENT_GET_LOCALNAME(element, env);
+ if (op_name)
+ {
+ char* systemRoot = Axis2Utils::getAxisServiceParameterValue(env, msg_ctx, "TuscanySystemRoot");
+ char* fullEntryPointName = Axis2Utils::getAxisServiceParameterValue(env, msg_ctx, "TuscanyEntryPoint");
+
+ AXIS2_LOG_INFO((env)->log, "Axis2EntryPointService invoke called with system root: %s entrypoint name: %s operation name: %s", systemRoot, fullEntryPointName, op_name);
+
+ //LOGINFO_2(4, "Axis2EntryPointService invoke called with system root: %s and entrypoint name: %s", systemRoot, fullEntryPointName);
+ //LOGINFO_1(4, "Axis2EntryPointService invoke called with operation", op_name);
+ entryPointProxy->init(systemRoot, fullEntryPointName);
+
+ //Utils::printTypes(entryPointProxy->getDataFactory());
+
+ AxiomHelper* axiomHelper = AxiomHelper::getHelper();
+ if (entryPointProxy->getDataFactory() == 0)
+ {
+ AXIS2_LOG_ERROR((env)->log, AXIS2_LOG_SI, "Axis2EntryPointService_invoke: EntryPoint has no SCA implementation");
+ return 0;
+ }
+
+ char* om_str = NULL;
+ om_str = AXIOM_NODE_TO_STRING(node, env);
+ if (om_str)
+ {
+ AXIS2_LOG_INFO((env)->log, "Axis2EntryPointService invoke has request OM: %s\n", om_str);
+ }
+
+ DataObjectPtr inputDataObject = axiomHelper->toSdo(node, entryPointProxy->getDataFactory());
+
+ //printf("Axis2EntryPoint inputDataObject: (%d)\n", inputDataObject);
+
+ if(!inputDataObject)
+ {
+ AXIS2_LOG_ERROR((env)->log, AXIS2_LOG_SI, "Axis2EntryPointService_invoke: Could not convert received Axiom node to SDO");
+ //LOGERROR(0, "Axis2EntryPointService_invoke: Failure whilst invoking EntryPoint");
+ /** TODO: return a SOAP fault here */
+ return 0;
+ }
+ //Utils::printDO(inputDataObject);
+
+ DataObjectPtr outputDataObject = entryPointProxy->invoke(op_name, inputDataObject);
+
+ //printf("Axis2EntryPoint outputDataObject: %d\n", outputDataObject);
+ //Utils::printDO(outputDataObject);
+ //printf("Axis2EntryPoint outputDataObject printed\n");
+ if(!outputDataObject)
+ {
+ AXIS2_LOG_ERROR((env)->log, AXIS2_LOG_SI, "Axis2EntryPointService_invoke: Failure whilst invoking EntryPoint");
+ //LOGERROR(0, "Axis2EntryPointService_invoke: Failure whilst invoking EntryPoint");
+ /** TODO: return a SOAP fault here */
+ return 0;
+ }
+
+ returnNode = axiomHelper->toAxiomNode(outputDataObject);
+
+ om_str = NULL;
+ om_str = AXIOM_NODE_TO_STRING(returnNode, env);
+ if (om_str)
+ {
+ AXIS2_LOG_INFO((env)->log, "Axis2EntryPointService invoke has response OM : %s\n", om_str);
+ }
+
+ AxiomHelper::releaseHelper(axiomHelper);
+
+ //LOGEXIT(1, "Axis2EntryPointService_invoke");
+ return returnNode;
+ }
+ }
+ }
+ }
+
+ AXIS2_LOG_ERROR((env)->log, AXIS2_LOG_SI, "Axis2EntryPointService_invoke: invalid OM parameters in request");
+ //LOGERROR(0, "Axis2Service service ERROR: invalid OM parameters in request\n");
+
+ /** TODO: return a SOAP fault here */
+ return node;
+}
+
+
+extern "C"
+{
+/**
+ * Following block distinguish the exposed part of the dll.
+ */
+
+AXIS2_EXPORT int axis2_get_instance(axis2_svc_skeleton **inst,
+ axis2_env_t *env)
+{
+ *inst = axis2_Axis2EntryPointService_create(env);
+ /*if(NULL != *inst)
+ {
+ status = *inst->init();
+ }*/
+ if(!(*inst))
+ {
+ return AXIS2_FAILURE;
+ }
+
+ return AXIS2_SUCCESS;
+}
+
+AXIS2_EXPORT int axis2_remove_instance(axis2_svc_skeleton_t *inst,
+ axis2_env_t *env)
+{
+ axis2_status_t status = AXIS2_FAILURE;
+ if (inst)
+ {
+ status = AXIS2_SVC_SKELETON_FREE(inst, env);
+ }
+ return status;
+}
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.cpp
new file mode 100644
index 0000000000..7007e71c96
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.cpp
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#pragma warning(disable: 4091)
+#endif
+#include "Axis2Utils.h"
+
+#include <axis2_svc_ctx.h>
+#include <axis2_defines.h>
+
+#include "tuscany/sca/util/Logging.h"
+
+using namespace tuscany::sca;
+using namespace tuscany::sca::ws;
+
+
+/* Static utility method to retrieve service parameters from the service.xml file
+ * Get an odd linking error if this method (or the header's it requires) are in
+ * a different class.
+ */
+char* Axis2Utils::getAxisServiceParameterValue(const axis2_env_t *env, axis2_msg_ctx_t *msg_ctx, char* parameterName)
+{
+ struct axis2_svc *svc = NULL;
+ struct axis2_op_ctx *op_ctx = NULL;
+ struct axis2_svc_ctx *svc_ctx = NULL;
+ axis2_param_t *param = NULL;
+ char* paramValue = NULL;
+
+ LOGENTRY(1, "Axis2Utils::getAxisServiceParameterValue");
+
+ op_ctx = AXIS2_MSG_CTX_GET_OP_CTX(msg_ctx, env);
+ svc_ctx = AXIS2_OP_CTX_GET_PARENT(op_ctx, env);
+ svc = AXIS2_SVC_CTX_GET_SVC(svc_ctx, env);
+ if(NULL == svc)
+ {
+ return NULL;
+ }
+
+ param = AXIS2_SVC_GET_PARAM(svc, env, parameterName);
+ if(!param)
+ {
+ LOGERROR_1(0,"Axis parameter %s cannot be found", parameterName);
+ }
+ else
+ {
+ paramValue = (char*) AXIS2_PARAM_GET_VALUE(param, env);
+ }
+
+ LOGEXIT(1, "Axis2Utils::getAxisServiceParameterValue");
+ return paramValue;
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.h
new file mode 100644
index 0000000000..a998ed8682
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Axis2Utils.h
@@ -0,0 +1,41 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef tuscany_sca_ws_axis2utils_h
+#define tuscany_sca_ws_axis2utils_h
+
+#include <axis2_env.h>
+#include <axis2_msg_ctx.h>
+
+
+namespace tuscany
+{
+ namespace sca
+ {
+ namespace ws
+ {
+
+ class Axis2Utils
+ {
+ public:
+ static char* getAxisServiceParameterValue(const axis2_env_t *env, axis2_msg_ctx_t *msg_ctx, char* parameterName);
+ };
+ } // End namespace ws
+ } // End namespace sca
+} // End namespace tuscany
+
+#endif // tuscany_sca_ws_axis2utils_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Makefile.am
new file mode 100644
index 0000000000..22bf2f2276
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/runtime/ws_service/axis2c/src/Makefile.am
@@ -0,0 +1,27 @@
+lib_LTLIBRARIES = libtuscany_sca_ws_service.la
+
+libtuscany_sca_ws_service_la_SOURCES = Axis2EntryPointService_skeleton.cpp Axis2Utils.cpp
+
+noinst_HEADERS = *.h
+
+AM_CPPFLAGS = $(CPPFLAGS) -D_DEBUG
+
+libtuscany_sca_ws_service_la_LIBADD = \
+ -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo -ltuscany_sdo_axiom \
+ -L$(top_builddir)/runtime/core/src -ltuscany_sca \
+ -L$(AXIS2C_HOME)/lib \
+ -laxis2_util \
+ -laxis2_axiom \
+ -laxis2_wsdl \
+ -laxis2_engine \
+ -laxis2_parser \
+ -lpthread \
+ -laxis2_minizip \
+ -laxis2_http_sender \
+ -laxis2_http_receiver
+
+
+INCLUDES = -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include \
+ -I${AXIS2C_HOME}/include
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/AUTHORS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/AUTHORS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/AUTHORS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.cpp
new file mode 100644
index 0000000000..004c02fd9e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.cpp
@@ -0,0 +1,130 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "..\Accounts\AccountService.h"
+#include "osoa/sca/sca.h"
+#include <iostream>
+#include <stdlib.h>
+
+using namespace osoa::sca;
+using namespace std;
+using namespace com::bigbank::account;
+using namespace commonj::sdo;
+
+int main(int argc, char* argv[])
+{
+
+ if (argc != 2)
+ {
+ cout << "AccountClient.exe: Argument must be the name of the account" << endl;
+ return 0;
+ }
+ try
+ {
+
+ // Locate a service
+ ModuleContext myContext = ModuleContext::getCurrent();
+ AccountService *accountService =
+ (AccountService*) myContext.locateService("AccountServiceComponent");
+ if (accountService == 0)
+ {
+ cout << "AccountClient.exe: Unable to find Account service" << endl;
+ }
+ else
+ {
+ try
+ {
+ // exercise the account service
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("AccountService.wsdl");
+
+ DataObjectPtr in = mdg->create("http://www.bigbank.com/AccountService","cid");
+ in->setCString("customerID",argv[1]);
+
+ DataObjectPtr report =
+ accountService->getAccountReport(in);
+
+ if (report != 0)
+ {
+ int i;
+ char balanceStr[20];
+ float balance;
+
+ cout << "My Account Report" << endl;
+ cout << "=================" << endl;
+
+ DataObjectList& stocks = report->getList("stocks");
+
+ for (i=0;i< stocks.size() ;i++)
+ {
+ cout << "Stock Account " << stocks[i]->getCString("accountNumber") << endl;
+ cout << "Stock Symbol : " << stocks[i]->getCString("symbol") << endl;
+ cout << " Holding : " << stocks[i]->getCString("quantity") << endl;
+ balance = stocks[i]->getFloat("balance");
+ sprintf(balanceStr,"%.2f",balance);
+ cout << " Value : " << balanceStr << endl << endl;
+ }
+
+ DataObjectList& checking = report->getList("checking");
+
+ for (i=0;i< checking.size() ;i++)
+ {
+ cout << "Checking Account " << checking[i]->getCString("accountNumber") << endl;
+ balance = checking[i]->getFloat("balance");
+ sprintf(balanceStr,"%.2f",balance);
+ cout << " Balance : " << balanceStr << endl << endl;
+ }
+
+ DataObjectList& savings = report->getList("savings");
+
+ for (i=0;i< savings.size() ;i++)
+ {
+ cout << "Savings Account " << savings[i]->getCString("accountNumber") << endl;
+ balance = savings[i]->getFloat("balance");
+ sprintf(balanceStr,"%.2f",balance);
+ cout << " Balance : " << balanceStr << endl << endl;
+ }
+
+ cout << endl;
+ }
+ }
+ catch (SDORuntimeException& e)
+ {
+ cout << e << endl;
+ }
+ catch (char* x)
+ {
+ cout << "AccountService.exe: exception caught: " << x << endl;
+ }
+ }
+
+ }
+ catch (ServiceRuntimeException& ex)
+ {
+ cout << ex << endl;
+ }
+ return 0;
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.dsp
new file mode 100644
index 0000000000..cf1c043ae2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/AccountClient/AccountClient.dsp
@@ -0,0 +1,102 @@
+# Microsoft Developer Studio Project File - Name="AccountClient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=AccountClient - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "AccountClient.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "AccountClient.mak" CFG="AccountClient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "AccountClient - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "AccountClient - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "AccountClient - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "AccountClient - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# SUBTRACT CPP /X
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib tuscany_sca.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"Accounts" /libpath:"$(TUSCANY_SCACPP)/lib" /libpath:"$(TUSCANY_SDOCPP)/lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "AccountClient - Win32 Release"
+# Name "AccountClient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\AccountClient.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataService.h
new file mode 100644
index 0000000000..1603ed2ccb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataService.h
@@ -0,0 +1,62 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "commonj/sdo/SDO.h"
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace account
+ {
+
+ /*
+ * AccountDataService C interface
+ */
+
+ class AccountDataService {
+
+ public:
+
+ // CheckingAccount is a data object containing
+ // String "accountNumber"
+ // float balance
+
+ virtual commonj::sdo::DataObjectPtr /* CheckingAccount*/ getCheckingAccount(
+ const char *id) = 0;
+
+ // SavingsAccount is a data object containing
+ // String accountNumber
+ // float balance
+
+ virtual commonj::sdo::DataObjectPtr /* SavingsAccount */ getSavingsAccount(
+ const char *id) = 0;
+
+ // StockAccount is a data object containing
+ // String accountNumber
+ // String symbol
+ // int quantity
+
+ virtual commonj::sdo::DataObjectPtr /* StockAccount */ getStockAccount (
+ const char* id) = 0;
+
+
+ };
+
+}
+}
+} // namespace;
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.componentType
new file mode 100644
index 0000000000..740f9b01d6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.componentType
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="AccountDataService">
+ <interface.cpp header="AccountDataService.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.cpp
new file mode 100644
index 0000000000..ec72b4d5b9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.cpp
@@ -0,0 +1,140 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "commonj/sdo/SDO.h"
+
+#include "AccountDataServiceImpl.h"
+
+using namespace commonj::sdo;
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace account
+ {
+
+ DataObjectPtr /* CheckingAccount*/ AccountDataServiceImpl::getCheckingAccount(
+ const char *id)
+ {
+ try {
+
+ DataFactoryPtr factory = DataFactory::getDataFactory();
+
+ XSDHelperPtr helper = HelperProvider::getXSDHelper(factory);
+
+ helper->defineFile("AccountService.wsdl");
+
+ DataObjectPtr newaccount =
+ factory->create("http://www.bigbank.com/AccountService","CheckingAccount");
+
+ char* name = new char[strlen(id) + 10];
+ strcpy(name,id);
+ strcat(name,"_CHA12345");
+
+ newaccount->setCString("accountNumber",name);
+
+ delete name;
+
+ newaccount->setFloat("balance",1500.0f);
+
+ return newaccount;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ return 0;
+ }
+ }
+
+
+
+ DataObjectPtr /* SavingsAccount */ AccountDataServiceImpl::getSavingsAccount(
+ const char *id)
+ {
+ try {
+
+ DataFactoryPtr factory = DataFactory::getDataFactory();
+
+ XSDHelperPtr helper = HelperProvider::getXSDHelper(factory);
+
+ helper->defineFile("AccountService.wsdl");
+
+ DataObjectPtr newaccount =
+ factory->create("http://www.bigbank.com/AccountService","SavingsAccount");
+
+ char* name = new char[strlen(id) + 10];
+ strcpy(name,id);
+ strcat(name,"_SAA12345");
+
+ newaccount->setCString("accountNumber",name);
+
+ delete name;
+
+ newaccount->setFloat("balance",1500.0f);
+
+ return newaccount;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ return 0;
+ }
+ }
+
+
+ DataObjectPtr /* StockAccount */ AccountDataServiceImpl::getStockAccount (
+ const char* id)
+ {
+ try {
+
+ DataFactoryPtr factory = DataFactory::getDataFactory();
+
+ XSDHelperPtr helper = HelperProvider::getXSDHelper(factory);
+
+ helper->defineFile("AccountService.wsdl");
+
+ DataObjectPtr newaccount =
+ factory->create("http://www.bigbank.com/AccountService","StockAccount");
+
+ char* name = new char[strlen(id) + 10];
+ strcpy(name,id);
+ strcat(name,"_STA12345");
+
+ newaccount->setCString("accountNumber",name);
+
+ delete name;
+
+ newaccount->setCString("symbol","IBM");
+
+ newaccount->setInteger("quantity",100);
+
+ return newaccount;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ return 0;
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.h
new file mode 100644
index 0000000000..6423c58795
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl.h
@@ -0,0 +1,61 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "AccountDataService.h"
+
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace account
+ {
+
+ /*
+ * AccountDataService C interface
+ */
+
+ class AccountDataServiceImpl : public AccountDataService {
+
+ public:
+ // CheckingAccount is a data object containing
+ // String "accountNumber"
+ // float balance
+
+ virtual DataObjectPtr /* CheckingAccount*/ getCheckingAccount(
+ const char *id);
+
+ // SavingsAccount is a data object containing
+ // String accountNumber
+ // float balance
+
+ virtual DataObjectPtr /* SavingsAccount */ getSavingsAccount(
+ const char *id);
+
+ // StockAccount is a data object containing
+ // String accountNumber
+ // String symbol
+ // int quantity
+
+ virtual DataObjectPtr /* StockAccount */ getStockAccount (
+ const char* id);
+
+ };
+ }
+ }
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.cpp
new file mode 100644
index 0000000000..dbc1588881
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.cpp
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "AccountDataServiceImpl_AccountDataService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ AccountDataServiceImpl_AccountDataService_Proxy* AccountDataServiceImpl_AccountDataService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new AccountDataServiceImpl_AccountDataService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void AccountDataServiceImpl_AccountDataService_Proxy_Destructor(void* proxy)
+ {
+ delete (AccountDataServiceImpl_AccountDataService_Proxy*)proxy;
+ }
+}
+
+AccountDataServiceImpl_AccountDataService_Proxy::AccountDataServiceImpl_AccountDataService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+AccountDataServiceImpl_AccountDataService_Proxy::~AccountDataServiceImpl_AccountDataService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+commonj::sdo::DataObjectPtr AccountDataServiceImpl_AccountDataService_Proxy::getCheckingAccount(const char* arg0)
+{
+ Operation operation("getCheckingAccount");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+commonj::sdo::DataObjectPtr AccountDataServiceImpl_AccountDataService_Proxy::getSavingsAccount(const char* arg0)
+{
+ Operation operation("getSavingsAccount");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+commonj::sdo::DataObjectPtr AccountDataServiceImpl_AccountDataService_Proxy::getStockAccount(const char* arg0)
+{
+ Operation operation("getStockAccount");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.h
new file mode 100644
index 0000000000..c86af7e128
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Proxy.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AccountDataServiceImpl_AccountDataService_Proxy_h
+#define AccountDataServiceImpl_AccountDataService_Proxy_h
+
+#include "AccountDataService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class AccountDataServiceImpl_AccountDataService_Proxy : public com::bigbank::account::AccountDataService
+{
+public:
+ AccountDataServiceImpl_AccountDataService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~AccountDataServiceImpl_AccountDataService_Proxy();
+ virtual commonj::sdo::DataObjectPtr getCheckingAccount(const char* id);
+ virtual commonj::sdo::DataObjectPtr getSavingsAccount(const char* id);
+ virtual commonj::sdo::DataObjectPtr getStockAccount(const char* id);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // AccountDataServiceImpl_AccountDataService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.cpp
new file mode 100644
index 0000000000..424ea7fdfb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "AccountDataServiceImpl_AccountDataService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ AccountDataServiceImpl_AccountDataService_Wrapper* AccountDataServiceImpl_AccountDataService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new AccountDataServiceImpl_AccountDataService_Wrapper(target);
+ }
+}
+
+AccountDataServiceImpl_AccountDataService_Wrapper::AccountDataServiceImpl_AccountDataService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (com::bigbank::account::AccountDataServiceImpl*)getImplementation();
+}
+
+AccountDataServiceImpl_AccountDataService_Wrapper::~AccountDataServiceImpl_AccountDataService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* AccountDataServiceImpl_AccountDataService_Wrapper::newImplementation()
+{
+ return new com::bigbank::account::AccountDataServiceImpl;
+}
+
+void AccountDataServiceImpl_AccountDataService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void AccountDataServiceImpl_AccountDataService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCheckingAccount")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(commonj::sdo::DataObjectPtr*)operation.getReturnValue() = impl->getCheckingAccount(p0);
+ return;
+ }
+ if (operationName == "getSavingsAccount")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(commonj::sdo::DataObjectPtr*)operation.getReturnValue() = impl->getSavingsAccount(p0);
+ return;
+ }
+ if (operationName == "getStockAccount")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(commonj::sdo::DataObjectPtr*)operation.getReturnValue() = impl->getStockAccount(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.h
new file mode 100644
index 0000000000..af43114af0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountDataServiceImpl_AccountDataService_Wrapper.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AccountDataServiceImpl_AccountDataService_Wrapper_h
+#define AccountDataServiceImpl_AccountDataService_Wrapper_h
+
+#include "AccountDataServiceImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class AccountDataServiceImpl_AccountDataService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ AccountDataServiceImpl_AccountDataService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~AccountDataServiceImpl_AccountDataService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ com::bigbank::account::AccountDataServiceImpl* impl;
+};
+
+#endif // AccountDataServiceImpl_AccountDataService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.h
new file mode 100644
index 0000000000..eb1a585c52
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.h
@@ -0,0 +1,58 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * AccountService.h
+ *
+ */
+
+
+#include <commonj/sdo/SDO.h>
+
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace account
+ {
+
+ /*
+ * AccountService C interface
+ */
+
+ class AccountService {
+
+ public:
+
+ //The account report data object has one many-valued
+ // property "accountSummaries".
+ // This had properties
+ // String accountNumber
+ // String accountType
+ // Float balance.
+
+ virtual commonj::sdo::DataObjectPtr /*AccountReport*/
+ getAccountReport(DataObjectPtr cid) = 0;
+
+
+ };
+
+ }
+ }
+} // namespaces
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.wsdl
new file mode 100644
index 0000000000..9362ab56c0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountService.wsdl
@@ -0,0 +1,97 @@
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+xmlns:tns="http://www.bigbank.com/AccountService"
+xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+targetNamespace="http://www.bigbank.com/AccountService"
+name="AccountService" >
+
+<wsdl:types>
+ <xsd:schema
+ targetNamespace="http://www.bigbank.com/AccountService"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:complexType name="cid">
+ <xsd:sequence>
+ <xsd:element name="customerID" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="customerID" type="tns:cid" />
+
+ <xsd:element name="getAccountReportResponse" type="tns:AccountReport" />
+
+ <xsd:complexType name="AccountReport">
+ <xsd:sequence>
+ <xsd:element name="checking" type="tns:CheckingAccount"
+ maxOccurs="unbounded"/>
+ <xsd:element name="savings" type="tns:SavingsAccount"
+ maxOccurs="unbounded"/>
+ <xsd:element name="stocks" type="tns:StockAccount"
+ maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="StockAccount">
+ <xsd:sequence>
+ <xsd:element name="accountNumber" type="xsd:string"/>
+ <xsd:element name="symbol" type="xsd:string"/>
+ <xsd:element name="quantity" type="xsd:integer"/>
+ <xsd:element name="balance" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="CheckingAccount">
+ <xsd:sequence>
+ <xsd:element name="accountNumber" type="xsd:string"/>
+ <xsd:element name="balance" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="SavingsAccount">
+ <xsd:sequence>
+ <xsd:element name="accountNumber" type="xsd:string"/>
+ <xsd:element name="balance" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+</wsdl:types>
+
+<wsdl:message name="getAccountReportRequest">
+ <wsdl:part element="tns:customerID" name="getAccountReportRequest" />
+</wsdl:message>
+
+<wsdl:message name="getAccountReportResponse">
+ <wsdl:part element="tns:AccountReport"
+ name="getAccountReportResponse" />
+</wsdl:message>
+
+<wsdl:portType name="AccountService">
+ SCA Sample Application 16 November 2005
+ <wsdl:operation name="getAccountReport">
+ <wsdl:input message="tns:getAccountReportRequest" />
+ <wsdl:output message="tns:getAccountReportResponse" />
+ </wsdl:operation>
+</wsdl:portType>
+
+<wsdl:binding name="AccountServiceSOAP" type="tns:AccountService">
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="getAccountReport">
+ <soap:operation
+ soapAction="http://www.bigbank.com/AccountService/getAccountReport" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+</wsdl:binding>
+
+<wsdl:service name="AccountService">
+ <wsdl:port binding="tns:AccountServiceSOAP"
+ name="AccountServiceSOAP">
+ <soap:address location="http://localhost:9090/axis2/services/Account" />
+ </wsdl:port>
+</wsdl:service>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.componenttype b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.componenttype
new file mode 100644
index 0000000000..7ab7736069
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.componenttype
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="AccountService">
+ <interface.cpp header="AccountService.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="AccountDataService">
+ <interface.cpp header="AccountDataService.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+ <property name="currency" type="xs:string"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp
new file mode 100644
index 0000000000..c78b5963bf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp
@@ -0,0 +1,186 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "AccountServiceImpl.h"
+#include "StockQuoteService.h"
+#include "AccountDataService.h"
+
+#include "osoa/sca/sca.h"
+
+using namespace osoa::sca;
+
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace account
+ {
+
+ AccountServiceImpl::AccountServiceImpl()
+ {
+ initialized = false;
+ // Note - cannot use the component context within the constructor - need to move this
+ // code out to lazy init on first use.
+
+ //ComponentContext myContext = ComponentContext::getCurrent();
+
+ //dataService =
+ // (AccountDataService*)myContext.getService("AccountDataService");
+
+ //stockService =
+ // (StockQuoteService*)myContext.getService("StockQuoteService");
+
+ }
+
+ //void AccountServiceImpl::lazyGetDependencies()
+ //{
+ // cant do this either - the context cannot be instantiated
+ // resolve the references on call only
+
+ //theContext = ComponentContext::getCurrent();
+
+ //dataService =
+ // (AccountDataService*)theContext.getService("AccountDataService");
+
+ //stockService =
+ // (StockQuoteService*)theContext.getService("stockQuote");
+
+ //initialized = true;
+ //}
+
+ AccountServiceImpl::~AccountServiceImpl()
+ {
+ }
+
+ DataObjectPtr /*AccountReport**/
+ AccountServiceImpl::getAccountReport(DataObjectPtr cid)
+ {
+ try {
+
+ commonj::sdo::DataFactoryPtr factory =
+ commonj::sdo::DataFactory::getDataFactory();
+
+ commonj::sdo::XSDHelperPtr helper =
+ commonj::sdo::HelperProvider::getXSDHelper(factory);
+
+ helper->defineFile("AccountService.wsdl");
+
+ const char* id = cid->getCString("customerID");
+
+ commonj::sdo::DataObjectPtr newReport =
+ factory->create("http://www.bigbank.com/AccountService","AccountReport");
+
+ ComponentContext theContext = ComponentContext::getCurrent();
+
+ com::bigbank::account::AccountDataService *dataService =
+ (com::bigbank::account::AccountDataService*)theContext.getService("AccountDataService");
+
+ if (dataService == 0)
+ {
+ std::cout << "No Account Data Service registered" << std::endl;
+ return newReport;
+ }
+
+ // would be better to return a list of accounts - this only
+ // gets the first of each.
+
+ commonj::sdo::DataObjectPtr checking =
+ dataService->getCheckingAccount(id);
+
+ if (checking != 0)
+ {
+ commonj::sdo::DataObjectList& dl = newReport->getList("checking");
+ checking->setFloat("balance",
+ fromUSDollarToCurrency(checking->getFloat("balance")));
+ dl.append(checking);
+ }
+
+ commonj::sdo::DataObjectPtr savings = dataService->getSavingsAccount(id);
+
+ if (savings != 0)
+ {
+ commonj::sdo::DataObjectList& dl = newReport->getList("savings");
+ savings->setFloat("balance",
+ fromUSDollarToCurrency(savings->getFloat("balance")));
+ dl.append(savings);
+ }
+
+ com::bigbank::stockquote::StockQuoteService* stockService =
+ (StockQuoteService*)theContext.getService("stockQuote");
+
+ if (stockService == 0)
+ {
+ std::cout << "No Stock Quote Data Service registered" << std::endl;
+ return newReport;
+ }
+
+ commonj::sdo::DataObjectPtr stocks = dataService->getStockAccount(id);
+
+ if (stocks != 0)
+ {
+ commonj::sdo::DataObjectList& dl = newReport->getList("stocks");
+
+ float value = 10.0f;
+ try {
+ value = stockService->getQuote(
+ stocks->getCString("symbol"));
+ }
+ catch (ServiceRuntimeException& e)
+ {
+ std::cout << "Fault from stock quote service" << e << std::endl;
+ }
+ stocks->setFloat("balance",
+ fromUSDollarToCurrency(stocks->getInteger("quantity") *
+ value));
+ dl.append(stocks);
+ }
+ return newReport;
+ }
+ catch (SDORuntimeException& e)
+ {
+ std::cout << "Error from SDO: " << e << std::endl;
+ return 0;
+ }
+ }
+
+
+ float AccountServiceImpl::fromUSDollarToCurrency(float value)
+ {
+ // get the property "currency"
+ ComponentContext myContext = ComponentContext::getCurrent();
+
+ commonj::sdo::DataObjectInstance properties = myContext.getProperties();
+ if (properties)
+ {
+ const char* currency = properties->getCString("currency");
+ if (currency != 0)
+ {
+ std::cout << "Currency is : " << currency << std::endl;
+ if (!strcmp(currency,"USD")) return value;
+ if (!strcmp(currency,"EURO")) return 0.8f * value;
+ }
+ }
+ return 0.0f;
+ }
+ }
+ }
+} // namespaces
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.h
new file mode 100644
index 0000000000..1e506f1ed1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl.h
@@ -0,0 +1,58 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "AccountService.h"
+
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace account
+ {
+
+class AccountServiceImpl: public AccountService
+ {
+
+ public:
+
+
+ AccountServiceImpl();
+ virtual ~AccountServiceImpl();
+
+ // public API
+
+ virtual DataObjectPtr /*AccountReport*/
+ getAccountReport(DataObjectPtr cid);
+
+
+ //virtual void lazyGetDependencies();
+
+private:
+
+
+ float fromUSDollarToCurrency(float value);
+
+ bool initialized;
+
+};
+
+}
+}
+} // namespaces
+
+using namespace com::bigbank::account;
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.cpp
new file mode 100644
index 0000000000..a0441b213a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.cpp
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "AccountServiceImpl_AccountDataService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ AccountServiceImpl_AccountDataService_Proxy* AccountServiceImpl_AccountDataService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new AccountServiceImpl_AccountDataService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void AccountServiceImpl_AccountDataService_Proxy_Destructor(void* proxy)
+ {
+ delete (AccountServiceImpl_AccountDataService_Proxy*)proxy;
+ }
+}
+
+AccountServiceImpl_AccountDataService_Proxy::AccountServiceImpl_AccountDataService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+AccountServiceImpl_AccountDataService_Proxy::~AccountServiceImpl_AccountDataService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+commonj::sdo::DataObjectPtr AccountServiceImpl_AccountDataService_Proxy::getCheckingAccount(const char* arg0)
+{
+ Operation operation("getCheckingAccount");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+commonj::sdo::DataObjectPtr AccountServiceImpl_AccountDataService_Proxy::getSavingsAccount(const char* arg0)
+{
+ Operation operation("getSavingsAccount");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+commonj::sdo::DataObjectPtr AccountServiceImpl_AccountDataService_Proxy::getStockAccount(const char* arg0)
+{
+ Operation operation("getStockAccount");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.h
new file mode 100644
index 0000000000..ff5c6e6d87
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountDataService_Proxy.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#ifndef AccountServiceImpl_AccountDataService_Proxy_h
+#define AccountServiceImpl_AccountDataService_Proxy_h
+
+#include "AccountDataService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class AccountServiceImpl_AccountDataService_Proxy : public com::bigbank::account::AccountDataService
+{
+public:
+ AccountServiceImpl_AccountDataService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~AccountServiceImpl_AccountDataService_Proxy();
+ virtual commonj::sdo::DataObjectPtr getCheckingAccount(const char* id);
+ virtual commonj::sdo::DataObjectPtr getSavingsAccount(const char* id);
+ virtual commonj::sdo::DataObjectPtr getStockAccount(const char* id);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // AccountServiceImpl_AccountDataService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.cpp
new file mode 100644
index 0000000000..1684266b3e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "AccountServiceImpl_AccountService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ AccountServiceImpl_AccountService_Proxy* AccountServiceImpl_AccountService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new AccountServiceImpl_AccountService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void AccountServiceImpl_AccountService_Proxy_Destructor(void* proxy)
+ {
+ delete (AccountServiceImpl_AccountService_Proxy*)proxy;
+ }
+}
+
+AccountServiceImpl_AccountService_Proxy::AccountServiceImpl_AccountService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+AccountServiceImpl_AccountService_Proxy::~AccountServiceImpl_AccountService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+commonj::sdo::DataObjectPtr AccountServiceImpl_AccountService_Proxy::getAccountReport( DataObjectPtr arg0)
+{
+ Operation operation("getAccountReport");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.h
new file mode 100644
index 0000000000..3b5df16198
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AccountServiceImpl_AccountService_Proxy_h
+#define AccountServiceImpl_AccountService_Proxy_h
+
+#include "AccountService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class AccountServiceImpl_AccountService_Proxy : public com::bigbank::account::AccountService
+{
+public:
+ AccountServiceImpl_AccountService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~AccountServiceImpl_AccountService_Proxy();
+ virtual commonj::sdo::DataObjectPtr getAccountReport( DataObjectPtr cid);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // AccountServiceImpl_AccountService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.cpp
new file mode 100644
index 0000000000..1b97e5c4d0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "AccountServiceImpl_AccountService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ AccountServiceImpl_AccountService_Wrapper* AccountServiceImpl_AccountService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new AccountServiceImpl_AccountService_Wrapper(target);
+ }
+}
+
+AccountServiceImpl_AccountService_Wrapper::AccountServiceImpl_AccountService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (AccountServiceImpl*)getImplementation();
+}
+
+AccountServiceImpl_AccountService_Wrapper::~AccountServiceImpl_AccountService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* AccountServiceImpl_AccountService_Wrapper::newImplementation()
+{
+ return new AccountServiceImpl;
+}
+
+void AccountServiceImpl_AccountService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void AccountServiceImpl_AccountService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getAccountReport")
+ {
+ DataObjectPtr& p0 = *(DataObjectPtr*)operation.getParameterValue(0); *(commonj::sdo::DataObjectPtr*)operation.getReturnValue() = impl->getAccountReport(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.h
new file mode 100644
index 0000000000..9dce3fd05d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_AccountService_Wrapper.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AccountServiceImpl_AccountService_Wrapper_h
+#define AccountServiceImpl_AccountService_Wrapper_h
+
+#include "AccountServiceImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class AccountServiceImpl_AccountService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ AccountServiceImpl_AccountService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~AccountServiceImpl_AccountService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ AccountServiceImpl* impl;
+};
+
+#endif // AccountServiceImpl_AccountService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.cpp
new file mode 100644
index 0000000000..be1b432353
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "AccountServiceImpl_stockQuote_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ AccountServiceImpl_stockQuote_Proxy* AccountServiceImpl_stockQuote_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new AccountServiceImpl_stockQuote_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void AccountServiceImpl_stockQuote_Proxy_Destructor(void* proxy)
+ {
+ delete (AccountServiceImpl_stockQuote_Proxy*)proxy;
+ }
+}
+
+AccountServiceImpl_stockQuote_Proxy::AccountServiceImpl_stockQuote_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+AccountServiceImpl_stockQuote_Proxy::~AccountServiceImpl_stockQuote_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float AccountServiceImpl_stockQuote_Proxy::getQuote(const char* arg0)
+{
+ Operation operation("getQuote");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..d63d507bf4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/AccountServiceImpl_stockQuote_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef AccountServiceImpl_stockQuote_Proxy_h
+#define AccountServiceImpl_stockQuote_Proxy_h
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class AccountServiceImpl_stockQuote_Proxy : public com::bigbank::stockquote::StockQuoteService
+{
+public:
+ AccountServiceImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~AccountServiceImpl_stockQuote_Proxy();
+ virtual float getQuote(const char* symbol);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // AccountServiceImpl_stockQuote_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/Accounts.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/Accounts.dsp
new file mode 100644
index 0000000000..52c450a2bd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/Accounts.dsp
@@ -0,0 +1,250 @@
+# Microsoft Developer Studio Project File - Name="Accounts" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Accounts - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Accounts.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Accounts.mak" CFG="Accounts - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Accounts - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Accounts - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Accounts - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ACCOUNTS_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ACCOUNTS_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+
+!ELSEIF "$(CFG)" == "Accounts - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ACCOUNTS_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SCACPP)\include" /I "$(TUSCANY_SDOCPP)\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "ACCOUNTS_EXPORTS" /YX /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"$(TUSCANY_SCACPP)/lib" /libpath:"$(TUSCANY_SDOCPP)/lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Accounts - Win32 Release"
+# Name "Accounts - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\AccountDataServiceImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountDataServiceImpl_AccountDataService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountDataServiceImpl_AccountDataService_Wrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_AccountDataService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_AccountDataService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_AccountService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_AccountService_Wrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_stockQuote_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl_StockQuoteExternal_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl_StockQuoteService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl_StockQuoteService_Wrapper.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\AccountDataService.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountDataServiceImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountDataServiceImpl_AccountDataService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountDataServiceImpl_AccountDataService_Wrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountService.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_AccountService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_AccountService_Wrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl_stockQuote_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteExternalService.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteService.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl_StockQuoteExternal_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl_StockQuoteService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl_StockQuoteService_Wrapper.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\WSAccountClient\services.xml
+# End Source File
+# Begin Source File
+
+SOURCE="..\WSAccountClient\Tuscany-model.config"
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\AccountDataServiceImpl.componentType
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountService.wsdl
+# End Source File
+# Begin Source File
+
+SOURCE=.\AccountServiceImpl.componenttype
+# End Source File
+# Begin Source File
+
+SOURCE=.\sca.module
+# End Source File
+# Begin Source File
+
+SOURCE=.\sca.subsystem
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteService.wsdl
+# End Source File
+# Begin Source File
+
+SOURCE=.\StockQuoteServiceImpl.componentType
+# End Source File
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteExternalService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteExternalService.h
new file mode 100644
index 0000000000..d8df90651d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteExternalService.h
@@ -0,0 +1,24 @@
+#include "commonj/sdo/SDO.h"
+using namespace commonj::sdo;
+
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace stockquote
+ {
+
+ /*
+ * AccountsService C interface
+ */
+
+ class StockQuoteExternalService {
+ public:
+ virtual const char* GetQuote(const char* symbol) = 0;
+
+ };
+
+ }
+ }
+} // namespace;
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.h
new file mode 100644
index 0000000000..cd61d4c4d2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.h
@@ -0,0 +1,24 @@
+
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace stockquote
+ {
+
+ /*
+ * AccountsService C interface
+ */
+
+ class StockQuoteService {
+ public:
+ virtual float getQuote(const char* symbol) = 0;
+
+ };
+
+ }
+ }
+} // namespace;
+
+using namespace com::bigbank::stockquote;
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.wsdl
new file mode 100644
index 0000000000..ba6caff22c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteService.wsdl
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<wsdl:definitions
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://www.quickstockquote.com/StockQuoteService/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.quickstockquote.com/StockQuoteService/"
+ name="StockQuoteService">
+
+ <wsdl:types>
+ <xsd:schema
+ targetNamespace="http://www.quickstockquote.com/StockQuoteService/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:element name="getQuote">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="symbol" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="getQuoteResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="quote" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="getQuote">
+ <wsdl:part element="tns:getQuote" name="getQuote" />
+ </wsdl:message>
+ <wsdl:message name="getQuoteResponse">
+ <wsdl:part element="tns:getQuoteResponse" name="getQuoteResponse" />
+ </wsdl:message>
+
+ <wsdl:portType name="StockQuoteService">
+ <wsdl:operation name="getQuote">
+ <wsdl:input message="tns:getQuote" />
+ <wsdl:output message="tns:getQuoteResponse" />
+ </wsdl:operation>
+ </wsdl:portType>
+
+ <wsdl:binding name="StockQuoteServiceSOAP"
+ type="tns:StockQuoteService">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="getQuote">
+ <soap:operation
+ soapAction="http://www.quickstockquote.com/StockQuoteService/getQuote" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="StockQuoteService">
+ <wsdl:port binding="tns:StockQuoteServiceSOAP"
+ name="StockQuoteServiceSOAP">
+ <soap:address location="http://www.quickstockquote.com/services/StockQuoteService"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.componentType
new file mode 100644
index 0000000000..92e46f2638
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.componentType
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="StockQuoteExternal">
+ <interface.cpp header="StockQuoteExternalService.h">
+ </interface.cpp>
+ </reference>
+
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.cpp
new file mode 100644
index 0000000000..8ce6d410c2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.cpp
@@ -0,0 +1,63 @@
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteServiceImpl.h"
+#include "StockQuoteExternalService.h"
+
+#include "osoa/sca/sca.h"
+#include "commonj/sdo/SDO.h"
+
+using namespace osoa::sca;
+using namespace commonj::sdo;
+
+namespace com{
+ namespace bigbank{
+ namespace stockquote {
+
+
+ float StockQuoteServiceImpl::getQuote(const char *symbol)
+ {
+ ComponentContext myContext = ComponentContext::getCurrent();
+
+ // Use an SCA reference to get the stock price
+ StockQuoteExternalService* stockQuoteExternalService =
+ (StockQuoteExternalService*)myContext.
+ getService("StockQuoteExternal");
+
+ if (stockQuoteExternalService == 0)
+ {
+ std::cout << "unable to find external stock quote service" << std::endl;
+ return 0.1f;
+ }
+
+ // Create a data object representing the requests (use dynamic API until static is available)
+ DataObjectPtr requestDO;
+
+ // Invoke the service
+ const char* result = stockQuoteExternalService->GetQuote(symbol);
+
+ //std::cout << result<< std::endl;
+
+ float stockPrice = 0.0f;
+
+ try
+ {
+ XMLHelperPtr xmlHelper = HelperProvider::getXMLHelper(myContext.getDataFactory());
+ XMLDocumentPtr stockDoc = xmlHelper->load(result);
+ if (stockDoc->getRootDataObject())
+ {
+ stockPrice=stockDoc->getRootDataObject()->getFloat("Stock.0/Last");
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ std::cout << e << std::endl;
+ return 0.0f;
+ }
+ return stockPrice;
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.h
new file mode 100644
index 0000000000..7611984e4e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl.h
@@ -0,0 +1,25 @@
+
+#include "StockQuoteService.h"
+
+
+namespace com
+{
+ namespace bigbank
+ {
+ namespace stockquote
+ {
+
+ /*
+ * AccountsService C interface
+ */
+
+ class StockQuoteServiceImpl : public StockQuoteService {
+ public:
+ virtual float getQuote(const char* symbol);
+
+ };
+
+
+}
+}
+} // namespace;
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.cpp
new file mode 100644
index 0000000000..b618dd4a33
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteServiceImpl_StockQuoteExternal_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ StockQuoteServiceImpl_StockQuoteExternal_Proxy* StockQuoteServiceImpl_StockQuoteExternal_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new StockQuoteServiceImpl_StockQuoteExternal_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void StockQuoteServiceImpl_StockQuoteExternal_Proxy_Destructor(void* proxy)
+ {
+ delete (StockQuoteServiceImpl_StockQuoteExternal_Proxy*)proxy;
+ }
+}
+
+StockQuoteServiceImpl_StockQuoteExternal_Proxy::StockQuoteServiceImpl_StockQuoteExternal_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+StockQuoteServiceImpl_StockQuoteExternal_Proxy::~StockQuoteServiceImpl_StockQuoteExternal_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* StockQuoteServiceImpl_StockQuoteExternal_Proxy::GetQuote(const char* arg0)
+{
+ Operation operation("GetQuote");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.h
new file mode 100644
index 0000000000..45469174ce
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteExternal_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef StockQuoteServiceImpl_StockQuoteExternal_Proxy_h
+#define StockQuoteServiceImpl_StockQuoteExternal_Proxy_h
+
+#include "StockQuoteExternalService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class StockQuoteServiceImpl_StockQuoteExternal_Proxy : public com::bigbank::stockquote::StockQuoteExternalService
+{
+public:
+ StockQuoteServiceImpl_StockQuoteExternal_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~StockQuoteServiceImpl_StockQuoteExternal_Proxy();
+ virtual const char* GetQuote(const char* symbol);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // StockQuoteServiceImpl_StockQuoteExternal_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.cpp
new file mode 100644
index 0000000000..43dabb5307
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.cpp
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteServiceImpl_StockQuoteService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ StockQuoteServiceImpl_StockQuoteService_Proxy* StockQuoteServiceImpl_StockQuoteService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new StockQuoteServiceImpl_StockQuoteService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void StockQuoteServiceImpl_StockQuoteService_Proxy_Destructor(void* proxy)
+ {
+ delete (StockQuoteServiceImpl_StockQuoteService_Proxy*)proxy;
+ }
+}
+
+StockQuoteServiceImpl_StockQuoteService_Proxy::StockQuoteServiceImpl_StockQuoteService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+StockQuoteServiceImpl_StockQuoteService_Proxy::~StockQuoteServiceImpl_StockQuoteService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float StockQuoteServiceImpl_StockQuoteService_Proxy::getQuote(const char* arg0)
+{
+ Operation operation("getQuote");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.h
new file mode 100644
index 0000000000..e1b0ad1807
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef StockQuoteServiceImpl_StockQuoteService_Proxy_h
+#define StockQuoteServiceImpl_StockQuoteService_Proxy_h
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class StockQuoteServiceImpl_StockQuoteService_Proxy : public com::bigbank::stockquote::StockQuoteService
+{
+public:
+ StockQuoteServiceImpl_StockQuoteService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~StockQuoteServiceImpl_StockQuoteService_Proxy();
+ virtual float getQuote(const char* symbol);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // StockQuoteServiceImpl_StockQuoteService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.cpp
new file mode 100644
index 0000000000..00ac26c784
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteServiceImpl_StockQuoteService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ StockQuoteServiceImpl_StockQuoteService_Wrapper* StockQuoteServiceImpl_StockQuoteService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new StockQuoteServiceImpl_StockQuoteService_Wrapper(target);
+ }
+}
+
+StockQuoteServiceImpl_StockQuoteService_Wrapper::StockQuoteServiceImpl_StockQuoteService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (StockQuoteServiceImpl*)getImplementation();
+}
+
+StockQuoteServiceImpl_StockQuoteService_Wrapper::~StockQuoteServiceImpl_StockQuoteService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* StockQuoteServiceImpl_StockQuoteService_Wrapper::newImplementation()
+{
+ return new StockQuoteServiceImpl;
+}
+
+void StockQuoteServiceImpl_StockQuoteService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void StockQuoteServiceImpl_StockQuoteService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getQuote")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getQuote(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.h
new file mode 100644
index 0000000000..a6d8580e5e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/StockQuoteServiceImpl_StockQuoteService_Wrapper.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef StockQuoteServiceImpl_StockQuoteService_Wrapper_h
+#define StockQuoteServiceImpl_StockQuoteService_Wrapper_h
+
+#include "StockQuoteServiceImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class StockQuoteServiceImpl_StockQuoteService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ StockQuoteServiceImpl_StockQuoteService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~StockQuoteServiceImpl_StockQuoteService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ StockQuoteServiceImpl* impl;
+};
+
+#endif // StockQuoteServiceImpl_StockQuoteService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.module
new file mode 100644
index 0000000000..8560a3cb72
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.module
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright (c) 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9" xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ name="AccountModule">
+
+ <component name="AccountServiceComponent">
+ <implementation.cpp dll="Accounts.dll" header="AccountServiceImpl.h"/>
+ <references>
+ <AccountDataService>AccountDataServiceComponent</AccountDataService>
+ <stockQuote>StockQuoteServiceComponent</stockQuote>
+ </references>
+ <properties>
+ <v:currency>EURO</v:currency>
+ </properties>
+ </component>
+
+ <component name="AccountDataServiceComponent">
+ <implementation.cpp dll="Accounts.dll" header="AccountDataServiceImpl.h"/>
+ </component>
+
+ <component name="StockQuoteServiceComponent">
+ <implementation.cpp dll="Accounts.dll" header="StockQuoteServiceImpl.h"/>
+ <references>
+ <StockQuoteExternal>StockQuoteExternalService</StockQuoteExternal>
+ </references>
+ </component>
+
+ <externalService name="StockQuoteExternalService">
+ <interface.cpp header="StockQuoteExternalService.h"/>
+ <binding.ws port="http://www.webserviceX.NET/#wsdl.endpoint(StockQuote/StockQuoteSoap)"/>
+ </externalService>
+
+ <entryPoint name="WSAccountEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="AccountService.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="http://www.bigbank.com/AccountService#wsdl.endpoint(AccountService/AccountServiceSOAP)"></binding.ws>
+ <reference>AccountServiceComponent</reference>
+ </entryPoint>
+
+</module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.subsystem
new file mode 100644
index 0000000000..faaa828bf9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/Accounts/sca.subsystem
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
+
+ name="AccountSubsystem">
+
+ <moduleComponent name="Account" module="AccountModule">
+
+ </moduleComponent>
+
+</subsystem>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.dsw b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.dsw
new file mode 100644
index 0000000000..42d7f5a82e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.dsw
@@ -0,0 +1,53 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "AccountClient"=.\AccountClient\AccountClient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Accounts"=.\Accounts\Accounts.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "WSAccountClient"=.\WSAccountClient\WSAccountClient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.ncb b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.ncb
new file mode 100644
index 0000000000..8b4beb8420
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/BigBank.ncb
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/Tuscany-model.config
new file mode 100644
index 0000000000..41a4ec3ebb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/Tuscany-model.config
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="AccountService.wsdl"/>
+ </wsdl>
+ <xsd>
+ </xsd>
+</tuscany-model>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.cpp
new file mode 100644
index 0000000000..f794dc6112
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.cpp
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#include "axis2_Account_stub.h"
+#include <stdio.h>
+#include <axiom.h>
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+axiom_node_t *
+build_om_programatically(const axis2_env_t *env,
+ const axis2_char_t *operation,
+ const axis2_char_t *param1
+ );
+
+int main(int argc, char** argv)
+{
+ axis2_stub_t *stub = NULL;
+ axiom_node_t *node = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+ const axis2_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ const axis2_char_t *client_home = NULL;
+ axiom_node_t *ret_node = NULL;
+
+ const axis2_char_t *operation = "getAccountReport";
+ const axis2_char_t *param1 = "ED";
+
+ env = axis2_env_create_all( "Account_blocking.log", AXIS2_LOG_LEVEL_TRACE);
+
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home)
+ client_home = "../../deploy";
+
+ address = "http://localhost:9090/axis2/services/Account";
+ if (argc > 1 )
+ operation = argv[1];
+ if (AXIS2_STRCMP(operation, "-h") == 0)
+ {
+ printf("Usage : %s [operation] [param1] [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ printf("default operation add\n");
+ printf("default param1 %s\n", param1);
+ printf("default endpoint_url %s\n", address);
+ printf("NOTE: command line arguments must appear in given order, with trailing ones being optional\n");
+ return 0;
+ }
+ if (argc > 2 )
+ param1 = argv[2];
+ if (argc > 3 )
+ address = argv[3];
+
+ printf ("Using endpoint : %s\n", address);
+ printf ("\nInvoking operation %s with param %s \n", operation, param1);
+
+ node = build_om_programatically(env, operation, param1);
+ stub =
+ axis2_Account_stub_create_with_endpoint_uri_and_client_home(env, address, client_home);
+ /* create node and invoke Calculator */
+ ret_node = axis2_Account_stub_getAccountReport(stub, env, node);
+ if(ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = AXIOM_NODE_TO_STRING(ret_node, env);
+ if(om_str)
+ {
+ printf("\nOM returned = %s\n", om_str);
+ }
+
+ //if (AXIOM_NODE_GET_NODE_TYPE(ret_node, env) == AXIOM_ELEMENT)
+ //{
+ // axis2_char_t *result = NULL;
+ // axiom_node_t *result_node = (axiom_node_t*)AXIOM_NODE_GET_FIRST_CHILD(ret_node, env);
+ // axiom_element_t *data_ele = (axiom_element_t*)AXIOM_NODE_GET_DATA_ELEMENT(result_node, env);
+
+ // result = AXIOM_ELEMENT_GET_TEXT(data_ele, env, result_node);
+ // printf( "\nResult = %s\n", result);
+ //}
+ //else
+ //{
+ // axiom_xml_writer_t *writer = NULL;
+ // axiom_output_t *om_output = NULL;
+ // axis2_char_t *buffer = NULL;
+ // writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0,
+ // AXIS2_XML_PARSER_TYPE_BUFFER);
+ // om_output = axiom_output_create (env, writer);
+
+ // AXIOM_NODE_SERIALIZE (ret_node, env, om_output);
+ // buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(writer, env);
+ // printf ("\nReceived invalid OM as result : %s\n", buffer);
+ // if(NULL != buffer)
+ // {
+ // AXIS2_FREE(env->allocator, buffer);
+ // buffer = NULL;
+ // }
+ // if(NULL != om_output)
+ // {
+ // AXIOM_OUTPUT_FREE(om_output, env);
+ // om_output = NULL;
+ // }
+ //}
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("Account stub invoke FAILED!\n");
+ }
+ if (stub)
+ {
+ AXIS2_STUB_FREE(stub, env);
+ }
+ return status;
+}
+
+axiom_node_t *
+build_om_programatically(const axis2_env_t *env,
+ const axis2_char_t *operation,
+ const axis2_char_t *param1
+ )
+{
+ axiom_node_t *Account_om_node = NULL;
+ axiom_element_t* Account_om_ele = NULL;
+ axiom_node_t* text_om_node = NULL;
+ axiom_element_t * text_om_ele = NULL;
+ axiom_node_t* first_om_node = NULL;
+ axiom_element_t * first_om_ele = NULL;
+ axiom_namespace_t *ns1 = NULL;
+
+
+ axiom_xml_writer_t *xml_writer = NULL;
+ axiom_output_t *om_output = NULL;
+ axis2_char_t *buffer = NULL;
+
+ ns1 = axiom_namespace_create (env, "http://www.bigbank.com/AccountService", "ns1");
+
+ Account_om_ele = axiom_element_create(env, NULL, operation, ns1, &Account_om_node);
+
+ first_om_ele = axiom_element_create(env, Account_om_node, "customerID", NULL, &first_om_node);
+
+ text_om_ele = axiom_element_create(env, first_om_node, "customerID", NULL, &text_om_node);
+
+ AXIOM_ELEMENT_SET_TEXT(text_om_ele, env, param1, text_om_node);
+
+ xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE,
+ AXIS2_XML_PARSER_TYPE_BUFFER);
+ om_output = axiom_output_create( env, xml_writer);
+
+ AXIOM_NODE_SERIALIZE(Account_om_node, env, om_output);
+ buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(xml_writer, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "\nSending OM node in XML : %s \n", buffer);
+ if(NULL != buffer)
+ {
+ AXIS2_FREE(env->allocator, buffer);
+ buffer = NULL;
+ }
+ if(NULL != om_output)
+ {
+ AXIOM_OUTPUT_FREE(om_output, env);
+ om_output = NULL;
+ }
+
+ return Account_om_node;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.dsp
new file mode 100644
index 0000000000..db382db6ff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/WSAccountClient.dsp
@@ -0,0 +1,109 @@
+# Microsoft Developer Studio Project File - Name="WSAccountClient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=WSAccountClient - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "WSAccountClient.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "WSAccountClient.mak" CFG="WSAccountClient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "WSAccountClient - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "WSAccountClient - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "WSAccountClient - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+
+!ELSEIF "$(CFG)" == "WSAccountClient - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"$(TUSCANY_SCACPP)\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "WSAccountClient - Win32 Release"
+# Name "WSAccountClient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\axis2_Account_stub.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\WSAccountClient.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\axis2_Account_stub.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.cpp
new file mode 100644
index 0000000000..d9198b29ec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.cpp
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#include "axis2_Account_stub.h"
+
+
+axis2_stub_t *
+axis2_Account_stub_create_with_endpoint_ref_and_client_home(const axis2_env_t *env,
+ axis2_endpoint_ref_t *endpoint_ref,
+ axis2_char_t *client_home)
+{
+ axis2_stub_t *stub = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ stub = (axis2_stub_t *)
+ axis2_stub_create_with_endpoint_ref_and_client_home(env, endpoint_ref,
+ client_home);
+ if(NULL == stub)
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_NO_MEMORY, (axis2_status_codes)AXIS2_FAILURE);
+ return NULL;
+ }
+ axis2_populate_axis_service( stub, env);
+ return stub;
+}
+
+void axis2_populate_axis_service( axis2_stub_t* stub, const axis2_env_t *env)
+{
+ axis2_svc_client_t* svc_client = NULL;
+ axis2_qname_t *op_qname = NULL;
+ axis2_svc_t* svc = NULL;
+ axis2_op_t* op = NULL;
+
+ /*Modifying the Service*/
+ svc_client = AXIS2_STUB_GET_SVC_CLIENT (stub, env );
+ svc = (axis2_svc_t*)AXIS2_SVC_CLIENT_GET_AXIS_SERVICE ( svc_client, env );
+
+ /*creating the operations*/
+
+ op_qname = axis2_qname_create(env,"getAccountReport" , "", NULL);
+ op = axis2_op_create_with_qname(env, op_qname);
+ AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN);
+ AXIS2_SVC_ADD_OP(svc, env, op);
+
+ }
+
+axis2_stub_t *
+axis2_Account_stub_create_with_endpoint_uri_and_client_home(const axis2_env_t *env,
+ const axis2_char_t *endpoint_uri,
+ const axis2_char_t *client_home)
+{
+ axis2_stub_t *stub = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ stub = (axis2_stub_t *)
+ axis2_stub_create_with_endpoint_uri_and_client_home(env, endpoint_uri,
+ client_home);
+ if(NULL == stub)
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_NO_MEMORY, (axis2_status_codes)AXIS2_FAILURE);
+ return NULL;
+ }
+
+ axis2_populate_axis_service( stub, env);
+
+ return stub;
+}
+
+/***************************Function implementation****************************/
+
+axiom_node_t *
+axis2_Account_stub_getAccountReport(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node)
+{
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *ret_node = NULL;
+ axis2_qname_t *op_qname = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env);
+ op_qname = axis2_qname_create(env, "getAccountReport" , "", NULL);
+ ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node);
+
+ return ret_node;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.h
new file mode 100644
index 0000000000..53f07263b8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/axis2_Account_stub.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#ifndef AXIS2_ECHO_STUB_H
+#define AXIS2_ECHO_STUB_H
+
+/**
+ * @file axis2_Calculator_stub.h
+ * @brief axis2 Calculator stub interface
+ */
+
+#include <axis2_stub.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+axiom_node_t *
+axis2_Account_stub_getAccountReport(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node);
+
+/**
+ * populate services
+ */
+void axis2_populate_axis_service( axis2_stub_t* stub, const axis2_env_t *env);
+
+/**
+ * Creates axis2_stub struct
+ * @param endpoint reference
+ * @return pointer to newly created axis2_stub struct
+ */
+axis2_stub_t *
+axis2_Account_stub_create_with_endpoint_ref_and_client_home(const axis2_env_t *env,
+ axis2_endpoint_ref_t *endpoint_ref,
+ axis2_char_t *client_home);
+
+/**
+ * Creates axis2_stub struct
+ * @param endpoint uri
+ * @return pointer to newly created axis2_stub struct
+ */
+axis2_stub_t *
+axis2_Account_stub_create_with_endpoint_uri_and_client_home(const axis2_env_t *env,
+ const axis2_char_t *endpoint_uri,
+ const axis2_char_t *client_home);
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* AXIS2_ECHO_STUB_H */
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/services.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/services.xml
new file mode 100644
index 0000000000..bb57c6edb6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/WSAccountClient/services.xml
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<service name="BigBank">
+ <parameter name="ServiceClass" locked="xsd:false">tuscany_sca_ws_service</parameter>
+ <parameter name="TuscanySystemRoot" locked="xsd:false">c:/apache/apache_checkout/cpp/sca/samples/BigBank/deploy</parameter>
+ <parameter name="TuscanyEntryPoint" locked="xsd:false">AccountSubsystem/Account/WSAccountEntrypoint</parameter>
+
+ <description>
+ This is a testing service, named 'BigBank' to test multiple operations in the same service
+ </description>
+
+ <operation name="getAccountReport">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+
+</service>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/deploy.bat b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/deploy.bat
new file mode 100644
index 0000000000..d88112556b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/BigBank/deploy.bat
@@ -0,0 +1,16 @@
+copy Accounts\Debug\Accounts.dll Deploy\modules\Accounts
+copy Accounts\Debug\Accounts.pdb Deploy\modules\Accounts
+copy Accounts\AccountServiceImpl.h Deploy\modules\Accounts
+copy Accounts\AccountService.h Deploy\modules\Accounts
+copy Accounts\AccountDataServiceImpl.h Deploy\modules\Accounts
+copy Accounts\AccountDataService.h Deploy\modules\Accounts
+copy Accounts\StockQuoteService.h Deploy\modules\Accounts
+copy Accounts\StockQuoteServiceImpl.h Deploy\modules\Accounts
+copy Accounts\StockQuoteExternalService.h Deploy\modules\Accounts
+copy AccountClient\Debug\AccountClient.exe Deploy\modules\Accounts
+copy AccountClient\Debug\AccountClient.pdb Deploy\modules\Accounts
+copy Accounts\sca.module Deploy\modules\Accounts
+copy Accounts\sca.subsystem Deploy\subsystems\Accounts
+copy Accounts\AccountServiceImpl.componentType Deploy\modules\Accounts
+copy Accounts\AccountDataServiceImpl.componentType Deploy\modules\Accounts
+copy Accounts\StockQuoteServiceImpl.componentType Deploy\modules\Accounts
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/COPYING b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/COPYING
new file mode 100755
index 0000000000..6b0b1270ff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/COPYING
@@ -0,0 +1,203 @@
+
+ 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/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.h
new file mode 100644
index 0000000000..6f30e31550
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.h
@@ -0,0 +1,31 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CALCULATOR_H
+#define CALCULATOR_H
+class Calculator
+{
+public:
+ virtual float add(float arg1, float arg2) = 0;
+ virtual float sub(float arg1, float arg2) = 0;
+ virtual float mul(float arg1, float arg2) = 0;
+ virtual float div(float arg1, float arg2) = 0;
+};
+
+#endif
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.wsdl
new file mode 100644
index 0000000000..6ec2df52bd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Calculator.wsdl
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="tuscany/c/Calculator"
+ targetNamespace="tuscany/c/Calculator">
+ <types>
+ <xs:schema targetNamespace="tuscany/c/Calculator"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="tuscany/c/Calculator"
+ elementFormDefault="qualified">
+
+ <xs:element name="add">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="param1" type="xs:float" minOccurs="1"/>
+ <xs:element name="param2" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="sub">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="param1" type="xs:float" minOccurs="1"/>
+ <xs:element name="param2" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="mul">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="param1" type="xs:float" minOccurs="1"/>
+ <xs:element name="param2" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="div">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="param1" type="xs:float" minOccurs="1"/>
+ <xs:element name="param2" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+<!-- The data that axis2c math client expects to be returned. -->
+<!-- SDOCPP currently doesn't support this XML. Jira TUSCANY-xxx -->
+<!-- <xs:element name="result"> -->
+<!-- <xs:simpleType> -->
+<!-- <xs:restriction base="xs:float"/> -->
+<!-- </xs:simpleType> -->
+<!-- </xs:element> -->
+ <xs:element name="result">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="data" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ </xs:schema>
+ </types>
+
+ <message name="addRequestMsg">
+ <part name="body" element="tns:add"/>
+ </message>
+ <message name="subRequestMsg">
+ <part name="body" element="tns:sub"/>
+ </message>
+ <message name="mulRequestMsg">
+ <part name="body" element="tns:mul"/>
+ </message>
+ <message name="divRequestMsg">
+ <part name="body" element="tns:div"/>
+ </message>
+
+ <message name="calculatorResponseMsg">
+ <part name="body" element="tns:result"/>
+ </message>
+
+ <portType name="CalculatorServicePortType">
+ <operation name="add">
+ <input message="tns:addRequestMsg"/>
+ <output message="tns:calculatorResponseMsg"/>
+ </operation>
+ <operation name="sub">
+ <input message="tns:subRequestMsg"/>
+ <output message="tns:calculatorResponseMsg"/>
+ </operation>
+ <operation name="mul">
+ <input message="tns:mulRequestMsg"/>
+ <output message="tns:calculatorResponseMsg"/>
+ </operation>
+ <operation name="div">
+ <input message="tns:divRequestMsg"/>
+ <output message="tns:calculatorResponseMsg"/>
+ </operation>
+ </portType>
+
+ <binding name="CalculatorServiceBinding" type="tns:CalculatorServicePortType">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="add">
+ <soap:operation soapAction="CalculatorService#add"/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ <operation name="sub">
+ <soap:operation soapAction="CalculatorService#sub"/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ <operation name="mul">
+ <soap:operation soapAction="CalculatorService#nul"/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ <operation name="div">
+ <soap:operation soapAction="CalculatorService#div"/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ </binding>
+
+ <service name="CalculatorService">
+ <port name="CalculatorServicePort" binding="tns:CalculatorServiceBinding">
+ <soap:address location="http://localhost:9090/axis2/services/Calculator"/>
+ </port>
+ </service>
+</definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.componentType
new file mode 100644
index 0000000000..39d6698e02
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.componentType
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CalculatorService">
+ <interface.cpp header="Calculator.h"/>
+ </service>
+
+ <reference name="CalculatorDivideService">
+ <interface.cpp header="DivideService.h"/>
+ </reference>
+
+
+</componentType> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.cpp
new file mode 100644
index 0000000000..746a1db689
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.cpp
@@ -0,0 +1,85 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorImpl.h"
+#include <stdio.h>
+
+#include "DivideService.h"
+#include "osoa/sca/ComponentContext.h"
+#include "osoa/sca/ServiceRuntimeException.h"
+
+CalculatorImpl::CalculatorImpl()
+{
+}
+
+CalculatorImpl::~CalculatorImpl()
+{
+}
+
+// Calculator interface
+float CalculatorImpl::add(float arg1, float arg2)
+{
+ float result = arg1 + arg2;
+
+ printf("CalculatorImpl::add %f + %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+float CalculatorImpl::sub(float arg1, float arg2)
+{
+ float result = arg1 - arg2;
+ printf("CalculatorImpl::sub %f - %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+float CalculatorImpl::mul(float arg1, float arg2)
+{
+ float result = arg1 * arg2;
+ printf("CalculatorImpl::mul %f * %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+float CalculatorImpl::div(float arg1, float arg2)
+{
+ float result = 0;
+
+ // This method shows how to invoke a service on a different component from within a component
+
+ // First, get the current ComponentContext
+ osoa::sca::ComponentContext myContext = osoa::sca::ComponentContext::getCurrent();
+
+ try
+ {
+ // Find the required service, as referenced in CalculatorImpl.componentType
+ DivideService* divideService = (DivideService*)myContext.getService("CalculatorDivideService");
+
+ // Finally, invoke the service
+ result = divideService->divide(arg1, arg2);
+
+ printf("CalculatorImpl::div DivideService returned result: %f\n", result);
+
+ }
+ catch (osoa::sca::ServiceRuntimeException& e)
+ {
+ // Print out error message and carry on
+ printf("CalculatorImpl::div Error whilst invoking DivideService: %s", e.getMessageText());
+ }
+
+ return result;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.h
new file mode 100644
index 0000000000..2e4b6aa4dc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CALCULATORIMPL_H
+#define CALCULATORIMPL_H
+
+#include "Calculator.h"
+
+class CalculatorImpl : public Calculator
+{
+public:
+ CalculatorImpl();
+ virtual ~CalculatorImpl();
+
+ // Calculator interface
+ virtual float add(float arg1, float arg2);
+ virtual float sub(float arg1, float arg2);
+ virtual float mul(float arg1, float arg2);
+ virtual float div(float arg1, float arg2);
+};
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.cpp
new file mode 100644
index 0000000000..0ff0891406
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorImpl_CalculatorDivideService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorImpl_CalculatorDivideService_Proxy* CalculatorImpl_CalculatorDivideService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CalculatorImpl_CalculatorDivideService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CalculatorImpl_CalculatorDivideService_Proxy_Destructor(void* proxy)
+ {
+ delete (CalculatorImpl_CalculatorDivideService_Proxy*)proxy;
+ }
+}
+
+CalculatorImpl_CalculatorDivideService_Proxy::CalculatorImpl_CalculatorDivideService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CalculatorImpl_CalculatorDivideService_Proxy::~CalculatorImpl_CalculatorDivideService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float CalculatorImpl_CalculatorDivideService_Proxy::divide( float arg0, float arg1)
+{
+ Operation operation("divide");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.h
new file mode 100644
index 0000000000..3312005d32
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorDivideService_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorImpl_CalculatorDivideService_Proxy_h
+#define CalculatorImpl_CalculatorDivideService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "DivideService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CalculatorImpl_CalculatorDivideService_Proxy : public DivideService
+{
+public:
+ CalculatorImpl_CalculatorDivideService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CalculatorImpl_CalculatorDivideService_Proxy();
+ virtual float divide( float arg1, float arg2);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CalculatorImpl_CalculatorDivideService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.cpp
new file mode 100644
index 0000000000..c601ebcdc2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.cpp
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorImpl_CalculatorService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorImpl_CalculatorService_Proxy* CalculatorImpl_CalculatorService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CalculatorImpl_CalculatorService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CalculatorImpl_CalculatorService_Proxy_Destructor(void* proxy)
+ {
+ delete (CalculatorImpl_CalculatorService_Proxy*)proxy;
+ }
+}
+
+CalculatorImpl_CalculatorService_Proxy::CalculatorImpl_CalculatorService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CalculatorImpl_CalculatorService_Proxy::~CalculatorImpl_CalculatorService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float CalculatorImpl_CalculatorService_Proxy::add( float arg0, float arg1)
+{
+ Operation operation("add");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float CalculatorImpl_CalculatorService_Proxy::sub( float arg0, float arg1)
+{
+ Operation operation("sub");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float CalculatorImpl_CalculatorService_Proxy::mul( float arg0, float arg1)
+{
+ Operation operation("mul");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float CalculatorImpl_CalculatorService_Proxy::div( float arg0, float arg1)
+{
+ Operation operation("div");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.h
new file mode 100644
index 0000000000..d3de5a79c6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Proxy.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorImpl_CalculatorService_Proxy_h
+#define CalculatorImpl_CalculatorService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "Calculator.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CalculatorImpl_CalculatorService_Proxy : public Calculator
+{
+public:
+ CalculatorImpl_CalculatorService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CalculatorImpl_CalculatorService_Proxy();
+ virtual float add( float arg1, float arg2);
+ virtual float sub( float arg1, float arg2);
+ virtual float mul( float arg1, float arg2);
+ virtual float div( float arg1, float arg2);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CalculatorImpl_CalculatorService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.cpp
new file mode 100644
index 0000000000..97805d0e4b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.cpp
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorImpl_CalculatorService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorImpl_CalculatorService_Wrapper* CalculatorImpl_CalculatorService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CalculatorImpl_CalculatorService_Wrapper(target);
+ }
+}
+
+CalculatorImpl_CalculatorService_Wrapper::CalculatorImpl_CalculatorService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CalculatorImpl*)getImplementation();
+}
+
+CalculatorImpl_CalculatorService_Wrapper::~CalculatorImpl_CalculatorService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CalculatorImpl_CalculatorService_Wrapper::newImplementation()
+{
+ return new CalculatorImpl;
+}
+
+void CalculatorImpl_CalculatorService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CalculatorImpl_CalculatorService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "add")
+ {
+ float& p0 = *( float*)operation.getParameterValue(0);
+ float& p1 = *( float*)operation.getParameterValue(1);
+ *(float*)operation.getReturnValue() = impl->add(p0, p1);
+ return;
+ }
+ if (operationName == "sub")
+ {
+ float& p0 = *( float*)operation.getParameterValue(0);
+ float& p1 = *( float*)operation.getParameterValue(1);
+ *(float*)operation.getReturnValue() = impl->sub(p0, p1);
+ return;
+ }
+ if (operationName == "mul")
+ {
+ float& p0 = *( float*)operation.getParameterValue(0);
+ float& p1 = *( float*)operation.getParameterValue(1);
+ *(float*)operation.getReturnValue() = impl->mul(p0, p1);
+ return;
+ }
+ if (operationName == "div")
+ {
+ float& p0 = *( float*)operation.getParameterValue(0);
+ float& p1 = *( float*)operation.getParameterValue(1);
+ *(float*)operation.getReturnValue() = impl->div(p0, p1);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.h
new file mode 100644
index 0000000000..c881576ca2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/CalculatorImpl_CalculatorService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorImpl_CalculatorService_Wrapper_h
+#define CalculatorImpl_CalculatorService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CalculatorImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CalculatorImpl_CalculatorService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CalculatorImpl_CalculatorService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CalculatorImpl_CalculatorService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CalculatorImpl* impl;
+};
+
+#endif // CalculatorImpl_CalculatorService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideService.h
new file mode 100644
index 0000000000..f6033c9020
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideService.h
@@ -0,0 +1,29 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef DIVIDESERVICE_H
+#define DIVIDESERVICE_H
+class DivideService
+{
+public:
+ virtual float divide(float arg1, float arg2) = 0;
+};
+
+#endif
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.componentType
new file mode 100644
index 0000000000..bda8aed044
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.componentType
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ASCII"?>
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="DivideService">
+ <interface.cpp header="DivideService.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.cpp
new file mode 100644
index 0000000000..4797498103
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.cpp
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "DivideServiceImpl.h"
+#include <stdio.h>
+
+DivideServiceImpl::DivideServiceImpl()
+{
+}
+
+DivideServiceImpl::~DivideServiceImpl()
+{
+}
+
+// DivideService interface
+float DivideServiceImpl::divide(float arg1, float arg2)
+{
+ if(arg2 == 0.0)
+ {
+ printf("DivideServiceImpl::div %f / %f !! Cannot divide by zero, so returning 0\n", arg1, arg2);
+ return 0;
+ }
+
+ float result = arg1 / arg2;
+ printf("DivideServiceImpl::div %f / %f = %f\n", arg1, arg2, result);
+ return result;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.h
new file mode 100644
index 0000000000..00216b53b3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DIVIDESERVICEIMPL_H
+#define DIVIDESERVICEIMPL_H
+
+#include "DivideService.h"
+
+class DivideServiceImpl : public DivideService
+{
+public:
+ DivideServiceImpl();
+ virtual ~DivideServiceImpl();
+
+ // DivideService interface
+ virtual float divide(float arg1, float arg2);
+};
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.cpp
new file mode 100644
index 0000000000..945f407327
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "DivideServiceImpl_DivideService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ DivideServiceImpl_DivideService_Proxy* DivideServiceImpl_DivideService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new DivideServiceImpl_DivideService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void DivideServiceImpl_DivideService_Proxy_Destructor(void* proxy)
+ {
+ delete (DivideServiceImpl_DivideService_Proxy*)proxy;
+ }
+}
+
+DivideServiceImpl_DivideService_Proxy::DivideServiceImpl_DivideService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+DivideServiceImpl_DivideService_Proxy::~DivideServiceImpl_DivideService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float DivideServiceImpl_DivideService_Proxy::divide( float arg0, float arg1)
+{
+ Operation operation("divide");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.h
new file mode 100644
index 0000000000..957ad43168
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DivideServiceImpl_DivideService_Proxy_h
+#define DivideServiceImpl_DivideService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "DivideService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class DivideServiceImpl_DivideService_Proxy : public DivideService
+{
+public:
+ DivideServiceImpl_DivideService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~DivideServiceImpl_DivideService_Proxy();
+ virtual float divide( float arg1, float arg2);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // DivideServiceImpl_DivideService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.cpp
new file mode 100644
index 0000000000..4257caa46c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "DivideServiceImpl_DivideService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ DivideServiceImpl_DivideService_Wrapper* DivideServiceImpl_DivideService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new DivideServiceImpl_DivideService_Wrapper(target);
+ }
+}
+
+DivideServiceImpl_DivideService_Wrapper::DivideServiceImpl_DivideService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (DivideServiceImpl*)getImplementation();
+}
+
+DivideServiceImpl_DivideService_Wrapper::~DivideServiceImpl_DivideService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* DivideServiceImpl_DivideService_Wrapper::newImplementation()
+{
+ return new DivideServiceImpl;
+}
+
+void DivideServiceImpl_DivideService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void DivideServiceImpl_DivideService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "divide")
+ {
+ float& p0 = *( float*)operation.getParameterValue(0);
+ float& p1 = *( float*)operation.getParameterValue(1);
+ *(float*)operation.getReturnValue() = impl->divide(p0, p1);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.h
new file mode 100644
index 0000000000..9be9796ee2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/DivideServiceImpl_DivideService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef DivideServiceImpl_DivideService_Wrapper_h
+#define DivideServiceImpl_DivideService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "DivideServiceImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class DivideServiceImpl_DivideService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ DivideServiceImpl_DivideService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~DivideServiceImpl_DivideService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ DivideServiceImpl* impl;
+};
+
+#endif // DivideServiceImpl_DivideService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Makefile.am
new file mode 100644
index 0000000000..aff769b36a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Makefile.am
@@ -0,0 +1,35 @@
+deploydir=$(prefix)/samples/Calculator/deploy
+moduledir=$(deploydir)/modules/CalculatorModule
+
+BUILT_SOURCES = CalculatorImpl_CalculatorService_Proxy.cpp \
+CalculatorImpl_CalculatorService_Wrapper.cpp \
+CalculatorImpl_CalculatorDivideService_Proxy.cpp \
+DivideServiceImpl_DivideService_Proxy.cpp \
+DivideServiceImpl_DivideService_Wrapper.cpp
+
+noinst_HEADERS = *.h
+
+CalculatorImpl_CalculatorService_Proxy.cpp:
+ java -jar $(TUSCANY_SCACPP)/bin/scagen.jar -dir . -output .
+
+module_LTLIBRARIES = libCalculatorModule.la
+module_DATA = sca.module.lin Tuscany-model.config *.componentType *.wsdl services.xml
+EXTRA_DIST = sca.module.lin Tuscany-model.config *.componentType *.wsdl services.xml
+
+libCalculatorModule_la_SOURCES = \
+CalculatorImpl.cpp \
+CalculatorImpl_CalculatorService_Proxy.cpp \
+CalculatorImpl_CalculatorService_Wrapper.cpp \
+CalculatorImpl_CalculatorDivideService_Proxy.cpp \
+DivideServiceImpl.cpp \
+DivideServiceImpl_DivideService_Proxy.cpp \
+DivideServiceImpl_DivideService_Wrapper.cpp
+
+libCalculatorModule_la_LIBADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca
+
+INCLUDES = \
+ -I$(TUSCANY_SCACPP)/include \
+ -I${TUSCANY_SDOCPP}/include
+
+install-data-hook:
+ mv $(moduledir)/sca.module.lin $(moduledir)/sca.module \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Tuscany-model.config
new file mode 100644
index 0000000000..b8f96a01a1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/Tuscany-model.config
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="Calculator.wsdl"/>
+ </wsdl>
+ <xsd/>
+</tuscany-model>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module
new file mode 100644
index 0000000000..e07fbeb9e2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:cs="tuscany/c/Calculator/"
+ name="CalculatorModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="WSCalculatorEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="Calculator.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="tuscany/c/Calculator#wsdl.endpoint(CalculatorService/CalculatorServicePort)"></binding.ws>
+ <reference>CalculatorServiceComponent</reference>
+ </entryPoint>
+
+
+ <component name="CalculatorServiceComponent">
+ <implementation.cpp dll="Calculator.dll" header="CalculatorImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references>
+ <v:CalculatorDivideService>DivideServiceComponent/DivideService</v:CalculatorDivideService>
+ </references>
+ </component>
+
+ <component name="DivideServiceComponent">
+ <implementation.cpp dll="Calculator.dll" header="DivideServiceImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references> </references>
+ </component>
+
+
+
+</module> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module.lin b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module.lin
new file mode 100644
index 0000000000..4bd96ac774
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/sca.module.lin
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ name="CalculatorModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="WSCalculatorEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="Calculator.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="tuscany/c/Calculator#wsdl.endpoint(CalculatorService/CalculatorServicePort)"></binding.ws>
+ <reference>CalculatorServiceComponent</reference>
+ </entryPoint>
+
+ <component name="CalculatorServiceComponent">
+ <implementation.cpp dll="libCalculatorModule.so" header="CalculatorImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references>
+ <v:CalculatorDivideService>DivideServiceComponent/DivideService</v:CalculatorDivideService>
+ </references>
+ </component>
+
+ <component name="DivideServiceComponent">
+ <implementation.cpp dll="libCalculatorModule.so" header="DivideServiceImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references> </references>
+ </component>
+</module> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/services.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/services.xml
new file mode 100644
index 0000000000..b5f234e988
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorModule/services.xml
@@ -0,0 +1,42 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<service name="Calculator">
+ <parameter name="ServiceClass" locked="xsd:false">tuscany_sca_ws_service</parameter>
+ <parameter name="TuscanySystemRoot" locked="xsd:false">PATH-TO-THE-SYSTEM-ROOT</parameter>
+ <parameter name="TuscanyEntryPoint" locked="xsd:false">CalculatorSubsystem/CalculatorService/WSCalculatorEntrypoint</parameter>
+
+ <description>
+ This is a testing service, named 'Calculator' to test multiple operations in the same service
+ </description>
+
+ <operation name="add">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+
+ <operation name="sub">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+
+ <operation name="mul">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+
+ <operation name="div">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+
+</service>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorSubsystem/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorSubsystem/sca.subsystem
new file mode 100644
index 0000000000..4b9fdd1511
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/CalculatorSubsystem/sca.subsystem
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9" name="CalculatorSubsystem">
+
+ <moduleComponent name="CalculatorService" module="CalculatorModule" />
+
+</subsystem>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calc.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calc.cpp
new file mode 100644
index 0000000000..124cf96c63
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calc.cpp
@@ -0,0 +1,172 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "Calculator.h"
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace std;
+#include "tuscany/sca/core/TuscanyRuntime.h"
+using namespace tuscany::sca;
+
+#include <iostream>
+#include <stdlib.h>
+using namespace std;
+
+
+void usage();
+bool IsNumber(const char *p);
+
+int main(int argc, char* argv[])
+{
+ const char *operation;
+ float arg1 = 0;
+ float arg2 = 0;
+
+ if (argc == 4)
+ {
+ operation = argv[1];
+
+ if (!IsNumber(argv[2]))
+ {
+ cout << "Calc.exe: Argument 1 is not a number" << endl;
+ usage();
+ }
+ else
+ {
+ arg1 = atof(argv[2]);
+ }
+
+ if (!IsNumber(argv[3]))
+ {
+ cout << "Calc.exe: Argument 2 is not a number" << endl;
+ usage();
+ }
+ else
+ {
+ arg2 = atof(argv[3]);
+ }
+ }
+ else
+ {
+ usage();
+ }
+
+ try
+ {
+ // Set the default module environment variable: <subsystem>/<moduleName>
+ string systemRoot = getenv("TUSCANY_SCACPP");
+ if (systemRoot == "")
+ {
+ cout << "TUSCANY_SCACPP environment variable not set" <<endl;
+ return -1;
+ }
+ systemRoot += "/../samples/Calculator/deploy";
+
+ char *defaultModule = "CalculatorSubsystem/CalculatorService";
+
+// TuscanyRuntime rt;
+// rt.setSystemRoot(systemRoot);
+// rt.setDefaultModuleComponent(defaultModule);
+// rt.start();
+
+ // Locate a service
+ ModuleContext myContext = ModuleContext::getCurrent();
+ Calculator *calcService = (Calculator*) myContext.locateService("CalculatorServiceComponent");
+ if (calcService == 0)
+ {
+ cout << "Calc.exe: Unable to find Calculator service" << endl;
+ }
+ else
+ {
+ try
+ {
+ float result = 0;
+ if (strcmp(operation, "add") == 0)
+ {
+ result = calcService->add(arg1, arg2);
+ cout << "Calculator: add(" << arg1 << "," << arg2 << ") = " << result << endl;
+ }
+ else
+ if (strcmp(operation, "sub") == 0)
+ {
+ result = calcService->sub(arg1, arg2);
+ cout << "Calculator: sub(" << arg1 << "," << arg2 << ") = " << result << endl;
+ }
+ else
+ if (strcmp(operation, "mul") == 0)
+ {
+ result = calcService->mul(arg1, arg2);
+ cout << "Calculator: mul(" << arg1 << "," << arg2 << ") = " << result << endl;
+ }
+ else
+ if (strcmp(operation, "div") == 0)
+ {
+ result = calcService->div(arg1, arg2);
+ cout << "Calculator: div(" << arg1 << "," << arg2 << ") = " << result << endl;
+ }
+ else
+ {
+ cout << "Calculator: Unrecognized operation: " << operation << endl;
+ }
+ }
+ catch (char* x)
+ {
+ cout << "Calc.exe: exception caught: " << x << endl;
+ }
+ }
+
+ }
+ catch (ServiceRuntimeException& ex)
+ {
+ cout << ex << endl;
+ }
+ return 0;
+}
+
+void usage()
+{
+ cout << "Usage: calc add|sub|mul|div arg1 arg2" << endl;
+ exit(1);
+}
+
+bool IsNumber (const char *p)
+{
+ int len = strlen(p);
+ int pointcount = 0;
+
+ if (!isdigit (p[0]) && p[0] != '-' && p[0] != '+')
+ {
+ return false;
+ }
+ for (int i = 1; i < len; i++)
+ {
+ if (!isdigit (p[i]))
+ {
+ if (p[i] == '.')
+ {
+ if (pointcount > 0) return false;
+ pointcount++;
+ }
+ else
+ {
+ return false;
+ }
+ }
+ }
+ return true;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calculator.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calculator.h
new file mode 100644
index 0000000000..57975548c1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Calculator.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef CALCULATOR_H
+#define CALCULATOR_H
+class Calculator
+{
+public:
+ virtual float add(float arg1, float arg2) = 0;
+ virtual float sub(float arg1, float arg2) = 0;
+ virtual float mul(float arg1, float arg2) = 0;
+ virtual float div(float arg1, float arg2) = 0;
+};
+
+#endif
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Makefile.am
new file mode 100644
index 0000000000..75052b5bc0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/Makefile.am
@@ -0,0 +1,27 @@
+deploydir=$(prefix)/samples/Calculator/deploy
+prgbindir=$(deploydir)/bin
+
+prgbin_PROGRAMS = calculator_client
+prgbin_SCRIPTS = runclient.sh
+EXTRA_DIST = runclient.sh
+
+AM_CPPFLAGS = $(CPPFLAGS)
+calculator_client_SOURCES = Calc.cpp
+
+calculator_client_LDADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca -ltuscany_sca_ws_reference \
+ -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo -ltuscany_sdo_axiom \
+ -L$(AXIS2C_HOME)/lib \
+ -laxis2_util \
+ -laxis2_axiom \
+ -laxis2_wsdl \
+ -laxis2_engine \
+ -laxis2_parser \
+ -laxis2_minizip \
+ -lpthread \
+ -laxis2_http_sender \
+ -laxis2_http_receiver
+
+
+INCLUDES = -I$(top_builddir)/Calculator/CalculatorModule \
+ -I${TUSCANY_SCACPP}/include \
+ -I${TUSCANY_SDOCPP}/include
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/readme.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/readme.txt
new file mode 100644
index 0000000000..62672483af
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/readme.txt
@@ -0,0 +1,64 @@
+Tuscany SCA for C++ Samples - Calculator Sample
+===============================================
+
+This is a very simple sample to show how an SCA module with a single component
+can be built and called from an executable.
+
+There are three sub projects in this workspace:
+ - CalculatorModule
+ This contains the source code and SCA artifacts for the SCA module. This
+ is the module that will be deployed into the SCA runtime.
+ - CalculatorSubsystem
+ This contains the sca.subsystem file which describes a subsystem to the
+ SCA runtime.
+ - Client
+ An example client which will call the service exposed by the single component
+ in the CalculatorModule.
+
+
+Build instructions
+------------------
+
+Notes:
+
+The projects are set up to locate SCA and SDO libraries using the environment variables
+TUSCANY_SCACPP and TUSCANY_SDOCPP. These must be set before building.
+
+scagan is a code generation tool written in java. This will need to be built before you
+can run it. To build scagen, you must go to the tools/scagen directory, and type "ant".
+(You must have apache ant installed, and have a valid java virtual machine installed -
+upwards of version 1.4.2). Once scagen has successfully built, it can be run from the
+sca/bin directory.
+
+1) Build the SCA module.
+ - Set CalculatorModule project as the active project.
+ Right click->Set as active project
+
+ - Run the SCA generation tool to create the proxy and wrapper classes.
+ Either Tools->SCA Gen if you have added SCA Gen as an external tool
+ Or run from the command line:
+ scagen -dir <projectDirectory> -output <projectDirectory>
+ where the projectDirectory is the directory with the sca.module file.
+
+ - Rebuild All
+ Build->Rebuild All
+
+2) Package and deploy the SCA module
+ - There is a script file in the sca/samples/Calculator directory which will
+ copy across all the files needed for deployment to the Tuscany runtime.
+ On a command line run pack_deploy.cmd
+ As a default, the sample will be copied to sca/samples/runtime directory
+ Both the SCA module and the subsystem will be copied.
+
+3) Build the client
+ - Set the Client project as the active project.
+ Right click->Set as active project
+
+ - Rebuild All
+ Build->Rebuild All
+
+4) Run the client
+ - Use the command file in the sca/samples/Calculator/Client directory to run the
+ client. This command file will set the SCA environment variables before running
+ the client. For example,
+ runclient add 4 9
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.cmd
new file mode 100644
index 0000000000..1758d12ef5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.cmd
@@ -0,0 +1,51 @@
+@echo off
+
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+rem Runs the client after setting the SCA environment variables to use the
+rem CalculatorSubsystem
+setlocal
+
+if "%AXIS2C_HOME%" == "" (
+echo "AXIS2C_HOME not set"
+goto end
+)
+echo using Axis2C: %AXIS2C_HOME%
+
+if "%TUSCANY_SDOCPP%" == "" (
+echo "TUSCANY_SDOCPP not set"
+goto end
+)
+echo using TUSCANY_SDOCPP: %TUSCANY_SDOCPP%
+
+if "%TUSCANY_SCACPP%" == "" (
+echo "TUSCANY_SCACPP not set"
+goto end
+)
+echo using TUSCANY_SCACPP: %TUSCANY_SCACPP%
+
+set TUSCANY_SCACPP_SYSTEM_ROOT=%~d0%~p0\..\
+
+rem Only need to specify the subsystem (and not the moduleComponent as well) because
+rem there is only one moduleComponent in the subsystem - it is a very simple sample.
+set TUSCANY_SCACPP_DEFAULT_MODULE=CalculatorSubsystem
+
+rem Run the client
+
+set PATH=%TUSCANY_SCACPP%\bin;%TUSCANY_SDOCPP%\bin;%AXIS2C_HOME%\lib;%PATH%
+Client.exe %*
+:end
+endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.sh
new file mode 100755
index 0000000000..4dfea2f4a8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Client/runclient.sh
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+APFULLDIR=`pwd`
+
+if [ x$TUSCANY_SCACPP = x ]; then
+echo "TUSCANY_SCACPP not set"
+exit;
+fi
+echo "Using SCA installed at $TUSCANY_SCACPP"
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"
+exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+TEST_SYSTEM=$APFULLDIR/../
+
+export LD_LIBRARY_PATH=$TUSCANY_SCACPP/lib:$TUSCANY_SDOCPP/lib:$AXIS2C_HOME/lib:$LD_LIBRARY_PATH
+
+export TUSCANY_SCACPP_SYSTEM_ROOT=$TEST_SYSTEM
+export TUSCANY_SCACPP_DEFAULT_MODULE=CalculatorSubsystem
+
+./calculator_client add 4.7 9
+./calculator_client div 7.2 3.6
+./calculator_client mul 7 6
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Makefile.am
new file mode 100644
index 0000000000..cbeaeb0f96
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/Makefile.am
@@ -0,0 +1,4 @@
+deploydir=$(prefix)/samples/Calculator/deploy/subsystems/CalculatorSubsystem
+SUBDIRS = CalculatorModule Client WSClient
+EXTRA_DIST = CalculatorSubsystem
+deploy_DATA = CalculatorSubsystem/sca.subsystem \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Calculator_Client.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Calculator_Client.cpp
new file mode 100644
index 0000000000..5d6cd9e1bb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Calculator_Client.cpp
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#include "axis2_Calculator_stub.h"
+#include <stdio.h>
+#include <axiom.h>
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+axiom_node_t *
+build_om_programatically(const axis2_env_t *env,
+ const axis2_char_t *operation,
+ const axis2_char_t *param1,
+ const axis2_char_t *param2);
+
+int main(int argc, char** argv)
+{
+ axis2_stub_t *stub = NULL;
+ axiom_node_t *node = NULL;
+ axis2_status_t status = AXIS2_FAILURE;
+ const axis2_env_t *env = NULL;
+ const axis2_char_t *address = NULL;
+ const axis2_char_t *client_home = NULL;
+ axiom_node_t *ret_node = NULL;
+
+ const axis2_char_t *operation = "add";
+ const axis2_char_t *param1 = "40";
+ const axis2_char_t *param2 = "8";
+
+ env = axis2_env_create_all( "Calculator_blocking.log", AXIS2_LOG_LEVEL_TRACE);
+
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home)
+ client_home = "../../deploy";
+
+ address = "http://localhost:9090/axis2/services/Calculator";
+ if (argc > 1 )
+ operation = argv[1];
+ if (AXIS2_STRCMP(operation, "-h") == 0)
+ {
+ printf("Usage : %s [operation] [param1] [param2] [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ printf("default operation add\n");
+ printf("default param1 %s\n", param1);
+ printf("default param2 %s\n", param2);
+ printf("default endpoint_url %s\n", address);
+ printf("NOTE: command line arguments must appear in given order, with trailing ones being optional\n");
+ return 0;
+ }
+ if (argc > 2 )
+ param1 = argv[2];
+ if (argc > 3 )
+ param2 = argv[3];
+ if (argc > 4 )
+ address = argv[4];
+
+ printf ("Using endpoint : %s\n", address);
+ printf ("\nInvoking operation %s with params %s and %s\n", operation, param1, param2);
+
+ node = build_om_programatically(env, operation, param1, param2);
+ stub =
+ axis2_Calculator_stub_create_with_endpoint_uri_and_client_home(env, address, client_home);
+ /* create node and invoke Calculator */
+ ret_node = axis2_Calculator_stub_add(stub, env, node);
+ if(ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = AXIOM_NODE_TO_STRING(ret_node, env);
+ if(om_str)
+ {
+ printf("\nOM returned = %s\n", om_str);
+ }
+
+ if (AXIOM_NODE_GET_NODE_TYPE(ret_node, env) == AXIOM_ELEMENT)
+ {
+ axis2_char_t *result = NULL;
+ axiom_node_t *result_node = (axiom_node_t*)AXIOM_NODE_GET_FIRST_CHILD(ret_node, env);
+ axiom_element_t *data_ele = (axiom_element_t*)AXIOM_NODE_GET_DATA_ELEMENT(result_node, env);
+
+ result = AXIOM_ELEMENT_GET_TEXT(data_ele, env, result_node);
+ printf( "\nResult = %s\n", result);
+ }
+ else
+ {
+ axiom_xml_writer_t *writer = NULL;
+ axiom_output_t *om_output = NULL;
+ axis2_char_t *buffer = NULL;
+ writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_TRUE, 0,
+ AXIS2_XML_PARSER_TYPE_BUFFER);
+ om_output = axiom_output_create (env, writer);
+
+ AXIOM_NODE_SERIALIZE (ret_node, env, om_output);
+ buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(writer, env);
+ printf ("\nReceived invalid OM as result : %s\n", buffer);
+ if(NULL != buffer)
+ {
+ AXIS2_FREE(env->allocator, buffer);
+ buffer = NULL;
+ }
+ if(NULL != om_output)
+ {
+ AXIOM_OUTPUT_FREE(om_output, env);
+ om_output = NULL;
+ }
+ }
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("Calculator stub invoke FAILED!\n");
+ }
+ if (stub)
+ {
+ AXIS2_STUB_FREE(stub, env);
+ }
+ return status;
+}
+
+axiom_node_t *
+build_om_programatically(const axis2_env_t *env,
+ const axis2_char_t *operation,
+ const axis2_char_t *param1,
+ const axis2_char_t *param2)
+{
+ axiom_node_t *Calculator_om_node = NULL;
+ axiom_element_t* Calculator_om_ele = NULL;
+ axiom_node_t* text_om_node = NULL;
+ axiom_element_t * text_om_ele = NULL;
+ axiom_namespace_t *ns1 = NULL;
+
+
+ axiom_xml_writer_t *xml_writer = NULL;
+ axiom_output_t *om_output = NULL;
+ axis2_char_t *buffer = NULL;
+
+ ns1 = axiom_namespace_create (env, "tuscany/c/Calculator", "ns1");
+
+ Calculator_om_ele = axiom_element_create(env, NULL, operation, ns1, &Calculator_om_node);
+
+ text_om_ele = axiom_element_create(env, Calculator_om_node, "param1", NULL, &text_om_node);
+ AXIOM_ELEMENT_SET_TEXT(text_om_ele, env, param1, text_om_node);
+
+ text_om_ele = axiom_element_create(env, Calculator_om_node, "param2", NULL, &text_om_node);
+ AXIOM_ELEMENT_SET_TEXT(text_om_ele, env, param2, text_om_node);
+
+ xml_writer = axiom_xml_writer_create_for_memory(env, NULL, AXIS2_FALSE, AXIS2_FALSE,
+ AXIS2_XML_PARSER_TYPE_BUFFER);
+ om_output = axiom_output_create( env, xml_writer);
+
+ AXIOM_NODE_SERIALIZE(Calculator_om_node, env, om_output);
+ buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(xml_writer, env);
+ AXIS2_LOG_DEBUG(env->log, AXIS2_LOG_SI, "\nSending OM node in XML : %s \n", buffer);
+ if(NULL != buffer)
+ {
+ AXIS2_FREE(env->allocator, buffer);
+ buffer = NULL;
+ }
+ if(NULL != om_output)
+ {
+ AXIOM_OUTPUT_FREE(om_output, env);
+ om_output = NULL;
+ }
+
+ return Calculator_om_node;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Makefile.am
new file mode 100644
index 0000000000..706c0927b5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/Makefile.am
@@ -0,0 +1,24 @@
+deploydir=$(prefix)/samples/Calculator/deploy
+prgbindir=$(deploydir)/bin
+
+prgbin_PROGRAMS = calculator_wsclient
+prgbin_SCRIPTS = runwsclient.sh
+EXTRA_DIST = runwsclient.sh
+
+AM_CPPFLAGS = $(CPPFLAGS)
+calculator_wsclient_SOURCES = axis2_Calculator_stub.cpp Calculator_Client.cpp
+noinst_HEADERS = *.h
+
+calculator_wsclient_LDADD = -L$(AXIS2C_HOME)/lib \
+ -laxis2_util \
+ -laxis2_axiom \
+ -laxis2_wsdl \
+ -laxis2_engine \
+ -laxis2_parser \
+ -laxis2_minizip \
+ -lpthread \
+ -laxis2_http_sender \
+ -laxis2_http_receiver
+
+
+INCLUDES = -I${AXIS2C_HOME}/include
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.cpp
new file mode 100644
index 0000000000..8455c0d209
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.cpp
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#include "axis2_Calculator_stub.h"
+
+
+axis2_stub_t *
+axis2_Calculator_stub_create_with_endpoint_ref_and_client_home(const axis2_env_t *env,
+ axis2_endpoint_ref_t *endpoint_ref,
+ axis2_char_t *client_home)
+{
+ axis2_stub_t *stub = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ stub = (axis2_stub_t *)
+ axis2_stub_create_with_endpoint_ref_and_client_home(env, endpoint_ref,
+ client_home);
+ if(NULL == stub)
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_NO_MEMORY, (axis2_status_codes)AXIS2_FAILURE);
+ return NULL;
+ }
+ axis2_populate_axis_service( stub, env);
+ return stub;
+}
+
+void axis2_populate_axis_service( axis2_stub_t* stub, const axis2_env_t *env)
+{
+ axis2_svc_client_t* svc_client = NULL;
+ axis2_qname_t *op_qname = NULL;
+ axis2_svc_t* svc = NULL;
+ axis2_op_t* op = NULL;
+
+ /*Modifying the Service*/
+ svc_client = AXIS2_STUB_GET_SVC_CLIENT (stub, env );
+ svc = (axis2_svc_t*)AXIS2_SVC_CLIENT_GET_AXIS_SERVICE ( svc_client, env );
+
+ /*creating the operations*/
+
+ op_qname = axis2_qname_create(env,"add" , "", NULL);
+ op = axis2_op_create_with_qname(env, op_qname);
+ AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN);
+ AXIS2_SVC_ADD_OP(svc, env, op);
+
+ op_qname = axis2_qname_create(env,"sub" , "", NULL);
+ op = axis2_op_create_with_qname(env, op_qname);
+ AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN);
+ AXIS2_SVC_ADD_OP(svc, env, op);
+
+ op_qname = axis2_qname_create(env,"mul" , "", NULL);
+ op = axis2_op_create_with_qname(env, op_qname);
+ AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN);
+ AXIS2_SVC_ADD_OP(svc, env, op);
+
+ op_qname = axis2_qname_create(env,"div" , "", NULL);
+ op = axis2_op_create_with_qname(env, op_qname);
+ AXIS2_OP_SET_MSG_EXCHANGE_PATTERN(op, env, AXIS2_MEP_URI_OUT_IN);
+ AXIS2_SVC_ADD_OP(svc, env, op);
+}
+
+axis2_stub_t *
+axis2_Calculator_stub_create_with_endpoint_uri_and_client_home(const axis2_env_t *env,
+ const axis2_char_t *endpoint_uri,
+ const axis2_char_t *client_home)
+{
+ axis2_stub_t *stub = NULL;
+
+ AXIS2_ENV_CHECK(env, NULL);
+
+ stub = (axis2_stub_t *)
+ axis2_stub_create_with_endpoint_uri_and_client_home(env, endpoint_uri,
+ client_home);
+ if(NULL == stub)
+ {
+ AXIS2_ERROR_SET(env->error,
+ AXIS2_ERROR_NO_MEMORY, (axis2_status_codes)AXIS2_FAILURE);
+ return NULL;
+ }
+
+ axis2_populate_axis_service( stub, env);
+
+ return stub;
+}
+
+/***************************Function implementation****************************/
+
+axiom_node_t *
+axis2_Calculator_stub_add(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node)
+{
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *ret_node = NULL;
+ axis2_qname_t *op_qname = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env);
+ op_qname = axis2_qname_create(env, "add" , "", NULL);
+ ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node);
+
+ return ret_node;
+}
+
+axiom_node_t *
+axis2_Calculator_stub_sub(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node)
+{
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *ret_node = NULL;
+ axis2_qname_t *op_qname = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env);
+ op_qname = axis2_qname_create(env, "sub" , "", NULL);
+ ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node);
+
+ return ret_node;
+}
+
+axiom_node_t *
+axis2_Calculator_stub_mul(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node)
+{
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *ret_node = NULL;
+ axis2_qname_t *op_qname = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env);
+ op_qname = axis2_qname_create(env, "mul" , "", NULL);
+ ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node);
+
+ return ret_node;
+}
+
+axiom_node_t *
+axis2_Calculator_stub_div(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node)
+{
+ axis2_svc_client_t *svc_client = NULL;
+ axiom_node_t *ret_node = NULL;
+ axis2_qname_t *op_qname = NULL;
+
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+
+ svc_client = AXIS2_STUB_GET_SVC_CLIENT(stub, env);
+ op_qname = axis2_qname_create(env, "div" , "", NULL);
+ ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE_WITH_OP_QNAME( svc_client, env, op_qname, node);
+
+ return ret_node;
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.h
new file mode 100644
index 0000000000..54cce17562
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/axis2_Calculator_stub.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#ifndef AXIS2_ECHO_STUB_H
+#define AXIS2_ECHO_STUB_H
+
+/**
+ * @file axis2_Calculator_stub.h
+ * @brief axis2 Calculator stub interface
+ */
+
+#include <axis2_stub.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+axiom_node_t *
+axis2_Calculator_stub_add(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node);
+
+axiom_node_t *
+axis2_Calculator_stub_sub(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node);
+
+axiom_node_t *
+axis2_Calculator_stub_mul(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node);
+
+axiom_node_t *
+axis2_Calculator_stub_div(axis2_stub_t *stub,
+ const axis2_env_t *env,
+ axiom_node_t *node);
+/**
+ * populate services
+ */
+void axis2_populate_axis_service( axis2_stub_t* stub, const axis2_env_t *env);
+
+/**
+ * Creates axis2_stub struct
+ * @param endpoint reference
+ * @return pointer to newly created axis2_stub struct
+ */
+axis2_stub_t *
+axis2_Calculator_stub_create_with_endpoint_ref_and_client_home(const axis2_env_t *env,
+ axis2_endpoint_ref_t *endpoint_ref,
+ axis2_char_t *client_home);
+
+/**
+ * Creates axis2_stub struct
+ * @param endpoint uri
+ * @return pointer to newly created axis2_stub struct
+ */
+axis2_stub_t *
+axis2_Calculator_stub_create_with_endpoint_uri_and_client_home(const axis2_env_t *env,
+ const axis2_char_t *endpoint_uri,
+ const axis2_char_t *client_home);
+/** @} */
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* AXIS2_ECHO_STUB_H */
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.cmd
new file mode 100644
index 0000000000..ba387a4bab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.cmd
@@ -0,0 +1,28 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+setlocal
+
+if "%AXIS2C_HOME%" == "" (
+echo "AXIS2C_HOME not set"
+goto end
+)
+echo using Axis2C: %AXIS2C_HOME%"
+
+rem Run the client
+WSClient.exe %*
+:end
+endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.sh
new file mode 100755
index 0000000000..2e8e79fc9c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Calculator/WSClient/runwsclient.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+APFULLDIR=`pwd`
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+export LD_LIBRARY_PATH=$AXIS2C_HOME/lib:$LD_LIBRARY_PATH
+
+./calculator_wsclient add 4.7 9
+./calculator_wsclient div 7.2 3.6
+./calculator_wsclient mul 7 6
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ChangeLog b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ChangeLog
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ChangeLog
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/GettingStarted.html b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/GettingStarted.html
new file mode 100644
index 0000000000..604de50ff9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/GettingStarted.html
@@ -0,0 +1,261 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+ <META CONTENT="text/html; charset=iso-8859-1" HTTP-EQUIV="Content-Type">
+ <META CONTENT="text/css" HTTP-EQUIV="Content-Style-Type">
+ <STYLE MEDIA="all" TYPE="text/css">
+@import url("../doc/css/maven-base.css");
+@import url("../doc/css/maven-theme.css");
+ </STYLE>
+
+ <LINK HREF="../doc/css/maven-theme.css" MEDIA="print" REL="stylesheet"
+ TYPE="text/css">
+ <TITLE>Tuscany SCA C++ Samples - Getting Started</TITLE>
+</HEAD>
+
+<BODY>
+<DIV ID="bodyColumn">
+ <DIV ID="contentBox">
+ <DIV CLASS="section">
+ <H2>Tuscany Samples - Getting Started - SCA C++ Milestone release 1</H2>
+
+ <P>Tuscany SCA C++ includes a simple technology sample that demonstrates some of the functionality of
+ the Tuscany SCA C++ runtime. This page describes what is needed to install and run the sample.
+ </P>
+ </DIV>
+
+ <DIV CLASS="section">
+ <H2>Contents</H2>
+ <OL>
+ <LI><A HREF="#linuxbld">Building the samples on Linux</A></LI>
+ <LI><A HREF="#linuxrun">Running the samples on Linux:</A></LI>
+ <UL>
+ <LI><A HREF="#linuxcalcbasic">Calculator with basic client</A></LI>
+ <LI><A HREF="#linuxcalcws">Calculator with Web Service client</A></LI>
+ </UL>
+ <LI><A HREF="#winbld">Building the samples on Windows</A></LI>
+ <LI><A HREF="#winrun">Running the samples on Windows:</A></LI>
+ <UL>
+ <LI><A HREF="#wincalcbasic">Calculator with basic client</A></LI>
+ <LI><A HREF="#wincalcws">Calculator with Web Service client</A></LI>
+ </UL>
+ </OL>
+ </DIV>
+
+
+ <DIV CLASS="section">
+ <A NAME="linuxbld"><H2>Building the samples on Linux</H2></A>
+ <P>If using the binary distribution the samples are built and installed in
+ &lt;tuscany_sca_install_dir&gt;/samples - go directly to <A HREF="#linuxrun">Running the samples on Linux</A>.</P>
+ <OL>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to installed Tuscany SCA&gt;
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ </LI>
+ <LI>Build the source with the following command sequence:
+ <UL>
+ <LI>cd &lt;tuscany_sca_install_dir&gt;/samples</LI>
+ <LI>./configure</LI>
+ <LI>make</LI>
+ <LI>make install</LI>
+ </UL>
+ NOTE: If you don't provide a --prefix configure option, it will by default install into
+ /usr/local/tuscany/sca/samples/Calculator</LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="linuxrun"><H2>Running the samples on Linux</H2></A>
+ <A NAME="linuxcalcbasic"><H3>Calculator with basic client</H3></A>
+ <OL>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to installed Tuscany SCA&gt;</LI>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;</LI>
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL>
+ </LI>
+ <LI>Run the sample with the following commands:
+ <UL>
+ <LI>cd &lt;tuscany_sca_install_dir&gt;/samples/Calculator/deploy/bin</LI>
+ <LI>./runclient.sh</LI>
+ </UL>
+ </LI>
+ </OL>
+ <A NAME="linuxcalcws"><H3>Calculator with Web Service client</H3></A>
+ <OL>
+ <LI>Deploy the Calculator as an Axis2C service:
+ <OL>
+ <LI>Create a new service folder in axis2:<BR/>
+ &lt;AXIS2C_HOME&gt;/services/Calculator</LI>
+ <LI>Copy the &lt;TUSCANY_SCACPP&gt;/samples/Calculator/CalculatorModule/services.xml
+ to &lt;AXIS2C_HOME&gt;/services/Calculator/services.xml</LI>
+ <LI>Edit the &lt;AXIS2C_HOME&gt;/services/Calculator/services.xml file to set the TuscanySystemRoot parameter to<BR/>
+ &lt;parameter name="TuscanySystemRoot" locked="xsd:false"&gt;&lt;tuscany_sca_install_dir&gt;/samples/Calculator/deploy&lt;/parameter&gt;<BR/>
+ replacing &lt;tuscany_sca_install_dir&gt; with the install path of Tuscany SCA</LI>
+ <LI>Copy the &lt;TUSCANY_SCACPP&gt;/lib/libtuscany_sca_ws_service.so library into &lt;AXIS2C_HOME&gt;/services/Calculator</LI>
+ </OL>
+ </LI>
+ <LI>Start the Axis2C simple http server:
+ <OL>
+ <LI>cd &lt;AXIS2C_HOME&gt;/bin</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to installed Tuscany SCA&gt;</LI>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;</LI>
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL>
+ </LI>
+ <LI>Add &lt;TUSCANY_SCACPP&gt;/lib, &lt;TUSCANY_SDOCPP&gt;/lib and &lt;AXIS2C_HOME&gt;/lib
+ to the LD_LIBRARY_PATH environment variable
+ </LI>
+ <LI>./axis2_http_server</LI>
+ </OL>
+ </LI>
+ <LI>Run the client:
+ <OL>
+ <LI>The following environment variable is required:
+ <UL>
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL>
+ </LI>
+ <LI>cd &lt;tuscany_sca_install_dir&gt;/samples/Calculator/deploy/bin</LI>
+ <LI>./runwsclient.sh</LI>
+ </OL>
+ </LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="winbld"><H2>Building the samples on Windows</H2></A>
+ <P>If using the binary distribution the samples are built and installed in
+ &lt;tuscany_sca_install_dir&gt;/samples - go directly to <A HREF="#winrun">Running the samples on Windows</A>.</P>
+ <OL>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to installed Tuscany SCA&gt;
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ </LI>
+ <LI>You must have set up the environment for Microsoft Visual C++ tools.
+ The build command will call vcvars32 to set the environment. Ensure the
+ directory containing this is on your path. This will be where you
+ installed the compiler.
+ </LI>
+ <LI>Build the source, either via the Visual Studio 6 or 7 projects under
+ &lt;tuscany_sca_install_dir&gt;\samples\ides or via the command-line build file
+ found at &lt;tuscany_sca_install_dir&gt;\samples\ides\devstudio6\projects\Calculator\build.cmd
+ which will build and deploy the samples.
+ </LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="winrun"><H2>Running the samples on Windows</H2></A>
+ <A NAME="wincalcbasic"><H3>Calculator with basic client</H3></A>
+ <OL>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to installed Tuscany SCA&gt;</LI>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;</LI>
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL>
+ </LI>
+ <LI>Run the sample with the following commands:
+ <UL>
+ <LI>cd &lt;tuscany_sca_install_dir&gt;/samples/Calculator/deploy/bin</LI>
+ <LI>runclient add 5 6<BR/>
+ (can also use sub, div, mul).</LI>
+ </UL>
+ </LI>
+ </OL>
+ <A NAME="wincalcws"><H3>Calculator with Web Service client</H3></A>
+ <OL>
+ <LI>Deploy the Calculator as an Axis2C service:
+ <OL>
+ <LI>Create a new service folder in axis2:<BR/>
+ &lt;AXIS2C_HOME&gt;/services/Calculator</LI>
+ <LI>Copy the &lt;TUSCANY_SCACPP&gt;/samples/Calculator/CalculatorModule/services.xml
+ to &lt;AXIS2C_HOME&gt;/services/Calculator/services.xml</LI>
+ <LI>Edit the &lt;AXIS2C_HOME&gt;/services/Calculator/services.xml file to set the TuscanySystemRoot parameter to<BR/>
+ &lt;parameter name="TuscanySystemRoot" locked="xsd:false"&gt;&lt;TUSCANY_SCACPP&gt;/samples/Calculator/deploy&lt;/parameter&gt;<BR/>
+ replacing &lt;TUSCANY_SCACPP&gt; with the install path of Tuscany SCA</LI>
+ <LI>Copy the &lt;TUSCANY_SCACPP&gt;/lib/tuscany_sca_ws_service.dll (and .pdb if debugging) file(s)
+ into &lt;AXIS2C_HOME&gt;/services/Calculator</LI>
+ </OL>
+ </LI>
+ <LI>Start the Axis2C simple http server:
+ <OL>
+ <LI>cd &lt;AXIS2C_HOME&gt;/bin</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SCACPP=&lt;path to installed Tuscany SCA&gt;</LI>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;</LI>
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL>
+ </LI>
+ <LI>Add &lt;TUSCANY_SCACPP&gt;\bin, &lt;TUSCANY_SDOCPP&gt;\bin and &lt;AXIS2C_HOME&gt;/lib
+ to the PATH environment variable
+ </LI>
+ <LI>axis2_http_server</LI>
+ </OL>
+ </LI>
+ <LI>Run the client:
+ <OL>
+ <LI>The following environment variable is required:
+ <UL>
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL>
+ </LI>
+ <LI>cd &lt;tuscany_sca_install_dir&gt;/samples/Calculator/deploy/bin</LI>
+ <LI>runwsclient</LI>
+ </OL>
+ </LI>
+ </OL>
+ </DIV>
+
+
+ <DIV CLASS="section">
+ <A NAME="help"><H2>Getting Help</H2></A>
+
+ <P>First place to look is at the Tuscany FAQ at
+ <A HREF="http://incubator.apache.org/tuscany/faq.html"
+ TARGET="_blank">http://incubator.apache.org/tuscany/faq.html</A> </P>
+
+ <P>Any problem with this release can be reported to the Tuscany
+ <A HREF="http://incubator.apache.org/tuscany/mail-lists.html"
+ TARGET="_blank">mailing lists</A> or create a JIRA issue at&nbsp;<A HREF="http://issues.apache.org/jira/browse/Tuscany"
+ TARGET="_blank">http://issues.apache.org/jira/browse/Tuscany</A>.</P>
+
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+ <TABLE CLASS="bodyTable">
+ <TBODY>
+ <TR CLASS="a">
+ <TD>
+
+ <P>Thank you for your interest in Tuscany.</P> <STRONG><EM>-The
+ Tuscany Development Team</EM></STRONG>
+
+ <P></P>
+
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+
+ <P></P>
+ </DIV>
+ </DIV>
+</DIV>
+</BODY>
+
+</HTML>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/INSTALL b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/INSTALL
new file mode 100644
index 0000000000..2a6a072bf5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/INSTALL
@@ -0,0 +1,2 @@
+Please read the GettingStarted.html document for information on
+building and installing the Tuscany SCA for C++ samples
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/LICENSE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/LICENSE
new file mode 100755
index 0000000000..f433b1a53f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/LICENSE
@@ -0,0 +1,177 @@
+
+ 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
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Makefile.am
new file mode 100644
index 0000000000..2531254930
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = Calculator
+
+EXTRA_DIST = GettingStarted.html
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/Makefile.am
new file mode 100644
index 0000000000..b1586cc752
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/Makefile.am
@@ -0,0 +1,11 @@
+prgbindir=$(prefix)/samples/bin
+prgbin_PROGRAMS = MyValueClient
+
+MyValueClient_SOURCES = MyValueClient.cpp
+
+MyValueClient_LDADD = -L$(top_builddir)/runtime/core/src -ltuscany_sca \
+ -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo -lxml2
+
+INCLUDES = -I.. \
+ -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/MyValueClient.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/MyValueClient.cpp
new file mode 100755
index 0000000000..1e5c038e2e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Client/MyValueClient.cpp
@@ -0,0 +1,179 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma warning(disable: 4786)
+
+#include "commonj/sdo/Logger.h"
+#include "commonj/sdo/SDO.h"
+#include "commonj/sdo/HelperProvider.h"
+#include "osoa/sca/sca.h"
+#include "tuscany/sca/util/Logger.h"
+#include "tuscany/sca/util/Utils.h"
+#include <iostream>
+
+using namespace std;
+using namespace osoa::sca;
+using namespace tuscany::sca;
+using namespace commonj::sdo;
+using namespace tuscany::sca::ws;
+
+void usage();
+
+//
+// MyValueClient is a sample application that invokes operations on the
+// MyValueService Web Service.
+//
+int main(int argc, char* argv[])
+{
+
+ //
+ // Schema file for the types used by MyValueService
+ //
+ char *pszXSD;
+
+ //
+ // The WebService endpoint uri.
+ //
+ char *pszEndpoint;
+
+ //
+ // TargetNamespace
+ //
+ const char *pszTargetNamespace;
+
+ //
+ // SOAPAction
+ //
+ // Axis 1.5: SoapAction must be <serviceName>#<operationName>.
+ const char *pcszSoapAction = "MyValueService#getMyValue";
+
+ //
+ // Operation Name
+ //
+ const char *pcszOperationName = "getMyValue";
+
+ //
+ // Operation Response Name
+ //
+ const char *pcszOperationResponseName = "getMyValueResponse";
+
+
+ // Get the input parameters.
+ if (argc == 3)
+ {
+ // Schema file.
+ pszXSD = argv[1];
+ // Web Service endpoint.
+ pszEndpoint = argv[2];
+ }
+ else
+ {
+ usage();
+ }
+
+ // The current version of SDO does not support the embedded schema in the wsdl file,
+ // so we have to load an external schema.
+ XSDHelperPtr xsdHelper = HelperProvider::getXSDHelper();
+
+ try
+ {
+ cout << "define file: " << pszXSD <<endl;
+ pszTargetNamespace = xsdHelper->defineFile(pszXSD);
+ }
+ catch (SDORuntimeException ex)
+ {
+ cout << ex << endl;
+ exit(1);
+ }
+ cout << "define file done: " << pszTargetNamespace <<endl;
+
+
+ // Create an SDO for the request
+ DataFactoryPtr factory = xsdHelper->getDataFactory();
+ DataObjectPtr requestDO = 0;
+
+ try
+ {
+ // Create the root element for the operation and then add the parameters
+ // we need to invoke the operation.
+ requestDO = factory->create(pszTargetNamespace, pcszOperationName);
+ requestDO->setCString("customerID", "12345");
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "SDORuntimeException: " << e << endl;
+ exit(1);
+ }
+
+ //
+ // Create an SDOStub that will use the request SDO to invoke the operation.
+ //
+ SDOStub *stub = new SDOStub();
+ stub->setEndpoint(pszEndpoint);
+ stub->setOperationName(pcszOperationName);
+ stub->setTargetNamespace(pszTargetNamespace);
+ stub->setOperationResponseName(pcszOperationResponseName);
+ stub->setSoapAction(pcszSoapAction);
+ // DEBUG - Don't let the soap transport timeout while debugging.
+ stub->setTransportTimeout(0);
+ // DEBUG
+
+ try
+ {
+ // Invoke the operation.
+ DataObjectPtr responseDO = stub->invoke(requestDO, factory);
+ // Print the response.
+ if (responseDO != 0)
+ {
+ cout << "MyValueClient: response DataObject = " << endl;
+ Utils::printDO(responseDO);
+ cout << endl;
+ float fValue = responseDO->getFloat("myValue");
+ cout << "MyValueClient: myValue = " << fValue;
+ }
+ else
+ {
+ cout << "MyValueClient: MyValueService did not return a result" << endl;
+ }
+ }
+ catch (SDORuntimeException& e)
+ {
+ cout << "SDORuntimeException: " << e << endl;
+ }
+ catch (ServiceRuntimeException& e)
+ {
+ cout << "ServiceRuntimeException: " << e << endl;
+ }
+ catch(exception& e)
+ {
+ cout << "Exception: " << e.what() << endl;
+ }
+
+
+ return 0;
+}
+
+//
+// Print usage message.
+//
+void usage()
+{
+ cout << "MyValueClient.exe: Invoke operations on MyValueService Web Service" << endl;
+ cout << "Usage: MyValueClient XSD endpoint" << endl;
+ cout << "where XSD = path and name of XSD file that defines the MyValue types" << endl;
+ cout << " endpoint = web service endpoint" << endl;
+ exit(1);
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Makefile.am
new file mode 100644
index 0000000000..7541093280
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/Makefile.am
@@ -0,0 +1,23 @@
+SUBDIRS = MyValueModule Client
+
+deploy_dir = $(top_builddir)/samples/runtime
+deploy_module = $(deploy_dir)/modules/MyValueModule
+
+install-exec-local:
+ cp MyValueSubsystem/sca.subsystem $(deploy_dir)/subsystems/MyValueSubsystem
+ cp MyValueModule/sca.module $(deploy_module)
+ cp MyValueModule/CustomerInfo.fragment $(deploy_module)
+ cp MyValueModule/Tuscany-model.config $(deploy_module)
+ cp MyValueModule/CustomerInfo/CustomerInfoImpl.componentType $(deploy_module)/CustomerInfo
+ cp MyValueModule/CustomerInfo/.libs/libCustomerInfo.so $(deploy_module)/CustomerInfo
+ cp MyValueModule/CustomerInfo/CustomerInfo.h $(deploy_module)/CustomerInfo
+ cp MyValueModule/CustomerInfo/CustomerInfoImpl.h $(deploy_module)/CustomerInfo
+ cp MyValueModule/MyValue/MyValueImpl.componentType $(deploy_module)/MyValue
+ cp MyValueModule/MyValue/MyValue.h $(deploy_module)/MyValue
+ cp MyValueModule/MyValue/MyValueImpl.h $(deploy_module)/MyValue
+ cp MyValueModule/MyValue/MyValueService.wsdl $(deploy_module)/MyValue
+ cp MyValueModule/MyValue/.libs/libMyValue.so $(deploy_module)/MyValue
+ cp MyValueModule/StockQuoteService/StockQuoteService.h $(deploy_module)/StockQuoteService
+ cp MyValueModule/StockQuoteService/StockQuoteService.wsdl $(deploy_module)/StockQuoteService
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo.fragment
new file mode 100755
index 0000000000..b7f79799b5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo.fragment
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo/libCustomerInfo.so" header="CustomerInfo/CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfo.h
new file mode 100755
index 0000000000..766fc55fe6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfo.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+ virtual const char* getCustomerInformation(const char* customerID) = 0;
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.componentType
new file mode 100755
index 0000000000..52988cb90a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.componentType
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="CustomerInfo/CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.cpp
new file mode 100755
index 0000000000..ed3ff5e2ff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.cpp
@@ -0,0 +1,79 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "CustomerInfoImpl.h"
+#include <ostream>
+#include <string.h>
+#include "osoa/sca/sca.h"
+#include "commonj/sdo/DataObjectInstance.h"
+using namespace osoa::sca;
+using namespace commonj::sdo;
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CustomerInfoImpl::CustomerInfoImpl()
+{
+ cout << "Construct CustomerInfoImpl" << endl;
+
+}
+
+CustomerInfoImpl::~CustomerInfoImpl()
+{
+ cout << "Destroy CustomerInfoImpl" << endl;
+}
+
+//////////////////////////////////////////////////////////////////////
+// Other methods
+//////////////////////////////////////////////////////////////////////
+const char* CustomerInfoImpl::getCustomerInformation(const char* customerID)
+{
+ cout << "In getCustomerInformation with customerid: " << customerID << endl;
+
+
+
+ ComponentContext myContext = ComponentContext::getCurrent();
+
+ DataObjectInstance properties = myContext.getProperties();
+ DataObjectInstance props2 = properties;
+ if (properties)
+ {
+ const char* fredVal = properties->getCString("Fred");
+ cout << "Property Fred value: " << fredVal <<endl;
+
+
+ DataObjectList& joeList = properties->getList("Joe");
+ for (int i=0; i<joeList.size();i++)
+ {
+ cout << "Property Joe value " << i << ": " << joeList.getInteger(i) <<endl;
+ }
+ }
+
+ if (!strcmp("12345", customerID))
+ {
+ return "IBM";
+ }
+ else
+ {
+ throw "Wobbler";
+ }
+
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.h
new file mode 100755
index 0000000000..c943b1d666
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/CustomerInfoImpl.h
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/Makefile.am
new file mode 100644
index 0000000000..78161c429c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/CustomerInfo/Makefile.am
@@ -0,0 +1,15 @@
+lib_LTLIBRARIES = libCustomerInfo.la
+
+libCustomerInfo_la_SOURCES = \
+CustomerInfoImpl.cpp \
+CustomerInfoImpl_CustomerInfoService_Proxy.cpp \
+CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
+
+libCustomerInfo_la_LIBADD = -L$(top_builddir)/runtime/core/src -ltuscany_sca \
+ -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo
+
+INCLUDES = -I.. \
+ -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include
+
+install: \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Makefile.am
new file mode 100644
index 0000000000..7d57c06f3d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Makefile.am
@@ -0,0 +1,10 @@
+SUBDIRS = CustomerInfo MyValue
+
+BUILT_SOURCES = scagen
+
+scagen:
+ cd $(top_builddir)/bin && \
+ ./scagen.sh -dir $(prefix)/samples/MyValue/MyValueModule -output $(prefix)/samples/MyValue/MyValueModule
+ mv CustomerInfoImpl_* CustomerInfo
+ mv MyValueImpl_* MyValue
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/Makefile.am
new file mode 100644
index 0000000000..85e1077998
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/Makefile.am
@@ -0,0 +1,17 @@
+lib_LTLIBRARIES = libMyValue.la
+
+libMyValue_la_SOURCES = \
+MyValueImpl.cpp \
+MyValueImpl_customerInfo_Proxy.cpp \
+MyValueImpl_MyValueService_Proxy.cpp \
+MyValueImpl_MyValueService_Wrapper.cpp \
+MyValueImpl_stockQuote_Proxy.cpp
+
+libMyValue_la_LIBADD = -L$(top_builddir)/runtime/core/src -ltuscany_sca \
+ -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo
+
+INCLUDES = -I.. \
+ -I$(top_builddir)/runtime/core/src \
+ -I${TUSCANY_SDOCPP}/include
+
+install: \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValue.h
new file mode 100755
index 0000000000..3efa7ecc61
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValue.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValue_h
+#define MyValue_h
+
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+
+class MyValue
+{
+public:
+ virtual DataObjectPtr getMyValue(DataObjectPtr inDataObject) = 0;
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.componentType
new file mode 100755
index 0000000000..16530400b5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.componentType
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp header="MyValue/MyValue.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="customerInfo">
+ <interface.cpp header="CustomerInfo/CustomerInfo.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService/StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.cpp
new file mode 100755
index 0000000000..4a2d64ea6d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.cpp
@@ -0,0 +1,143 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//
+// MyValueImpl.cpp: implementation of the MyValueImpl class.
+//
+
+#include "commonj/sdo/HelperProvider.h"
+#include "commonj/sdo/SDO.h"
+#include "osoa/sca/sca.h"
+#include "MyValueImpl.h"
+#include "CustomerInfo/CustomerInfo.h"
+#include "StockQuoteService/StockQuoteService.h"
+#include <iostream>
+
+using namespace std;
+using namespace osoa::sca;
+using namespace commonj::sdo;
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+MyValueImpl::MyValueImpl()
+{
+ cout << "Construct MyValueImpl" << endl;
+
+}
+
+MyValueImpl::~MyValueImpl()
+{
+ cout << "Destroy MyValueImpl" << endl;
+}
+
+//////////////////////////////////////////////////////////////////////
+// Other methods
+//////////////////////////////////////////////////////////////////////
+DataObjectPtr MyValueImpl::getMyValue(DataObjectPtr inDataObject)
+{
+ DataObjectPtr responseDO = 0;
+
+ string customerID = inDataObject->getCString("customerID");
+ cout << "In getMyValue with customerid: " << customerID << endl;
+
+ // Get the CustomerInfo service.
+ ComponentContext myContext = ComponentContext::getCurrent();
+ CustomerInfo* customerInfoService = (CustomerInfo*)myContext.getService("customerInfo");
+
+ if (customerInfoService == 0)
+ {
+ cout << "Unable to find customer info service" << endl;
+
+ return responseDO;
+ }
+
+ // Get the name of the stock for customer 'customerID' from the customerInfoService.
+ const char * stock;
+ try
+ {
+ stock = customerInfoService->getCustomerInformation(customerID.c_str());
+ }
+ catch(const char* x)
+ {
+ cout << "Exception caught: " << x <<endl;
+ throw;
+ }
+
+
+ // Check that we get the same stock back when iterating over the customerInfo services.
+ ServiceList serviceList = myContext.getServices("customerInfo");
+ for (int i=0; i<serviceList.size();i++)
+ {
+ CustomerInfo* service = (CustomerInfo*)(serviceList[i]);
+ stock = service->getCustomerInformation(customerID.c_str());
+ cout << "Stock from getServices " << i << " : " << stock <<endl;
+
+ }
+
+ // Use a second SCA reference to get the stock price for the customer's stock.
+ StockQuoteService* stockQuoteService = (StockQuoteService*)myContext.getService("stockQuote");
+
+ if (stockQuoteService == 0)
+ {
+ cout << "Unable to find stock quote service" << endl;
+
+ return responseDO;
+ }
+
+ // Create a data object representing the requests (use dynamic API until static is available)
+ DataObjectPtr stockQuoteRequestDO;
+ DataFactoryPtr factory;
+ try
+ {
+ // Create the request DO for the StockQuoteService.
+ factory = myContext.getDataFactory();
+ stockQuoteRequestDO = factory->create("http://swanandmokashi.com", "GetQuotes");
+ stockQuoteRequestDO->setCString("QuoteTicker", stock);
+
+ // Invoke the StockQuoteService
+ DataObjectPtr stockQuoteResponseDO = stockQuoteService->GetStockQuotes(stockQuoteRequestDO);
+
+ // DEBUG (Print the response from the StockQuoteService)
+ XMLHelperPtr xmlHelper = HelperProvider::getXMLHelper(factory);;
+ XMLDocumentPtr responseDoc =
+ xmlHelper->createDocument(stockQuoteResponseDO, "http://swanandmokashi.com", "GetQuotesResponse");
+ responseDoc->setXMLDeclaration(false);
+ char *responseXML = xmlHelper->save(responseDoc);
+ cout << "Response XML from StockQuoteService = " << endl;
+ cout << responseXML << endl;
+ cout << endl;
+ // DEBUG
+
+ // Create the MyValueService response DataObject using the results of the StockQuoteService.
+ responseDO = factory->create("http://www.myvalue.org/MyValueService/", "getMyValueResponse");
+ DataObjectPtr getQuotesResultDO = stockQuoteResponseDO->getDataObject("GetQuotesResult");
+ DataObjectList& quoteList = getQuotesResultDO->getList("Quote");
+ float fQuote = quoteList[0]->getFloat("StockQuote");
+
+ responseDO->setFloat("myValue", fQuote);
+ }
+ catch (SDORuntimeException sdoE)
+ {
+ cout << sdoE;
+ }
+
+ return responseDO;
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.h
new file mode 100755
index 0000000000..05aa7066c1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueImpl.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+class MyValueImpl : public MyValue
+{
+public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual DataObjectPtr getMyValue(DataObjectPtr inDataObject);
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.wsdl
new file mode 100755
index 0000000000..3bc1a12d5c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.wsdl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.myvalue.org/MyValueService/"
+ targetNamespace="http://www.myvalue.org/MyValueService/">
+ <types>
+ <xs:schema targetNamespace="http://www.myvalue.org/MyValueService/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.myvalue.org/MyValueService/"
+ elementFormDefault="qualified">
+
+ <xs:element name="getMyValue">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="customerID" type="xs:string" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="getMyValueResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="myValue" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ </xs:schema>
+ </types>
+
+ <message name="getMyValueRequestMsg">
+ <part name="body" element="tns:getMyValue"/>
+ </message>
+
+ <message name="getMyValueResponseMsg">
+ <part name="body" element="tns:getMyValueResponse"/>
+ </message>
+
+ <portType name="MyValueServicePortType">
+ <operation name="getMyValue">
+ <input message="tns:getMyValueRequestMsg"/>
+ <output message="tns:getMyValueResponseMsg"/>
+ </operation>
+ </portType>
+
+ <binding name="MyValueServiceBinding" type="tns:MyValueServicePortType">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="getMyValue">
+ <soap:operation soapAction="MyValueService#getMyValue"/>
+ <input>
+ <soap:body use="literal"/>
+ </input>
+ <output>
+ <soap:body use="literal"/>
+ </output>
+ </operation>
+ </binding>
+
+ <service name="MyValueService">
+ <port name="MyValueServicePort" binding="tns:MyValueServiceBinding">
+ <soap:address location="http://localhost/axis/MyValueService"/>
+ </port>
+ </service>
+</definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.xsd
new file mode 100755
index 0000000000..bf41ea511a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/MyValue/MyValueService.xsd
@@ -0,0 +1,39 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema targetNamespace="http://www.myvalue.org/MyValueService/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.myvalue.org/MyValueService/"
+ elementFormDefault="qualified">
+
+ <xs:element name="getMyValue">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="customerID" type="xs:string" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="getMyValueResponse">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="myValue" type="xs:float" minOccurs="1"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.h
new file mode 100755
index 0000000000..7da4069bd1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef StockQuoteService_h
+#define StockQuoteService_h
+#include <string>
+#include "commonj/sdo/SDO.h"
+using std::string;
+class StockQuoteService
+{
+public:
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes(commonj::sdo::DataObjectPtr request) = 0;
+
+};
+
+#endif // StockQuoteService_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.wsdl
new file mode 100755
index 0000000000..4917cde583
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/StockQuoteService/StockQuoteService.wsdl
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:s="http://www.w3.org/2001/XMLSchema"
+ xmlns:s0="http://swanandmokashi.com"
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
+ xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+ <types>
+ <s:schema elementFormDefault="qualified"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns:s="http://www.w3.org/2001/XMLSchema">
+ <s:element name="GetQuotes">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="QuoteTicker" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuotesResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="GetQuotesResult" type="s0:ArrayOfQuote" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:complexType name="ArrayOfQuote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="unbounded"
+ name="Quote" type="s0:Quote" />
+ </s:sequence>
+ </s:complexType>
+ <s:complexType name="Quote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="CompanyName" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockTicker" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockQuote" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="LastUpdated" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Change"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="OpenPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayHighPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayLowPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Volume"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="MarketCap" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="YearRange" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ <s:element name="ArrayOfQuote" nillable="true"
+ type="s0:ArrayOfQuote" />
+ </s:schema>
+ </types>
+ <message name="GetQuotesSoapIn">
+ <part name="parameters" element="s0:GetQuotes" />
+ </message>
+ <message name="GetQuotesSoapOut">
+ <part name="parameters" element="s0:GetQuotesResponse" />
+ </message>
+ <message name="GetQuotesHttpGetIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpGetOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <message name="GetQuotesHttpPostIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpPostOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <portType name="StockQuotesSoap">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesSoapIn" />
+ <output name="GetQuotes" message="s0:GetQuotesSoapOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpGet">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpGetIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpGetOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpPost">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpPostIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpPostOut" />
+ </operation>
+ </portType>
+ <binding name="StockQuotesSoap" type="s0:StockQuotesSoap">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+ style="document" />
+ <operation name="GetStockQuotes">
+ <soap:operation
+ soapAction="http://swanandmokashi.com/GetQuotes" style="document" />
+ <input name="GetQuotes">
+ <soap:body use="literal" />
+ </input>
+ <output name="GetQuotes">
+ <soap:body use="literal" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpGet" type="s0:StockQuotesHttpGet">
+ <http:binding verb="GET" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <http:urlEncoded />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpPost" type="s0:StockQuotesHttpPost">
+ <http:binding verb="POST" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <mime:content type="application/x-www-form-urlencoded" />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <service name="StockQuotes">
+ <port name="StockQuotesSoap" binding="s0:StockQuotesSoap">
+ <soap:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpGet"
+ binding="s0:StockQuotesHttpGet">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpPost"
+ binding="s0:StockQuotesHttpPost">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ </service>
+</definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Tuscany-model.config
new file mode 100755
index 0000000000..2667f62990
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/Tuscany-model.config
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="StockQuoteService/StockQuoteService.wsdl"/>
+ <file name="MyValue/MyValueService.wsdl"/>
+ </wsdl>
+ <xsd>
+ </xsd>
+</tuscany-model> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/sca.module
new file mode 100755
index 0000000000..bda42e04bc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueModule/sca.module
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueService" multiplicity="1..1">
+ <interface.wsdl interface="MyValue/MyValueService.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceBinding"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue/libMyValue.so" header="MyValue/MyValueImpl.h"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService/StockQuoteService.h"/>
+ <binding.ws port="http://swanandmokashi.com#wsdl.endpoint(StockQuotes/StockQuotesSoap)"/>
+ </externalService>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueSubsystem/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueSubsystem/sca.subsystem
new file mode 100755
index 0000000000..ae858ea331
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/MyValueSubsystem/sca.subsystem
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9"
+
+ name="MyValueSubsystem">
+
+ <moduleComponent name="MyValue" module="MyValueModule">
+
+ </moduleComponent>
+
+</subsystem>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/runMyValueClient.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/runMyValueClient.sh
new file mode 100755
index 0000000000..e5feeda1f0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/runMyValueClient.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+APFULLDIR=`pwd`
+
+export SCA4CPP_HOME="$APFULLDIR"
+if [ x$SCA4CPP = x ]; then
+export TUSCANY_SCACPP="$SCA4CPP_HOME"
+fi
+echo "Using SCA installed at $SCA4CPP_HOME"
+
+if [ x$AXISCPP_DEPLOY = x ]; then
+echo "AXISCPP_DEPLOY not set"
+exit;
+fi
+echo "Using Axis C++ installed at $AXISCPP_DEPLOY"
+
+if [ x$XERCES_DEPLOY = x ]; then
+echo "XERCES_DEPLOY not set"
+exit;
+fi
+echo "Using Xerces C++ installed at $XERCES_DEPLOY"
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+TEST_ROOT=$SCA4CPP_HOME/runtime/core/test
+
+export LD_LIBRARY_PATH=$TUSCANY_SCACPP/lib:$TUSCANY_SDOCPP/lib:$LD_LIBRARY_PATH:$AXISCPP_DEPLOY/lib:$XERCES_DEPLOY/lib
+
+export TUSCANY_SCACPP_SYSTEM_ROOT=$TEST_ROOT/testSCASystem
+export TUSCANY_SCACPP_DEFAULT_MODULE=SubSystem1
+
+cd $TUSCANY_SCACPP/bin/test
+./tuscany_sca_test
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/server.wsdd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/server.wsdd
new file mode 100755
index 0000000000..8b80b4b6ec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/MyValue/server.wsdd
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!-- The Entity, wspath in the following internal subset allows setting a path for the webservices location -->
+<!--<!DOCTYPE vars [ <!ENTITY wspath "/Apache2.0.54/Apache2/Axis/webservices/"> ]>-->
+
+<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:C="http://xml.apache.org/axis/wsdd/providers/C" xmlns:CPP="http://xml.apache.org/axis/wsdd/providers/CPP">
+ <globalConfiguration>
+ </globalConfiguration>
+
+ <service name="MyValueService" provider="CPP:DOCUMENT" description="MyValueService">
+ <requestFlow>
+ <handler name="SCAWSHandler" type="C:\Apache2.0.54\Apache2\Axis\handlers\tuscany_sca_axis_handler.dll">
+ <parameter name="targetNamespace" value="http://www.myvalue.org/MyValueService/"/>
+ <parameter name="scaEntryPoint" value="MyValueSubsystem/MyValue/MyValueService"/>
+ </handler>
+ </requestFlow>
+
+ <parameter name="className" value="C:\Apache2.0.54\Apache2\Axis\webservices\tuscany_sca_axis_wrapper.dll"/>
+ <parameter name="allowedMethods" value="getMyValue "/>
+ </service>
+
+</deployment>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NEWS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NEWS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NEWS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NOTICE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NOTICE
new file mode 100644
index 0000000000..bfb81409ad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/NOTICE
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/) \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/README b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/README
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/README
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/autogen.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/autogen.sh
new file mode 100755
index 0000000000..3cebb0a380
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/autogen.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+for i in "libtoolize --force" aclocal autoconf autoheader
+do
+ echo -n "Running $i..."
+ $i || exit 1
+ echo 'done.'
+done
+
+echo -n 'Running automake...'
+automake --add-missing
+echo 'done.'
+exit 0
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/build.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/build.sh
new file mode 100755
index 0000000000..72e1466c1f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/build.sh
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+if [ x$TUSCANY_SCACPP = x ]; then
+echo "TUSCANY_SCACPP not set"
+exit;
+fi
+echo "Using SCA installed at $TUSCANY_SCACPP"
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"
+exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+./configure --prefix=${TUSCANY_SCACPP} --enable-static=no
+make
+make install
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/configure.ac b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/configure.ac
new file mode 100644
index 0000000000..e4c9932dbb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/configure.ac
@@ -0,0 +1,26 @@
+dnl run autogen.sh to generate the configure script.
+
+AC_PREREQ(2.59)
+AC_INIT(tuscany_sca_samples, 0.1.incubating-M1)
+AC_CANONICAL_SYSTEM
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+AC_PREFIX_DEFAULT(/usr/local/tuscany/sca/samples)
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_LIBTOOL
+
+AC_CONFIG_FILES([Makefile
+ Calculator/Makefile
+ Calculator/CalculatorModule/Makefile
+ Calculator/Client/Makefile
+ Calculator/WSClient/Makefile
+ ])
+AC_OUTPUT
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.dsw b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.dsw
new file mode 100644
index 0000000000..5dbc8fdd57
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.dsw
@@ -0,0 +1,62 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "Calculator"=.\Calculator\Calculator.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "Client"=.\Client\Client.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name Calculator
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "WSClient"=.\WSClient\WSClient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name Calculator
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name Client
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.ncb b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.ncb
new file mode 100644
index 0000000000..3a80eb1456
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.ncb
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.opt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.opt
new file mode 100644
index 0000000000..79b2ac8cec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator.opt
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.dsp
new file mode 100644
index 0000000000..19c7866d5f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.dsp
@@ -0,0 +1,189 @@
+# Microsoft Developer Studio Project File - Name="Calculator" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=Calculator - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Calculator.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Calculator.mak" CFG="Calculator - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Calculator - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Calculator - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Calculator - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CALCULATOR_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CALCULATOR_EXPORTS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /machine:I386 /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+
+!ELSEIF "$(CFG)" == "Calculator - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CALCULATOR_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CALCULATOR_EXPORTS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /debug /machine:I386 /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+
+!ENDIF
+
+# Begin Target
+
+# Name "Calculator - Win32 Release"
+# Name "Calculator - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\Calculator.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorDivideService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Wrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Wrapper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideService.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Proxy.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Proxy.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Wrapper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Wrapper.h
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorDivideService_Proxy.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\Calculator.wsdl
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\sca.module
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorSubsystem\sca.subsystem
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\services.xml
+# End Source File
+# Begin Source File
+
+SOURCE="..\..\..\..\..\Calculator\CalculatorModule\Tuscany-model.config"
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.mak
new file mode 100644
index 0000000000..17fdd321de
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Calculator/Calculator.mak
@@ -0,0 +1,254 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on Calculator.dsp
+!IF "$(CFG)" == ""
+CFG=Calculator - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to Calculator - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "Calculator - Win32 Release" && "$(CFG)" != "Calculator - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Calculator.mak" CFG="Calculator - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Calculator - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "Calculator - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "Calculator - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\Calculator.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\CalculatorImpl.obj"
+ -@erase "$(INTDIR)\CalculatorImpl_CalculatorDivideService_Proxy.obj"
+ -@erase "$(INTDIR)\CalculatorImpl_CalculatorService_Proxy.obj"
+ -@erase "$(INTDIR)\CalculatorImpl_CalculatorService_Wrapper.obj"
+ -@erase "$(INTDIR)\DivideServiceImpl.obj"
+ -@erase "$(INTDIR)\DivideServiceImpl_DivideService_Proxy.obj"
+ -@erase "$(INTDIR)\DivideServiceImpl_DivideService_Wrapper.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\Calculator.dll"
+ -@erase "$(OUTDIR)\Calculator.exp"
+ -@erase "$(OUTDIR)\Calculator.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CALCULATOR_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Calculator.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\Calculator.pdb" /machine:I386 /out:"$(OUTDIR)\Calculator.dll" /implib:"$(OUTDIR)\Calculator.lib" /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+LINK32_OBJS= \
+ "$(INTDIR)\CalculatorImpl.obj" \
+ "$(INTDIR)\CalculatorImpl_CalculatorDivideService_Proxy.obj" \
+ "$(INTDIR)\CalculatorImpl_CalculatorService_Proxy.obj" \
+ "$(INTDIR)\CalculatorImpl_CalculatorService_Wrapper.obj" \
+ "$(INTDIR)\DivideServiceImpl.obj" \
+ "$(INTDIR)\DivideServiceImpl_DivideService_Proxy.obj" \
+ "$(INTDIR)\DivideServiceImpl_DivideService_Wrapper.obj"
+
+"$(OUTDIR)\Calculator.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ELSEIF "$(CFG)" == "Calculator - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\Calculator.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\CalculatorImpl.obj"
+ -@erase "$(INTDIR)\CalculatorImpl_CalculatorDivideService_Proxy.obj"
+ -@erase "$(INTDIR)\CalculatorImpl_CalculatorService_Proxy.obj"
+ -@erase "$(INTDIR)\CalculatorImpl_CalculatorService_Wrapper.obj"
+ -@erase "$(INTDIR)\DivideServiceImpl.obj"
+ -@erase "$(INTDIR)\DivideServiceImpl_DivideService_Proxy.obj"
+ -@erase "$(INTDIR)\DivideServiceImpl_DivideService_Wrapper.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\Calculator.dll"
+ -@erase "$(OUTDIR)\Calculator.exp"
+ -@erase "$(OUTDIR)\Calculator.ilk"
+ -@erase "$(OUTDIR)\Calculator.lib"
+ -@erase "$(OUTDIR)\Calculator.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CALCULATOR_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Calculator.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\Calculator.pdb" /debug /machine:I386 /out:"$(OUTDIR)\Calculator.dll" /implib:"$(OUTDIR)\Calculator.lib" /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+LINK32_OBJS= \
+ "$(INTDIR)\CalculatorImpl.obj" \
+ "$(INTDIR)\CalculatorImpl_CalculatorDivideService_Proxy.obj" \
+ "$(INTDIR)\CalculatorImpl_CalculatorService_Proxy.obj" \
+ "$(INTDIR)\CalculatorImpl_CalculatorService_Wrapper.obj" \
+ "$(INTDIR)\DivideServiceImpl.obj" \
+ "$(INTDIR)\DivideServiceImpl_DivideService_Proxy.obj" \
+ "$(INTDIR)\DivideServiceImpl_DivideService_Wrapper.obj"
+
+"$(OUTDIR)\Calculator.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("Calculator.dep")
+!INCLUDE "Calculator.dep"
+!ELSE
+!MESSAGE Warning: cannot find "Calculator.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "Calculator - Win32 Release" || "$(CFG)" == "Calculator - Win32 Debug"
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl.cpp
+
+"$(INTDIR)\CalculatorImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorDivideService_Proxy.cpp
+
+"$(INTDIR)\CalculatorImpl_CalculatorDivideService_Proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Proxy.cpp
+
+"$(INTDIR)\CalculatorImpl_CalculatorService_Proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Wrapper.cpp
+
+"$(INTDIR)\CalculatorImpl_CalculatorService_Wrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl.cpp
+
+"$(INTDIR)\DivideServiceImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Proxy.cpp
+
+"$(INTDIR)\DivideServiceImpl_DivideService_Proxy.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Wrapper.cpp
+
+"$(INTDIR)\DivideServiceImpl_DivideService_Wrapper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.dsp
new file mode 100644
index 0000000000..bd5eefe68d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.dsp
@@ -0,0 +1,115 @@
+# Microsoft Developer Studio Project File - Name="Client" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Client - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Client.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Client.mak" CFG="Client - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Client - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Client - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Client - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib tuscany_sca.lib /nologo /subsystem:console /machine:I386 /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=..\deploy.cmd Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "Client - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib tuscany_sca.lib /nologo /subsystem:console /debug /machine:I386 /out:"Debug/Calc.exe" /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=..\deploy.cmd Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "Client - Win32 Release"
+# Name "Client - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\Client\Calc.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\Client\Calculator.h
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.mak
new file mode 100644
index 0000000000..785677547d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/Client/Client.mak
@@ -0,0 +1,262 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on Client.dsp
+!IF "$(CFG)" == ""
+CFG=Client - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to Client - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "Client - Win32 Release" && "$(CFG)" != "Client - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Client.mak" CFG="Client - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Client - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Client - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "Client - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\Client.exe"
+
+!ELSE
+
+ALL : "Calculator - Win32 Release" "$(OUTDIR)\Client.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"Calculator - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\Calc.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\Client.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Client.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib tuscany_sca.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\Client.pdb" /machine:I386 /out:"$(OUTDIR)\Client.exe" /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+LINK32_OBJS= \
+ "$(INTDIR)\Calc.obj" \
+ "..\Calculator\Release\Calculator.lib"
+
+"$(OUTDIR)\Client.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "Calculator - Win32 Release" "$(OUTDIR)\Client.exe"
+ ..\deploy.cmd Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "Client - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\Calc.exe"
+
+!ELSE
+
+ALL : "Calculator - Win32 Debug" "$(OUTDIR)\Calc.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"Calculator - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\Calc.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\Calc.exe"
+ -@erase "$(OUTDIR)\Calc.ilk"
+ -@erase "$(OUTDIR)\Calc.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(TUSCANY_SCACPP)/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\Client.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib tuscany_sca.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\Calc.pdb" /debug /machine:I386 /out:"$(OUTDIR)\Calc.exe" /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)/lib" /libpath:"$(TUSCANY_SCACPP)/lib"
+LINK32_OBJS= \
+ "$(INTDIR)\Calc.obj" \
+ "..\Calculator\Debug\Calculator.lib"
+
+"$(OUTDIR)\Calc.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "Calculator - Win32 Debug" "$(OUTDIR)\Calc.exe"
+ ..\deploy.cmd Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("Client.dep")
+!INCLUDE "Client.dep"
+!ELSE
+!MESSAGE Warning: cannot find "Client.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "Client - Win32 Release" || "$(CFG)" == "Client - Win32 Debug"
+SOURCE=..\..\..\..\..\Calculator\Client\Calc.cpp
+
+"$(INTDIR)\Calc.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "Client - Win32 Release"
+
+"Calculator - Win32 Release" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Release"
+ cd "..\Client"
+
+"Calculator - Win32 ReleaseCLEAN" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Release" RECURSE=1 CLEAN
+ cd "..\Client"
+
+!ELSEIF "$(CFG)" == "Client - Win32 Debug"
+
+"Calculator - Win32 Debug" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Debug"
+ cd "..\Client"
+
+"Calculator - Win32 DebugCLEAN" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\Client"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/BuildInstructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/BuildInstructions.txt
new file mode 100644
index 0000000000..3716551f14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/BuildInstructions.txt
@@ -0,0 +1,95 @@
+
+These sample projects will build:
+
+A basic calculator SCA service.
+A client to test that service.
+A WSClient to test the service as exposed by AXIS2C as a web service.
+
+The sample depdends on the current versions of Tuscany SDO and Tuscany SCA, which in turn
+depend on axis2c version 0.92, and libxml2. See the SCA and SDO project installation
+details.
+
+The sample already has the pre-generated proxy and wrapper code in it, but should
+you need to regenerate these, you will need the command line tool "scagen" which is
+part of the Tuscany SCA project.
+
+The projects expect to following environment variables to be set:
+TUSCANY_SCACPP:
+The directory in which the sca runtime is deployed - probably something ending in sca/deploy.
+
+TUSCANY_SDOCPP:
+The directory where the sdo runtime is deployed - probably something ending in sdo/deploy.
+
+TUSCANY_SCACPP_DEFAULT_MODULE:
+This is the default module to be loaded by SCA. It consists of <subsystem>/<component>.
+In the case of this sample - its set programatically by the client - thats easier when
+using visual studio.
+
+TUSCANY_SCACPP_SYSTEM_ROOT
+This is the point from which SCA will start looking for modules to load. Again this is
+set programmatically by the sample.
+
+AXIS2C_HOME:
+This is where axis2c is deployed- this is only required by the WSClient project.
+
+The Calculator project contains a simple calculator service, and the descriptive files
+which help the runtime to find the service.
+
+
+Rebuilding the proxy and wrapper classes
+========================================
+
+If required, go to the Calculator sample main directory, and
+type:
+"scagen -dir CalculatorModule -output CalculatorModule"
+
+The generated code is put into the CalculatorModule subdirectory.
+
+Building the Client project
+===========================
+
+Set the active project to be "Client", and then build all.
+This will re-build Calculator, then rebuild the Client,
+The final step of the build will call a batch file "deploy.cmd",
+which copies all the required files to the directory samples/Calculator/deploy
+
+Use Project..Settings..Debug and check the path to the executable, check also the
+path to the working directory. Alter these to match your configuration.
+
+Run the project, and your SCA service should be called.
+
+Building the WSClient project
+=============================
+
+Modify the services.xml file, and make the SCA system root defined
+within it comply with your SCA system root.
+
+Set the active project to WSClient and build all.
+
+The last step of the build will run a wsdeploy script, which
+tries to use the environment variable AXIS2C_HOME, to create
+a services/Calculator directory, and deploy the services.xml file.
+The dll which resolves SCA services is called
+tuscany_sca_ws_service.dll - this will be copied to the axis
+tree by the same script file.
+
+To run the axis2 http server, go to the %AXIS2C_HOME%/bin
+directory, and launch the executable.
+
+Now verify that the path to the WSClient executable makes sense
+in your project settings, and run the project.
+
+
+Note
+====
+
+It can be quite hard to debug services which are invoked through axis, as the
+dll including the service is loaded on call. One useful technique is to
+load the axis http server in visual studio (create an empty project and make
+the executable path point to axis2_http_server.exe).
+Now use the Project..Settings..Debug..Addition DLLs option and add
+services/Calculator/tuscany_sca_ws_service.dll.
+You will now be able to set breakpoints in the dll (Axis2EntryPointService_invoke
+is a good place - in Axis2EntryPointService_skeleton.cpp).
+Run your WSclient from another debugger, and the server debugger will break
+on the service code.
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.dsp
new file mode 100644
index 0000000000..5b3739598a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.dsp
@@ -0,0 +1,122 @@
+# Microsoft Developer Studio Project File - Name="WSClient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=WSClient - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "WSClient.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "WSClient.mak" CFG="WSClient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "WSClient - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "WSClient - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "WSClient - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /W3 /GX /O2 /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /subsystem:console /machine:I386 /libpath:"$(TUSCANY_SCACPP)\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=..\wsdeploy.cmd Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "WSClient - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"$(TUSCANY_SCACPP)\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=..\wsdeploy.cmd Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "WSClient - Win32 Release"
+# Name "WSClient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\WSClient\axis2_Calculator_stub.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\WSClient\axis2_Calculator_stub.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\Calculator\WSClient\Calculator_Client.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\BuildInstructions.txt
+# End Source File
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.mak
new file mode 100644
index 0000000000..4ce51c68bb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/WSClient/WSClient.mak
@@ -0,0 +1,298 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on WSClient.dsp
+!IF "$(CFG)" == ""
+CFG=WSClient - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to WSClient - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "WSClient - Win32 Release" && "$(CFG)" != "WSClient - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "WSClient.mak" CFG="WSClient - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "WSClient - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "WSClient - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "WSClient - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\WSClient.exe"
+
+!ELSE
+
+ALL : "Client - Win32 Release" "Calculator - Win32 Release" "$(OUTDIR)\WSClient.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"Calculator - Win32 ReleaseCLEAN" "Client - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\axis2_Calculator_stub.obj"
+ -@erase "$(INTDIR)\Calculator_Client.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\WSClient.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /ML /W3 /GX /O2 /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\WSClient.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\WSClient.pdb" /machine:I386 /out:"$(OUTDIR)\WSClient.exe" /libpath:"$(TUSCANY_SCACPP)\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\axis2_Calculator_stub.obj" \
+ "$(INTDIR)\Calculator_Client.obj" \
+ "..\Calculator\Release\Calculator.lib"
+
+"$(OUTDIR)\WSClient.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "Client - Win32 Release" "Calculator - Win32 Release" "$(OUTDIR)\WSClient.exe"
+ ..\wsdeploy.cmd Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "WSClient - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\WSClient.exe"
+
+!ELSE
+
+ALL : "Client - Win32 Debug" "Calculator - Win32 Debug" "$(OUTDIR)\WSClient.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"Calculator - Win32 DebugCLEAN" "Client - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\axis2_Calculator_stub.obj"
+ -@erase "$(INTDIR)\Calculator_Client.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\WSClient.exe"
+ -@erase "$(OUTDIR)\WSClient.ilk"
+ -@erase "$(OUTDIR)\WSClient.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MLd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)/include" /I "$(AXIS2C_HOME)/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\WSClient.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axiom.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\WSClient.pdb" /debug /machine:I386 /out:"$(OUTDIR)\WSClient.exe" /pdbtype:sept /libpath:"$(TUSCANY_SCACPP)\lib" /libpath:"$(TUSCANY_SDOCPP)\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\axis2_Calculator_stub.obj" \
+ "$(INTDIR)\Calculator_Client.obj" \
+ "..\Calculator\Debug\Calculator.lib"
+
+"$(OUTDIR)\WSClient.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "Client - Win32 Debug" "Calculator - Win32 Debug" "$(OUTDIR)\WSClient.exe"
+ ..\wsdeploy.cmd Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("WSClient.dep")
+!INCLUDE "WSClient.dep"
+!ELSE
+!MESSAGE Warning: cannot find "WSClient.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "WSClient - Win32 Release" || "$(CFG)" == "WSClient - Win32 Debug"
+SOURCE=..\..\..\..\..\Calculator\WSClient\axis2_Calculator_stub.cpp
+
+"$(INTDIR)\axis2_Calculator_stub.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\Calculator\WSClient\Calculator_Client.cpp
+
+"$(INTDIR)\Calculator_Client.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "WSClient - Win32 Release"
+
+"Calculator - Win32 Release" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Release"
+ cd "..\WSClient"
+
+"Calculator - Win32 ReleaseCLEAN" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Release" RECURSE=1 CLEAN
+ cd "..\WSClient"
+
+!ELSEIF "$(CFG)" == "WSClient - Win32 Debug"
+
+"Calculator - Win32 Debug" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Debug"
+ cd "..\WSClient"
+
+"Calculator - Win32 DebugCLEAN" :
+ cd "..\Calculator"
+ $(MAKE) /$(MAKEFLAGS) /F .\Calculator.mak CFG="Calculator - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\WSClient"
+
+!ENDIF
+
+!IF "$(CFG)" == "WSClient - Win32 Release"
+
+"Client - Win32 Release" :
+ cd "..\Client"
+ $(MAKE) /$(MAKEFLAGS) /F .\Client.mak CFG="Client - Win32 Release"
+ cd "..\WSClient"
+
+"Client - Win32 ReleaseCLEAN" :
+ cd "..\Client"
+ $(MAKE) /$(MAKEFLAGS) /F .\Client.mak CFG="Client - Win32 Release" RECURSE=1 CLEAN
+ cd "..\WSClient"
+
+!ELSEIF "$(CFG)" == "WSClient - Win32 Debug"
+
+"Client - Win32 Debug" :
+ cd "..\Client"
+ $(MAKE) /$(MAKEFLAGS) /F .\Client.mak CFG="Client - Win32 Debug"
+ cd "..\WSClient"
+
+"Client - Win32 DebugCLEAN" :
+ cd "..\Client"
+ $(MAKE) /$(MAKEFLAGS) /F .\Client.mak CFG="Client - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\WSClient"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/build.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/build.cmd
new file mode 100644
index 0000000000..4e7f487a14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/build.cmd
@@ -0,0 +1,20 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+setlocal
+cd WSClient
+nmake -f WSClient.mak CFG="WSClient - Win32 Release"
+cd ..
+endlocal \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/deploy.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/deploy.cmd
new file mode 100644
index 0000000000..b7b7ba1c05
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/deploy.cmd
@@ -0,0 +1,61 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+rem Will copy the correct files from the source tree for packaging and deployment of the
+rem SCA sample.
+setlocal
+set currentPath=%~d0%~p0
+set sourcePath=%currentPath%..\..\..\..\Calculator
+
+set buildMode=Release
+if .Debug == %1. (
+set buildMode=Debug
+)
+
+
+if . == %2. (
+set destinationPath=%sourcePath%\deploy
+) ELSE (
+set destinationPath=%2
+)
+
+if not exist %destinationPath%\modules mkdir %destinationPath%\modules
+if not exist %destinationPath%\modules\CalculatorModule mkdir %destinationPath%\modules\CalculatorModule
+
+copy %sourcePath%\CalculatorModule\*.componentType %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\sca.module %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\CalculatorImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideService.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideServiceImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Tuscany-model.config %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.wsdl %destinationPath%\modules\CalculatorModule
+copy %currentPath%\Calculator\%buildMode%\Calculator.dll %destinationPath%\modules\CalculatorModule
+
+if not exist %destinationPath%\bin mkdir %destinationPath%\bin
+copy %currentPath%\Client\%buildMode%\Client.exe %destinationPath%\bin
+if %buildMode% == Debug (
+copy %currentPath%\Client\%buildMode%\Client.pdb %destinationPath%\bin
+)
+copy %sourcePath%\Client\runclient.cmd %destinationPath%\bin
+
+
+if not exist %destinationPath%\subsystems mkdir %destinationPath%\subsystems
+if not exist %destinationPath%\subsystems\CalculatorSubsystem mkdir %destinationPath%\subsystems\CalculatorSubsystem
+
+copy %sourcePath%\CalculatorSubsystem\sca.subsystem %destinationPath%\subsystems\CalculatorSubsystem
+
+endlocal \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/wsdeploy.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/wsdeploy.cmd
new file mode 100644
index 0000000000..68a5090820
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio6/projects/Calculator/wsdeploy.cmd
@@ -0,0 +1,63 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+rem Will copy the correct files from the source tree for packaging and deployment of the
+rem SCA sample.
+setlocal
+set currentPath=%~d0%~p0
+set sourcePath=%currentPath%..\..\..\..\Calculator
+
+set buildMode=Release
+if .Debug == %1. (
+set buildMode=Debug
+)
+
+
+if . == %2. (
+set destinationPath=%sourcePath%\deploy
+) ELSE (
+set destinationPath=%2
+)
+
+
+if not exist %destinationPath%\modules mkdir %destinationPath%\modules
+if not exist %destinationPath%\modules\CalculatorModule mkdir %destinationPath%\modules\CalculatorModule
+
+copy %sourcePath%\CalculatorModule\*.componentType %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\sca.module %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\CalculatorImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideService.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideServiceImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Tuscany-model.config %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.wsdl %destinationPath%\modules\CalculatorModule
+copy %currentPath%\Calculator\%buildMode%\Calculator.dll %destinationPath%\modules\CalculatorModule
+
+if not exist %destinationPath%\bin mkdir %destinationPath%\bin
+copy %currentPath%\WSClient\%buildMode%\WSClient.exe %destinationPath%\bin
+if %buildMode% == Debug (
+copy %currentPath%\WSClient\%buildMode%\WSClient.pdb %destinationPath%\bin
+)
+copy %sourcePath%\WSClient\runwsclient.cmd %destinationPath%\bin
+
+
+if not exist %destinationPath%\subsystems mkdir %destinationPath%\subsystems
+if not exist %destinationPath%\subsystems\CalculatorSubsystem mkdir %destinationPath%\subsystems\CalculatorSubsystem
+
+copy %sourcePath%\CalculatorSubsystem\sca.subsystem %destinationPath%\subsystems\CalculatorSubsystem
+
+
+endlocal \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.sln b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.sln
new file mode 100644
index 0000000000..07c78db063
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.sln
@@ -0,0 +1,35 @@
+Microsoft Visual Studio Solution File, Format Version 7.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Calculator", "Calculator\Calculator.vcproj", "{B1C1917A-4423-456D-9F68-3C600C885A1F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Client", "Client\Client.vcproj", "{CA2CB545-D0E2-416C-BE93-90BC4DD82B90}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WSClient", "WSClient\WSClient.vcproj", "{3CDD5BC2-9722-4F7D-8B0E-1A49D34E7A17}"
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ ConfigName.0 = Debug
+ ConfigName.1 = Release
+ EndGlobalSection
+ GlobalSection(ProjectDependencies) = postSolution
+ {CA2CB545-D0E2-416C-BE93-90BC4DD82B90}.0 = {B1C1917A-4423-456D-9F68-3C600C885A1F}
+ {3CDD5BC2-9722-4F7D-8B0E-1A49D34E7A17}.0 = {B1C1917A-4423-456D-9F68-3C600C885A1F}
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {B1C1917A-4423-456D-9F68-3C600C885A1F}.Debug.ActiveCfg = Debug|Win32
+ {B1C1917A-4423-456D-9F68-3C600C885A1F}.Debug.Build.0 = Debug|Win32
+ {B1C1917A-4423-456D-9F68-3C600C885A1F}.Release.ActiveCfg = Release|Win32
+ {B1C1917A-4423-456D-9F68-3C600C885A1F}.Release.Build.0 = Release|Win32
+ {CA2CB545-D0E2-416C-BE93-90BC4DD82B90}.Debug.ActiveCfg = Debug|Win32
+ {CA2CB545-D0E2-416C-BE93-90BC4DD82B90}.Debug.Build.0 = Debug|Win32
+ {CA2CB545-D0E2-416C-BE93-90BC4DD82B90}.Release.ActiveCfg = Release|Win32
+ {CA2CB545-D0E2-416C-BE93-90BC4DD82B90}.Release.Build.0 = Release|Win32
+ {3CDD5BC2-9722-4F7D-8B0E-1A49D34E7A17}.Debug.ActiveCfg = Debug|Win32
+ {3CDD5BC2-9722-4F7D-8B0E-1A49D34E7A17}.Debug.Build.0 = Debug|Win32
+ {3CDD5BC2-9722-4F7D-8B0E-1A49D34E7A17}.Release.ActiveCfg = Release|Win32
+ {3CDD5BC2-9722-4F7D-8B0E-1A49D34E7A17}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.suo b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.suo
new file mode 100644
index 0000000000..cee3b2f73d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator.suo
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator/Calculator.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator/Calculator.vcproj
new file mode 100644
index 0000000000..5a081e088b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Calculator/Calculator.vcproj
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="Calculator"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)/include,$(TUSCANY_SCACPP)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;CALCULATOR_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Debug/Calculator.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile=".\Debug/Calculator.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)/lib,$(TUSCANY_SCACPP)/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/Calculator.pdb"
+ ImportLibrary=".\Debug/Calculator.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/Calculator.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)/include,$(TUSCANY_SCACPP)/include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;CALCULATOR_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/Calculator.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile=".\Release/Calculator.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)/lib,$(TUSCANY_SCACPP)/lib"
+ ProgramDatabaseFile=".\Release/Calculator.pdb"
+ ImportLibrary=".\Release/Calculator.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/Calculator.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\Calculator.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorDivideService_Proxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorDivideService_Proxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Proxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Proxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Wrapper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\CalculatorImpl_CalculatorService_Wrapper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\DivideService.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Proxy.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Proxy.h">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Wrapper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\DivideServiceImpl_DivideService_Wrapper.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\Calculator.wsdl">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\Tuscany-model.config">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\sca.module">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorSubsystem\sca.subsystem">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\CalculatorModule\services.xml">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Client/Client.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Client/Client.vcproj
new file mode 100644
index 0000000000..0988c9a18c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/Client/Client.vcproj
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="Client"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)/include,$(TUSCANY_SCACPP)/include"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/Client.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sdo.lib tuscany_sca.lib"
+ OutputFile="./Debug/Client.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)/lib,$(TUSCANY_SCACPP)/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/Calc.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/Client.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="..\deploy.cmd Debug"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)/include,$(TUSCANY_SCACPP)/include"
+ PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/Client.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sdo.lib tuscany_sca.lib"
+ OutputFile=".\Release/Client.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)/lib,$(TUSCANY_SCACPP)/lib"
+ ProgramDatabaseFile=".\Release/Client.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/Client.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="..\deploy.cmd Release"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\..\..\Calculator\Client\Calc.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\Client\Calculator.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/BuildInstructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/BuildInstructions.txt
new file mode 100644
index 0000000000..3716551f14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/BuildInstructions.txt
@@ -0,0 +1,95 @@
+
+These sample projects will build:
+
+A basic calculator SCA service.
+A client to test that service.
+A WSClient to test the service as exposed by AXIS2C as a web service.
+
+The sample depdends on the current versions of Tuscany SDO and Tuscany SCA, which in turn
+depend on axis2c version 0.92, and libxml2. See the SCA and SDO project installation
+details.
+
+The sample already has the pre-generated proxy and wrapper code in it, but should
+you need to regenerate these, you will need the command line tool "scagen" which is
+part of the Tuscany SCA project.
+
+The projects expect to following environment variables to be set:
+TUSCANY_SCACPP:
+The directory in which the sca runtime is deployed - probably something ending in sca/deploy.
+
+TUSCANY_SDOCPP:
+The directory where the sdo runtime is deployed - probably something ending in sdo/deploy.
+
+TUSCANY_SCACPP_DEFAULT_MODULE:
+This is the default module to be loaded by SCA. It consists of <subsystem>/<component>.
+In the case of this sample - its set programatically by the client - thats easier when
+using visual studio.
+
+TUSCANY_SCACPP_SYSTEM_ROOT
+This is the point from which SCA will start looking for modules to load. Again this is
+set programmatically by the sample.
+
+AXIS2C_HOME:
+This is where axis2c is deployed- this is only required by the WSClient project.
+
+The Calculator project contains a simple calculator service, and the descriptive files
+which help the runtime to find the service.
+
+
+Rebuilding the proxy and wrapper classes
+========================================
+
+If required, go to the Calculator sample main directory, and
+type:
+"scagen -dir CalculatorModule -output CalculatorModule"
+
+The generated code is put into the CalculatorModule subdirectory.
+
+Building the Client project
+===========================
+
+Set the active project to be "Client", and then build all.
+This will re-build Calculator, then rebuild the Client,
+The final step of the build will call a batch file "deploy.cmd",
+which copies all the required files to the directory samples/Calculator/deploy
+
+Use Project..Settings..Debug and check the path to the executable, check also the
+path to the working directory. Alter these to match your configuration.
+
+Run the project, and your SCA service should be called.
+
+Building the WSClient project
+=============================
+
+Modify the services.xml file, and make the SCA system root defined
+within it comply with your SCA system root.
+
+Set the active project to WSClient and build all.
+
+The last step of the build will run a wsdeploy script, which
+tries to use the environment variable AXIS2C_HOME, to create
+a services/Calculator directory, and deploy the services.xml file.
+The dll which resolves SCA services is called
+tuscany_sca_ws_service.dll - this will be copied to the axis
+tree by the same script file.
+
+To run the axis2 http server, go to the %AXIS2C_HOME%/bin
+directory, and launch the executable.
+
+Now verify that the path to the WSClient executable makes sense
+in your project settings, and run the project.
+
+
+Note
+====
+
+It can be quite hard to debug services which are invoked through axis, as the
+dll including the service is loaded on call. One useful technique is to
+load the axis http server in visual studio (create an empty project and make
+the executable path point to axis2_http_server.exe).
+Now use the Project..Settings..Debug..Addition DLLs option and add
+services/Calculator/tuscany_sca_ws_service.dll.
+You will now be able to set breakpoints in the dll (Axis2EntryPointService_invoke
+is a good place - in Axis2EntryPointService_skeleton.cpp).
+Run your WSclient from another debugger, and the server debugger will break
+on the service code.
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/WSClient.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/WSClient.vcproj
new file mode 100644
index 0000000000..f76277238b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/WSClient/WSClient.vcproj
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="WSClient"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TUSCANY_SCACPP),$(TUSCANY_SDOCPP)/include,$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Debug/WSClient.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axiom.lib"
+ OutputFile=".\Debug/WSClient.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SCACPP)\lib,$(TUSCANY_SDOCPP)\lib,$(AXIS2C_HOME)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/WSClient.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/WSClient.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="..\wsdeploy.cmd Debug"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="$(TUSCANY_SCACPP),$(TUSCANY_SDOCPP)/include,$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="4"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/WSClient.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sca.lib tuscany_sdo.lib axis2_engine.lib axis2_parser.lib axis2_util.lib axiom.lib"
+ OutputFile=".\Release/WSClient.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SCACPP)\lib,$(TUSCANY_SDOCPP)\lib,$(AXIS2C_HOME)\lib"
+ ProgramDatabaseFile=".\Release/WSClient.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/WSClient.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="..\wsdeploy.cmd Release"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\..\..\Calculator\WSClient\Calculator_Client.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\WSClient\axis2_Calculator_stub.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\Calculator\WSClient\axis2_Calculator_stub.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ <File
+ RelativePath=".\BuildInstructions.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/deploy.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/deploy.cmd
new file mode 100644
index 0000000000..b7b7ba1c05
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/deploy.cmd
@@ -0,0 +1,61 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+rem Will copy the correct files from the source tree for packaging and deployment of the
+rem SCA sample.
+setlocal
+set currentPath=%~d0%~p0
+set sourcePath=%currentPath%..\..\..\..\Calculator
+
+set buildMode=Release
+if .Debug == %1. (
+set buildMode=Debug
+)
+
+
+if . == %2. (
+set destinationPath=%sourcePath%\deploy
+) ELSE (
+set destinationPath=%2
+)
+
+if not exist %destinationPath%\modules mkdir %destinationPath%\modules
+if not exist %destinationPath%\modules\CalculatorModule mkdir %destinationPath%\modules\CalculatorModule
+
+copy %sourcePath%\CalculatorModule\*.componentType %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\sca.module %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\CalculatorImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideService.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideServiceImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Tuscany-model.config %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.wsdl %destinationPath%\modules\CalculatorModule
+copy %currentPath%\Calculator\%buildMode%\Calculator.dll %destinationPath%\modules\CalculatorModule
+
+if not exist %destinationPath%\bin mkdir %destinationPath%\bin
+copy %currentPath%\Client\%buildMode%\Client.exe %destinationPath%\bin
+if %buildMode% == Debug (
+copy %currentPath%\Client\%buildMode%\Client.pdb %destinationPath%\bin
+)
+copy %sourcePath%\Client\runclient.cmd %destinationPath%\bin
+
+
+if not exist %destinationPath%\subsystems mkdir %destinationPath%\subsystems
+if not exist %destinationPath%\subsystems\CalculatorSubsystem mkdir %destinationPath%\subsystems\CalculatorSubsystem
+
+copy %sourcePath%\CalculatorSubsystem\sca.subsystem %destinationPath%\subsystems\CalculatorSubsystem
+
+endlocal \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/wsdeploy.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/wsdeploy.cmd
new file mode 100644
index 0000000000..68a5090820
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/samples/ides/devstudio7/projects/Calculator/wsdeploy.cmd
@@ -0,0 +1,63 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+rem Will copy the correct files from the source tree for packaging and deployment of the
+rem SCA sample.
+setlocal
+set currentPath=%~d0%~p0
+set sourcePath=%currentPath%..\..\..\..\Calculator
+
+set buildMode=Release
+if .Debug == %1. (
+set buildMode=Debug
+)
+
+
+if . == %2. (
+set destinationPath=%sourcePath%\deploy
+) ELSE (
+set destinationPath=%2
+)
+
+
+if not exist %destinationPath%\modules mkdir %destinationPath%\modules
+if not exist %destinationPath%\modules\CalculatorModule mkdir %destinationPath%\modules\CalculatorModule
+
+copy %sourcePath%\CalculatorModule\*.componentType %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\sca.module %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\CalculatorImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideService.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\DivideServiceImpl.h %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Tuscany-model.config %destinationPath%\modules\CalculatorModule
+copy %sourcePath%\CalculatorModule\Calculator.wsdl %destinationPath%\modules\CalculatorModule
+copy %currentPath%\Calculator\%buildMode%\Calculator.dll %destinationPath%\modules\CalculatorModule
+
+if not exist %destinationPath%\bin mkdir %destinationPath%\bin
+copy %currentPath%\WSClient\%buildMode%\WSClient.exe %destinationPath%\bin
+if %buildMode% == Debug (
+copy %currentPath%\WSClient\%buildMode%\WSClient.pdb %destinationPath%\bin
+)
+copy %sourcePath%\WSClient\runwsclient.cmd %destinationPath%\bin
+
+
+if not exist %destinationPath%\subsystems mkdir %destinationPath%\subsystems
+if not exist %destinationPath%\subsystems\CalculatorSubsystem mkdir %destinationPath%\subsystems\CalculatorSubsystem
+
+copy %sourcePath%\CalculatorSubsystem\sca.subsystem %destinationPath%\subsystems\CalculatorSubsystem
+
+
+endlocal \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.bat b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.bat
new file mode 100644
index 0000000000..42e56a6189
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.bat
@@ -0,0 +1,45 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+
+
+@setlocal
+
+if "%TUSCANY_SCACPP%" == "" (
+echo "TUSCANY_SCACPP not set"
+set TUSCANY_SCACPP=%cd%\deploy
+)
+echo using TUSCANY_SCACPP: %TUSCANY_SCACPP%
+
+if "%AXIS2C_HOME%" == "" (
+echo "AXIS2C_HOME not set"
+goto end
+)
+echo using Axis2C: %AXIS2C_HOME%"
+
+if "%TUSCANY_SDOCPP%" == "" (
+echo "TUSCANY_SDOCPP not set"
+goto end
+)
+echo using TUSCANY_SDOCPP: %TUSCANY_SDOCPP%
+
+set TUSCANY_SCACPP_SYSTEM_ROOT=%cd%\projects\tuscany_sca\tuscany_sca_test\testSCASystem
+set PATH=%TUSCANY_SCACPP%\bin;%TUSCANY_SDOCPP%\bin;%AXIS2C_HOME%\lib;%PATH%
+
+cd projects\tuscany_sca\tuscany_sca_test
+Release\tuscany_sca_test
+:end
+@endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.sh
new file mode 100755
index 0000000000..e2924678a9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/scatest.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+SCA4CPP_HOME=`pwd`
+
+if [ x$TUSCANY_SCACPP = x ]; then
+echo "TUSCANY_SCACPP not set"
+exit;
+fi
+echo "Using SCA installed at $TUSCANY_SCACPP"
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"
+exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+TEST_ROOT=$SCA4CPP_HOME/runtime/core/test
+
+export TUSCANY_SCACPP_SYSTEM_ROOT=$TEST_ROOT
+
+export LD_LIBRARY_PATH=$TUSCANY_SCACPP/lib:$TUSCANY_SDOCPP/lib:$AXIS2C_HOME/lib:$LD_LIBRARY_PATH
+
+cd $TUSCANY_SCACPP/bin/test
+./tuscany_sca_test
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.c b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.c
new file mode 100644
index 0000000000..66e90c2fc2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.c
@@ -0,0 +1,414 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#include <stdio.h>
+#include <axiom.h>
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+axiom_node_t *
+build_om_payload_for_doDataObject(axis2_env_t *env);
+
+axiom_node_t *
+build_om_payload_for_doDataObject_Failure(axis2_env_t *env);
+
+axiom_node_t *
+build_om_payload_for_doAny(axis2_env_t *env);
+
+axiom_node_t *
+build_om_payload_for_doMixed(axis2_env_t *env);
+
+axiom_node_t *
+build_om_payload_for_doSingleData(axis2_env_t *env, char* name, char* data);
+
+void runCall(axis2_env_t* env, char* endpoint, char* opName, axiom_node_t* payload, int expectFailure);
+
+int main(int argc, char** argv)
+{
+ axis2_env_t *env = NULL;
+ axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t* endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ axis2_char_t *client_home = NULL;
+ axis2_svc_client_t* svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_node_t *ret_node = NULL;
+
+ /* Set up the envioronment */
+ env = axis2_env_create_all("wsentrypointtest.log", AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of echo service */
+ address = "http://localhost:9090/axis2/services/WSEntryPointTest";
+ if (argc > 1 )
+ address = argv[1];
+ if (AXIS2_STRCMP(address, "-h") == 0)
+ {
+ printf("Usage : %s [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ printf ("Using endpoint : %s\n", address);
+
+
+ /* do all the single data types */
+ payload = build_om_payload_for_doSingleData(env, "doChars", "Here is some char* data");
+ runCall(env, address, "doChars", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doLong", "123456789");
+ runCall(env, address, "doLong", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doInt", "123456789");
+ runCall(env, address, "doInt", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doFloat", "123.45");
+ runCall(env, address, "doFloat", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doLongDouble", "12345.67891");
+ runCall(env, address, "doLongDouble", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doDouble", "1234.4567");
+ runCall(env, address, "doDouble", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doBool", "true");
+ runCall(env, address, "doBool", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doShort", "12345");
+ runCall(env, address, "doShort", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doBytes", "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
+ runCall(env, address, "doBytes", payload, 0);
+ payload = build_om_payload_for_doSingleData(env, "doByte", "66");
+ runCall(env, address, "doByte", payload, 0);
+ payload = build_om_payload_for_doDataObject(env);
+ runCall(env, address, "doDataObject", payload, 0);
+ payload = build_om_payload_for_doMixed(env);
+ runCall(env, address, "doMixed", payload, 0);
+ payload = build_om_payload_for_doAny(env);
+ runCall(env, address, "doAny", payload, 0);
+
+ payload = build_om_payload_for_doDataObject_Failure(env);
+ runCall(env, address, "doDataObject", payload, 1);
+
+ return 0;
+}
+
+void runCall(axis2_env_t *env, char* endpoint, char* opName, axiom_node_t* payload, int expectFailure)
+{
+ axis2_char_t *address = endpoint;
+ axis2_endpoint_ref_t* endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ axis2_char_t *client_home = NULL;
+ axis2_svc_client_t* svc_client = NULL;
+ axiom_node_t *ret_node = NULL;
+ char action [100];
+ int len = 0;
+
+ printf("runSingleDataCall with endpoint %s, opName %s\n", endpoint, opName);
+
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf("Error creating service client\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ }
+
+ options = axis2_options_create(env);
+
+ AXIS2_OPTIONS_SET_TO(options, env, endpoint_ref);
+
+ len = sprintf(action, "http://www.WSEntryPointTest.org/WSEntryPointTest/%s", opName);
+ AXIS2_OPTIONS_SET_ACTION(options, env, action);
+
+ /* Set service client options */
+ AXIS2_SVC_CLIENT_SET_OPTIONS(svc_client, env, options);
+
+ /* Engage addressing module */
+ AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client, env, AXIS2_MODULE_ADDRESSING);
+
+ /* Send request */
+ ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE(svc_client, env, payload);
+ if(ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = AXIOM_NODE_TO_STRING(ret_node, env);
+ if (om_str)
+ printf("\nReceived OM : %s\n", om_str);
+ printf("\nWSEntryPointTest %s invoke SUCCESSFUL!\n", opName);
+ }
+ else
+ {
+ if(expectFailure)
+ {
+ printf("\nWSEntryPointTest %s failure as expected: SUCCESSFUL!\n", opName);
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("WSEntryPointTest %s invoke FAILED!\n", opName);
+ }
+ }
+
+ if (svc_client)
+ {
+ AXIS2_SVC_CLIENT_FREE(svc_client, env);
+ svc_client = NULL;
+ }
+ if (endpoint_ref)
+ {
+ AXIS2_ENDPOINT_REF_FREE(endpoint_ref, env);
+ endpoint_ref = NULL;
+ }
+}
+
+/* build SOAP request message content using OM */
+axiom_node_t *
+build_om_payload_for_doDataObject(axis2_env_t *env)
+{
+ axiom_node_t* req_om_node = NULL;
+ axiom_element_t* req_om_elem = NULL;
+ axiom_node_t* someData_om_node = NULL;
+ axiom_element_t* someData_om_elem = NULL;
+ axiom_node_t* someStringData_om_node = NULL;
+ axiom_element_t* someStringData_om_elem = NULL;
+ axiom_node_t* someIntData_om_node = NULL;
+ axiom_element_t* someIntData_om_elem = NULL;
+ axiom_node_t* someFloatData_om_node = NULL;
+ axiom_element_t* someFloatData_om_elem = NULL;
+ axiom_node_t* someDateData_om_node = NULL;
+ axiom_element_t* someDateData_om_elem = NULL;
+ axiom_node_t* someListData_om_node = NULL;
+ axiom_element_t* someListData_om_elem = NULL;
+ axiom_node_t* listItem1_om_node = NULL;
+ axiom_element_t* listItem1_om_elem = NULL;
+ axiom_node_t* listItem2_om_node = NULL;
+ axiom_element_t* listItem2_om_elem = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ ns1 = axiom_namespace_create (env, "http://www.WSEntryPointTest.org/WSEntryPointTest/", "ns1");
+ req_om_elem = axiom_element_create(env, NULL, "doDataObject", ns1, &req_om_node);
+ someData_om_elem = axiom_element_create(env, req_om_node, "someData", ns1, &someData_om_node);
+ someStringData_om_elem = axiom_element_create(env, someData_om_node, "someStringData", ns1, &someStringData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someStringData_om_elem, env, "Here is some string data", someStringData_om_node);
+ someIntData_om_elem = axiom_element_create(env, someData_om_node, "someIntData", ns1, &someIntData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someIntData_om_elem, env, "12345678", someIntData_om_node);
+ someFloatData_om_elem = axiom_element_create(env, someData_om_node, "someFloatData", ns1, &someFloatData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someFloatData_om_elem, env, "1234.5678", someFloatData_om_node);
+ someDateData_om_elem = axiom_element_create(env, someData_om_node, "someDateData", ns1, &someDateData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someDateData_om_elem, env, "1977-06-27", someDateData_om_node);
+ someListData_om_elem = axiom_element_create(env, someData_om_node, "someListData", ns1, &someListData_om_node);
+ listItem1_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem1_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem1_om_elem, env, "Here is list item 1", listItem1_om_node);
+ listItem2_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem2_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem2_om_elem, env, "Here is list item 2", listItem2_om_node);
+
+ om_str = AXIOM_NODE_TO_STRING(req_om_node, env);
+ if (om_str)
+ printf("\nSending OM : %s\n", om_str);
+
+ return req_om_node;
+}
+
+/* build SOAP request message content using OM */
+axiom_node_t *
+build_om_payload_for_doDataObject_Failure(axis2_env_t *env)
+{
+ axiom_node_t* req_om_node = NULL;
+ axiom_element_t* req_om_elem = NULL;
+ axiom_node_t* someData_om_node = NULL;
+ axiom_element_t* someData_om_elem = NULL;
+ axiom_node_t* someStringData_om_node = NULL;
+ axiom_element_t* someStringData_om_elem = NULL;
+ axiom_node_t* someIntData_om_node = NULL;
+ axiom_element_t* someIntData_om_elem = NULL;
+ axiom_node_t* someFloatData_om_node = NULL;
+ axiom_element_t* someFloatData_om_elem = NULL;
+ axiom_node_t* someDateData_om_node = NULL;
+ axiom_element_t* someDateData_om_elem = NULL;
+ axiom_node_t* someListData_om_node = NULL;
+ axiom_element_t* someListData_om_elem = NULL;
+ axiom_node_t* listItem1_om_node = NULL;
+ axiom_element_t* listItem1_om_elem = NULL;
+ axiom_node_t* listItem2_om_node = NULL;
+ axiom_element_t* listItem2_om_elem = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ // Create bad Axiom doc
+ ns1 = axiom_namespace_create (env, "http://www.WSEntryPointTest.org/WSEntryPointTest/", "ns1");
+ req_om_elem = axiom_element_create(env, NULL, "doDataObject", ns1, &req_om_node);
+ someData_om_elem = axiom_element_create(env, req_om_node, "someUnknownData", ns1, &someData_om_node);
+ someStringData_om_elem = axiom_element_create(env, someData_om_node, "someStringData", ns1, &someStringData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someStringData_om_elem, env, "Here is some string data", someStringData_om_node);
+ someIntData_om_elem = axiom_element_create(env, someData_om_node, "someIntData", ns1, &someIntData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someIntData_om_elem, env, "12345678", someIntData_om_node);
+ someFloatData_om_elem = axiom_element_create(env, someData_om_node, "someFloatData", ns1, &someFloatData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someFloatData_om_elem, env, "1234.5678", someFloatData_om_node);
+ someDateData_om_elem = axiom_element_create(env, someData_om_node, "someDateData", ns1, &someDateData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someDateData_om_elem, env, "1977-06-27", someDateData_om_node);
+ someListData_om_elem = axiom_element_create(env, someData_om_node, "someListData", ns1, &someListData_om_node);
+ listItem1_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem1_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem1_om_elem, env, "Here is list item 1", listItem1_om_node);
+ listItem2_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem2_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem2_om_elem, env, "Here is list item 2", listItem2_om_node);
+
+ om_str = AXIOM_NODE_TO_STRING(req_om_node, env);
+ if (om_str)
+ printf("\nSending OM : %s\n", om_str);
+
+ return req_om_node;
+}
+
+
+
+/* build SOAP request message content using OM */
+axiom_node_t *
+build_om_payload_for_doMixed(axis2_env_t *env)
+{
+ axiom_node_t* req_om_node = NULL;
+ axiom_element_t* req_om_elem = NULL;
+ axiom_node_t* arg1_om_node = NULL;
+ axiom_element_t* arg1_om_elem = NULL;
+ axiom_node_t* arg2_om_node = NULL;
+ axiom_element_t* arg2_om_elem = NULL;
+ axiom_node_t* arg3_om_node = NULL;
+ axiom_element_t* arg3_om_elem = NULL;
+ axiom_node_t* arg4_om_node = NULL;
+ axiom_element_t* arg4_om_elem = NULL;
+ axiom_node_t* arg5_om_node = NULL;
+ axiom_element_t* arg5_om_elem = NULL;
+ axiom_node_t* someStringData_om_node = NULL;
+ axiom_element_t* someStringData_om_elem = NULL;
+ axiom_node_t* someIntData_om_node = NULL;
+ axiom_element_t* someIntData_om_elem = NULL;
+ axiom_node_t* someFloatData_om_node = NULL;
+ axiom_element_t* someFloatData_om_elem = NULL;
+ axiom_node_t* someDateData_om_node = NULL;
+ axiom_element_t* someDateData_om_elem = NULL;
+ axiom_node_t* someListData_om_node = NULL;
+ axiom_element_t* someListData_om_elem = NULL;
+ axiom_node_t* listItem1_om_node = NULL;
+ axiom_element_t* listItem1_om_elem = NULL;
+ axiom_node_t* listItem2_om_node = NULL;
+ axiom_element_t* listItem2_om_elem = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ ns1 = axiom_namespace_create (env, "http://www.WSEntryPointTest.org/WSEntryPointTest/", "ns1");
+ req_om_elem = axiom_element_create(env, NULL, "doMixed", ns1, &req_om_node);
+ arg1_om_elem = axiom_element_create(env, req_om_node, "arg1", ns1, &arg1_om_node);
+ AXIOM_ELEMENT_SET_TEXT(arg1_om_elem, env, "Here is some char* data", arg1_om_node);
+ arg2_om_elem = axiom_element_create(env, req_om_node, "arg2", ns1, &arg2_om_node);
+ AXIOM_ELEMENT_SET_TEXT(arg2_om_elem, env, "123456789", arg2_om_node);
+ arg3_om_elem = axiom_element_create(env, req_om_node, "arg3", ns1, &arg3_om_node);
+ arg4_om_elem = axiom_element_create(env, req_om_node, "arg4", ns1, &arg4_om_node);
+ AXIOM_ELEMENT_SET_TEXT(arg4_om_elem, env, "true", arg4_om_node);
+ arg5_om_elem = axiom_element_create(env, req_om_node, "arg5", ns1, &arg5_om_node);
+ AXIOM_ELEMENT_SET_TEXT(arg5_om_elem, env, "1234.5678", arg5_om_node);
+ someStringData_om_elem = axiom_element_create(env, arg3_om_node, "someStringData", ns1, &someStringData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someStringData_om_elem, env, "Here is some string data", someStringData_om_node);
+ someIntData_om_elem = axiom_element_create(env, arg3_om_node, "", ns1, &someIntData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someIntData_om_elem, env, "12345678", someIntData_om_node);
+ someFloatData_om_elem = axiom_element_create(env, arg3_om_node, "someFloatData", ns1, &someFloatData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someFloatData_om_elem, env, "1234.5678", someFloatData_om_node);
+ someDateData_om_elem = axiom_element_create(env, arg3_om_node, "someDateData", ns1, &someDateData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someDateData_om_elem, env, "1977-06-27", someDateData_om_node);
+ someListData_om_elem = axiom_element_create(env, arg3_om_node, "someListData", ns1, &someListData_om_node);
+ listItem1_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem1_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem1_om_elem, env, "Here is list item 1", listItem1_om_node);
+ listItem2_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem2_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem2_om_elem, env, "Here is list item 2", listItem2_om_node);
+
+ om_str = AXIOM_NODE_TO_STRING(req_om_node, env);
+ if (om_str)
+ printf("\nSending OM : %s\n", om_str);
+
+ return req_om_node;
+}
+
+
+axiom_node_t *
+build_om_payload_for_doSingleData(axis2_env_t *env, char* name, char* data)
+{
+ axiom_node_t* req_om_node = NULL;
+ axiom_element_t* req_om_elem = NULL;
+ axiom_node_t* someData_om_node = NULL;
+ axiom_element_t* someData_om_elem = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ ns1 = axiom_namespace_create (env, "http://www.WSEntryPointTest.org/WSEntryPointTest/", "ns1");
+ req_om_elem = axiom_element_create(env, NULL, name, ns1, &req_om_node);
+ someData_om_elem = axiom_element_create(env, req_om_node, "someData", ns1, &someData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someData_om_elem, env, data, someData_om_node);
+
+ om_str = AXIOM_NODE_TO_STRING(req_om_node, env);
+ if (om_str)
+ printf("\nSending OM : %s\n", om_str);
+
+ return req_om_node;
+}
+
+
+axiom_node_t *
+build_om_payload_for_doAny(axis2_env_t *env)
+{
+ axiom_node_t* req_om_node = NULL;
+ axiom_element_t* req_om_elem = NULL;
+ axiom_node_t* someData_om_node = NULL;
+ axiom_element_t* someData_om_elem = NULL;
+ axiom_node_t* someStringData_om_node = NULL;
+ axiom_element_t* someStringData_om_elem = NULL;
+ axiom_node_t* someIntData_om_node = NULL;
+ axiom_element_t* someIntData_om_elem = NULL;
+ axiom_node_t* someFloatData_om_node = NULL;
+ axiom_element_t* someFloatData_om_elem = NULL;
+ axiom_node_t* someDateData_om_node = NULL;
+ axiom_element_t* someDateData_om_elem = NULL;
+ axiom_node_t* someListData_om_node = NULL;
+ axiom_element_t* someListData_om_elem = NULL;
+ axiom_node_t* listItem1_om_node = NULL;
+ axiom_element_t* listItem1_om_elem = NULL;
+ axiom_node_t* listItem2_om_node = NULL;
+ axiom_element_t* listItem2_om_elem = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ ns1 = axiom_namespace_create (env, "http://www.WSEntryPointTest.org/WSEntryPointTest/", "ns1");
+ req_om_elem = axiom_element_create(env, NULL, "doAny", ns1, &req_om_node);
+ someData_om_elem = axiom_element_create(env, req_om_node, "anElem", ns1, &someData_om_node);
+ someStringData_om_elem = axiom_element_create(env, someData_om_node, "hello", ns1, &someStringData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someStringData_om_elem, env, "world", someStringData_om_node);
+ someIntData_om_elem = axiom_element_create(env, someData_om_node, "someIntData", ns1, &someIntData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someIntData_om_elem, env, "12345678", someIntData_om_node);
+ someFloatData_om_elem = axiom_element_create(env, someData_om_node, "someFloatData", ns1, &someFloatData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someFloatData_om_elem, env, "1234.5678", someFloatData_om_node);
+ someDateData_om_elem = axiom_element_create(env, someData_om_node, "someDateData", ns1, &someDateData_om_node);
+ AXIOM_ELEMENT_SET_TEXT(someDateData_om_elem, env, "1977-06-27", someDateData_om_node);
+ someListData_om_elem = axiom_element_create(env, someData_om_node, "someListData", ns1, &someListData_om_node);
+ listItem1_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem1_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem1_om_elem, env, "Here is list item 1", listItem1_om_node);
+ listItem2_om_elem = axiom_element_create(env, someListData_om_node, "listItem", ns1, &listItem2_om_node);
+ AXIOM_ELEMENT_SET_TEXT(listItem2_om_elem, env, "Here is list item 2", listItem2_om_node);
+
+ om_str = AXIOM_NODE_TO_STRING(req_om_node, env);
+ if (om_str)
+ printf("\nSending OM : %s\n", om_str);
+
+ return req_om_node;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.vcproj
new file mode 100644
index 0000000000..e540e44c49
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestClient/WSEntryPointTestClient.vcproj
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="WSEntryPointTestClient"
+ ProjectGUID="{70DD49A1-4E7B-4CE4-B7A3-FD7AFE2A0DDC}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="1"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="axiom.lib axis2_engine.lib axis2_parser.lib axis2_util.lib"
+ OutputFile="$(OutDir)/WSEntryPointTestClient.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(AXIS2C_HOME)/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/WSEntryPointTestClient.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/WSEntryPointTestClient.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath=".\WSEntryPointTestClient.c">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/Tuscany-model.config
new file mode 100644
index 0000000000..982f7bc271
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/Tuscany-model.config
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="WSEntryPointTest.wsdl"/>
+ </wsdl>
+ <xsd>
+ </xsd>
+</tuscany-model>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.h
new file mode 100644
index 0000000000..19f7aa0b75
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.h
@@ -0,0 +1,53 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTEST_H
+#define WSEENTRYPOINTTEST_H
+
+#include <commonj/sdo/SDO.h>
+#include <stdio.h>
+
+class WSEntryPointTest
+{
+public:
+ virtual char* doChars(char* arg1) = 0;
+ virtual long doLong(long arg1) = 0;
+ virtual int doInt(int arg1) = 0;
+ virtual float doFloat(float arg1) = 0;
+ virtual long double doLongDouble(long double arg1) = 0;
+ virtual double doDouble(double arg1) = 0;
+ virtual bool doBool(bool arg1) = 0;
+ virtual short doShort(short arg1) = 0;
+ virtual char* doBytes(char* arg1) = 0;
+ virtual char doByte(char arg1) = 0;
+ virtual DataObjectPtr doMixed(char* arg1, long arg2, DataObjectPtr arg3, bool arg4, double arg5) = 0;
+ virtual DataObjectPtr doDataObject(DataObjectPtr arg1) = 0;
+ virtual DataObjectPtr doAny(DataObjectPtr arg1) = 0;
+// These don't work because they are passing pointers around
+// virtual int[] doIntArray(int[] arg1, int arg2);
+// virtual string doString(string arg1);
+// This doesn't work because there is no mapping from XSD types to SDO CharacterType
+// virtual wchar_t doWChar(wchar_t arg1);
+// This doesn't work because Operation does not support int64_t yet
+// virtual int64_t doInt64(int64_t arg1);
+};
+
+#endif
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.wsdl
new file mode 100644
index 0000000000..b6328f46f6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTest.wsdl
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.WSEntryPointTest.org/WSEntryPointTest/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="WSEntryPointTest" targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTest/">
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTest/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:element name="doChars">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:string" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doCharsResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:string" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doString">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:string" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doLong">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doLongResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doInt">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doIntResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doFloat">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:float" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doFloatResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:float" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doLongDouble">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doLongDoubleResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doDouble">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doDoubleResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doBool">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:boolean" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doBoolResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:boolean" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doShort">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:short" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doShortResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:short" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doBytes">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:hexBinary" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doBytesResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:hexBinary" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doByte">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:byte" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doByteResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:byte" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+
+ <xsd:element name="doMixed">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="arg1" type="xsd:string" minOccurs="1"/>
+ <xsd:element name="arg2" type="xsd:int" minOccurs="1"/>
+ <xsd:element name="arg3" type="dataObjectData" minOccurs="1"/>
+ <xsd:element name="arg4" type="xsd:boolean" minOccurs="1"/>
+ <xsd:element name="arg5" type="xsd:float" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doMixedResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="dataObjectData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doDataObject">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="dataObjectData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doDataObjectResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="dataObjectData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="dataObjectData">
+ <xsd:sequence>
+ <xsd:element name="someStringData" type="xsd:string" minOccurs="1"/>
+ <xsd:element name="someIntData" type="xsd:int" minOccurs="1"/>
+ <xsd:element name="someFloatData" type="xsd:float" minOccurs="1"/>
+ <xsd:element name="someDateData" type="xsd:date" minOccurs="1"/>
+ <xsd:element name="someListData" type="tns:listData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="listData">
+ <xsd:sequence>
+ <xsd:element name="listItem" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="doAny">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doAnyResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <!-- Can't do wchar - no mapping from XSD type to SDO:Character type
+
+ <xsd:element name="doWChar">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" minOccurs="1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:length value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doWChar">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" minOccurs="1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:length value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ -->
+
+ <!-- Int64 not yet supported - see Jira TUSCANY-439
+ <xsd:element name="doInt64">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:long" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doInt64Response">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:long" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ -->
+
+ <!-- Can't do doIntArray -->
+ </xsd:schema>
+ </wsdl:types>
+
+ <wsdl:message name="doDataObjectRequestMsg">
+ <wsdl:part element="tns:doDataObject" name="doDataObjectRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doDataObjectResponseMsg">
+ <wsdl:part element="tns:doDataObjectResponse" name="doDataObjectResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doCharsRequestMsg">
+ <wsdl:part element="tns:doChars" name="doCharsRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doCharsResponseMsg">
+ <wsdl:part element="tns:doCharsResponse" name="doCharsResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doStringRequestMsg">
+ <wsdl:part element="tns:doString" name="doStringRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doStringResponseMsg">
+ <wsdl:part element="tns:doCharsResponse" name="doStringResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doLongRequestMsg">
+ <wsdl:part element="tns:doLong" name="doLongRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doLongResponseMsg">
+ <wsdl:part element="tns:doLongResponse" name="doLongResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doIntRequestMsg">
+ <wsdl:part element="tns:doInt" name="doIntRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doIntResponseMsg">
+ <wsdl:part element="tns:doIntResponse" name="doIntResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doFloatRequestMsg">
+ <wsdl:part element="tns:doFloat" name="doFloatRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doFloatResponseMsg">
+ <wsdl:part element="tns:doFloatResponse" name="doFloatResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doLongDoubleRequestMsg">
+ <wsdl:part element="tns:doLongDouble" name="doLongDoubleRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doLongDoubleResponseMsg">
+ <wsdl:part element="tns:doLongDoubleResponse" name="doLongDoubleResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doDoubleRequestMsg">
+ <wsdl:part element="tns:doDouble" name="doDoubleRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doDoubleResponseMsg">
+ <wsdl:part element="tns:doDoubleResponse" name="doDoubleResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doBoolRequestMsg">
+ <wsdl:part element="tns:doBool" name="doBoolRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doBoolResponseMsg">
+ <wsdl:part element="tns:doBoolResponse" name="doBoolResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doShortRequestMsg">
+ <wsdl:part element="tns:doShort" name="doShortRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doShortResponseMsg">
+ <wsdl:part element="tns:doShortResponse" name="doShortResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doBytesRequestMsg">
+ <wsdl:part element="tns:doBytes" name="doBytesRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doBytesResponseMsg">
+ <wsdl:part element="tns:doBytesResponse" name="doBytesResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doByteRequestMsg">
+ <wsdl:part element="tns:doByte" name="doByteRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doByteResponseMsg">
+ <wsdl:part element="tns:doByteResponse" name="doByteResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doMixedRequestMsg">
+ <wsdl:part element="tns:doMixed" name="doMixedRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doMixedResponseMsg">
+ <wsdl:part element="tns:doMixedResponse" name="doMixedResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doAnyRequestMsg">
+ <wsdl:part element="tns:doAny" name="doAnyRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doAnyResponseMsg">
+ <wsdl:part element="tns:doAnyResponse" name="doAnyResponsePart"/>
+ </wsdl:message>
+
+
+ <wsdl:portType name="WSEntryPointTest">
+ <wsdl:operation name="doDataObject">
+ <wsdl:input message="tns:doDataObjectRequestMsg"/>
+ <wsdl:output message="tns:doDataObjectResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doChars">
+ <wsdl:input message="tns:doCharsRequestMsg"/>
+ <wsdl:output message="tns:doCharsResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doString">
+ <wsdl:input message="tns:doStringRequestMsg"/>
+ <wsdl:output message="tns:doStringResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doLong">
+ <wsdl:input message="tns:doLongRequestMsg"/>
+ <wsdl:output message="tns:doLongResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doInt">
+ <wsdl:input message="tns:doIntRequestMsg"/>
+ <wsdl:output message="tns:doIntResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doFloat">
+ <wsdl:input message="tns:doFloatRequestMsg"/>
+ <wsdl:output message="tns:doFloatResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doLongDouble">
+ <wsdl:input message="tns:doLongDoubleRequestMsg"/>
+ <wsdl:output message="tns:doLongDoubleResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doDouble">
+ <wsdl:input message="tns:doDoubleRequestMsg"/>
+ <wsdl:output message="tns:doDoubleResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doBool">
+ <wsdl:input message="tns:doBoolRequestMsg"/>
+ <wsdl:output message="tns:doBoolResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doShort">
+ <wsdl:input message="tns:doShortRequestMsg"/>
+ <wsdl:output message="tns:doShortResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doBytes">
+ <wsdl:input message="tns:doBytesRequestMsg"/>
+ <wsdl:output message="tns:doBytesResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doByte">
+ <wsdl:input message="tns:doByteRequestMsg"/>
+ <wsdl:output message="tns:doByteResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doMixed">
+ <wsdl:input message="tns:doMixedRequestMsg"/>
+ <wsdl:output message="tns:doMixedResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doAny">
+ <wsdl:input message="tns:doAnyRequestMsg"/>
+ <wsdl:output message="tns:doAnyResponseMsg"/>
+ </wsdl:operation>
+ </wsdl:portType>
+
+
+ <wsdl:binding name="WSEntryPointTestSOAP" type="tns:WSEntryPointTest">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="doDataObject">
+ <soap:operation soapAction="WSEntryPointTest/doDataObject"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doChars">
+ <soap:operation soapAction="WSEntryPointTest/doChars"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doString">
+ <soap:operation soapAction="WSEntryPointTest/doString"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doLong">
+ <soap:operation soapAction="WSEntryPointTest/doLong"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doInt">
+ <soap:operation soapAction="WSEntryPointTest/doInt"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doFloat">
+ <soap:operation soapAction="WSEntryPointTest/doFloat"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doLongDouble">
+ <soap:operation soapAction="WSEntryPointTest/doLongDouble"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doDouble">
+ <soap:operation soapAction="WSEntryPointTest/doDouble"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doBool">
+ <soap:operation soapAction="WSEntryPointTest/doBool"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doShort">
+ <soap:operation soapAction="WSEntryPointTest/doShort"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doBytes">
+ <soap:operation soapAction="WSEntryPointTest/doBytes"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doByte">
+ <soap:operation soapAction="WSEntryPointTest/doByte"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doMixed">
+ <soap:operation soapAction="WSEntryPointTest/doMixed"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doAny">
+ <soap:operation soapAction="WSEntryPointTest/doAny"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="WSEntryPointTest">
+ <wsdl:port binding="tns:WSEntryPointTestSOAP" name="WSEntryPointTestSOAP">
+ <soap:address location="http://localhost:9090/axis2/services/WSEntryPointTest"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.componentType
new file mode 100644
index 0000000000..cd58a345e6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.componentType
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ASCII"?>
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="WSEntryPointTestService">
+ <interface.cpp header="WSEntryPointTest.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.cpp
new file mode 100644
index 0000000000..462ee1ac4d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.cpp
@@ -0,0 +1,159 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#include "WSEntryPointTestImpl.h"
+#include <stdio.h>
+#include <tuscany/sca/util/Utils.h>
+using namespace tuscany::sca;
+#include <commonj/sdo/SDO.h>
+#include <sdo_axiom.h>
+using namespace commonj::sdo;
+using namespace commonj::sdo_axiom;
+
+WSEntryPointTestImpl::WSEntryPointTestImpl()
+{
+}
+
+WSEntryPointTestImpl::~WSEntryPointTestImpl()
+{
+}
+
+// WSEntryPointTest interface
+char* WSEntryPointTestImpl::doChars(char* arg1)
+{
+ printf("WSEntryPointTestImpl::doChars %s\n", arg1);
+ return arg1;
+}
+
+
+long WSEntryPointTestImpl::doLong(long arg1)
+{
+ printf("WSEntryPointTestImpl::doLong %d\n", arg1);
+ return arg1;
+}
+
+int WSEntryPointTestImpl::doInt(int arg1)
+{
+ printf("WSEntryPointTestImpl::doInt %d\n", arg1);
+ return arg1;
+}
+
+float WSEntryPointTestImpl::doFloat(float arg1)
+{
+ printf("WSEntryPointTestImpl::doFloat %f\n", arg1);
+ return arg1;
+}
+
+long double WSEntryPointTestImpl::doLongDouble(long double arg1)
+{
+ printf("WSEntryPointTestImpl::doLongDouble %f\n", arg1);
+ return arg1;
+}
+
+double WSEntryPointTestImpl::doDouble(double arg1)
+{
+ printf("WSEntryPointTestImpl::doDouble %f\n", arg1);
+ return arg1;
+}
+
+
+bool WSEntryPointTestImpl::doBool(bool arg1)
+{
+ printf("WSEntryPointTestImpl::doBool %d\n", arg1);
+ return arg1;
+}
+
+short WSEntryPointTestImpl::doShort(short arg1)
+{
+ printf("WSEntryPointTestImpl::doShort %d\n", arg1);
+ return arg1;
+}
+
+char* WSEntryPointTestImpl::doBytes(char* arg1)
+{
+ printf("WSEntryPointTestImpl::doBytes %s\n", arg1);
+ return arg1;
+}
+
+char WSEntryPointTestImpl::doByte(char arg1)
+{
+ printf("WSEntryPointTestImpl::doByte %c\n", arg1);
+ return arg1;
+}
+
+DataObjectPtr WSEntryPointTestImpl::doMixed(char* arg1, long arg2, DataObjectPtr arg3, bool arg4, double arg5)
+{
+ printf("WSEntryPointTestImpl::doMixed %s %d %s %d %d\n", arg1, arg2, arg3->getType().getURI(), arg4, arg5);
+ Utils::printDO(arg3);
+ return arg3;
+}
+
+DataObjectPtr WSEntryPointTestImpl::doDataObject(DataObjectPtr arg1)
+{
+ printf("WSEntryPointTestImpl::doDataObject %s\n", arg1->getType().getURI());
+ Utils::printDO(arg1);
+ return arg1;
+}
+
+DataObjectPtr WSEntryPointTestImpl::doAny(DataObjectPtr arg1)
+{
+ printf("WSEntryPointTestImpl::doAny %s#%s\n", arg1->getType().getURI(), arg1->getType().getName());
+ Utils::printDO(arg1);
+ //return arg1;
+
+ DataFactoryPtr factory = arg1->getDataFactory();
+ DataObjectPtr data = factory->create(Type::SDOTypeNamespaceURI, "OpenDataObject");
+ data->setCString("stringData", "Here is some string data");
+ data->setBoolean("boolData", true);
+ DataObjectList& list = data->getList("intDataList");
+ list.append((long)123456789);
+ list.append((long)111111111);
+ list.append((long)222222222);
+ Utils::printDO(data);
+ return data;
+}
+
+//int[] WSEntryPointTestImpl::doIntArray(int[] arg1, int arg2)
+//{
+// printf("WSEntryPointTestImpl::doIntArray with length %d\n", arg2);
+// for(int i=0; i<arg2; i++)
+// {
+// printf("%d\n", arg1[i]);
+// }
+// return arg1;
+//}
+//
+//string WSEntryPointTestImpl::doString(string arg1)
+//{
+// printf("WSEntryPointTestImpl::doString %s\n", arg1.c_str());
+// return arg1;
+//}
+//
+//wchar_t WSEntryPointTestImpl::doWChar(wchar_t arg1)
+//{
+// printf("WSEntryPointTestImpl::doWChar %s\n", arg1);
+// return arg1;
+//}
+//
+//int64_t WSEntryPointTestImpl::doInt64(int64_t arg1)
+//{
+// printf("WSEntryPointTestImpl::doInt64 %d\n", arg1);
+// return arg1;
+//}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.h
new file mode 100644
index 0000000000..926b6073d4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl.h
@@ -0,0 +1,57 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTESTIMPL_H
+#define WSEENTRYPOINTTESTIMPL_H
+
+#include "WSEntryPointTest.h"
+
+class WSEntryPointTestImpl : public WSEntryPointTest
+{
+public:
+ WSEntryPointTestImpl();
+ virtual ~WSEntryPointTestImpl();
+
+ // WSEntryPointTest interface
+ virtual char* doChars(char* arg1);
+ virtual long doLong(long arg1);
+ virtual int doInt(int arg1);
+ virtual float doFloat(float arg1);
+ virtual long double doLongDouble(long double arg1);
+ virtual double doDouble(double arg1);
+ virtual bool doBool(bool arg1);
+ virtual short doShort(short arg1);
+ virtual char* doBytes(char* arg1);
+ virtual char doByte(char arg1);
+ virtual DataObjectPtr doMixed(char* arg1, long arg2, DataObjectPtr arg3, bool arg4, double arg5);
+ virtual DataObjectPtr doDataObject(DataObjectPtr arg1);
+ virtual DataObjectPtr doAny(DataObjectPtr arg1);
+
+// These don't work because they are passing pointers around
+// virtual int[] doIntArray(int[] arg1, int arg2);
+// virtual string doString(string arg1);
+// This doesn't work because there is no mapping from XSD types to SDO CharacterType
+// virtual wchar_t doWChar(wchar_t arg1);
+// This doesn't work because Operation does not support int64_t yet
+// virtual int64_t doInt64(int64_t arg1);
+
+};
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.cpp
new file mode 100644
index 0000000000..8f564ff5bc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.cpp
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WSEntryPointTestImpl_WSEntryPointTestService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ WSEntryPointTestImpl_WSEntryPointTestService_Proxy* WSEntryPointTestImpl_WSEntryPointTestService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new WSEntryPointTestImpl_WSEntryPointTestService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void WSEntryPointTestImpl_WSEntryPointTestService_Proxy_Destructor(void* proxy)
+ {
+ delete (WSEntryPointTestImpl_WSEntryPointTestService_Proxy*)proxy;
+ }
+}
+
+WSEntryPointTestImpl_WSEntryPointTestService_Proxy::WSEntryPointTestImpl_WSEntryPointTestService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+WSEntryPointTestImpl_WSEntryPointTestService_Proxy::~WSEntryPointTestImpl_WSEntryPointTestService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+char* WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doChars( char* arg0)
+{
+ Operation operation("doChars");
+ operation.addParameter(&arg0);
+ char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+long WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doLong( long arg0)
+{
+ Operation operation("doLong");
+ operation.addParameter(&arg0);
+ long ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+int WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doInt( int arg0)
+{
+ Operation operation("doInt");
+ operation.addParameter(&arg0);
+ int ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doFloat( float arg0)
+{
+ Operation operation("doFloat");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+long double WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doLongDouble( long double arg0)
+{
+ Operation operation("doLongDouble");
+ operation.addParameter(&arg0);
+ long double ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+double WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doDouble( double arg0)
+{
+ Operation operation("doDouble");
+ operation.addParameter(&arg0);
+ double ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+bool WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doBool( bool arg0)
+{
+ Operation operation("doBool");
+ operation.addParameter(&arg0);
+ bool ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+short WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doShort( short arg0)
+{
+ Operation operation("doShort");
+ operation.addParameter(&arg0);
+ short ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+char* WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doBytes( char* arg0)
+{
+ Operation operation("doBytes");
+ operation.addParameter(&arg0);
+ char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+char WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doByte( char arg0)
+{
+ Operation operation("doByte");
+ operation.addParameter(&arg0);
+ char ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+DataObjectPtr WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doMixed( char* arg0, long arg1, DataObjectPtr arg2, bool arg3, double arg4)
+{
+ Operation operation("doMixed");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ operation.addParameter(&arg2);
+ operation.addParameter(&arg3);
+ operation.addParameter(&arg4);
+ DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+DataObjectPtr WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doDataObject( DataObjectPtr arg0)
+{
+ Operation operation("doDataObject");
+ operation.addParameter(&arg0);
+ DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+DataObjectPtr WSEntryPointTestImpl_WSEntryPointTestService_Proxy::doAny( DataObjectPtr arg0)
+{
+ Operation operation("doAny");
+ operation.addParameter(&arg0);
+ DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.h
new file mode 100644
index 0000000000..9dca8a61bc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Proxy.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WSEntryPointTestImpl_WSEntryPointTestService_Proxy_h
+#define WSEntryPointTestImpl_WSEntryPointTestService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "WSEntryPointTest.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class WSEntryPointTestImpl_WSEntryPointTestService_Proxy : public WSEntryPointTest
+{
+public:
+ WSEntryPointTestImpl_WSEntryPointTestService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~WSEntryPointTestImpl_WSEntryPointTestService_Proxy();
+ virtual char* doChars( char* arg1);
+ virtual long doLong( long arg1);
+ virtual int doInt( int arg1);
+ virtual float doFloat( float arg1);
+ virtual long double doLongDouble( long double arg1);
+ virtual double doDouble( double arg1);
+ virtual bool doBool( bool arg1);
+ virtual short doShort( short arg1);
+ virtual char* doBytes( char* arg1);
+ virtual char doByte( char arg1);
+ virtual DataObjectPtr doMixed( char* arg1, long arg2, DataObjectPtr arg3, bool arg4, double arg5);
+ virtual DataObjectPtr doDataObject( DataObjectPtr arg1);
+ virtual DataObjectPtr doAny( DataObjectPtr arg1);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // WSEntryPointTestImpl_WSEntryPointTestService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.cpp
new file mode 100644
index 0000000000..7a879a310b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.cpp
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ WSEntryPointTestImpl_WSEntryPointTestService_Wrapper* WSEntryPointTestImpl_WSEntryPointTestService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new WSEntryPointTestImpl_WSEntryPointTestService_Wrapper(target);
+ }
+}
+
+WSEntryPointTestImpl_WSEntryPointTestService_Wrapper::WSEntryPointTestImpl_WSEntryPointTestService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (WSEntryPointTestImpl*)getImplementation();
+}
+
+WSEntryPointTestImpl_WSEntryPointTestService_Wrapper::~WSEntryPointTestImpl_WSEntryPointTestService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* WSEntryPointTestImpl_WSEntryPointTestService_Wrapper::newImplementation()
+{
+ return new WSEntryPointTestImpl;
+}
+
+void WSEntryPointTestImpl_WSEntryPointTestService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void WSEntryPointTestImpl_WSEntryPointTestService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "doChars")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ *(char**)operation.getReturnValue() = impl->doChars(p0);
+ return;
+ }
+ if (operationName == "doLong")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ *(long*)operation.getReturnValue() = impl->doLong(p0);
+ return;
+ }
+ if (operationName == "doInt")
+ {
+ int& p0 = *( int*)operation.getParameterValue(0);
+ *(int*)operation.getReturnValue() = impl->doInt(p0);
+ return;
+ }
+ if (operationName == "doFloat")
+ {
+ float& p0 = *( float*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->doFloat(p0);
+ return;
+ }
+ if (operationName == "doLongDouble")
+ {
+ long double& p0 = *( long double*)operation.getParameterValue(0);
+ *(long double*)operation.getReturnValue() = impl->doLongDouble(p0);
+ return;
+ }
+ if (operationName == "doDouble")
+ {
+ double& p0 = *( double*)operation.getParameterValue(0);
+ *(double*)operation.getReturnValue() = impl->doDouble(p0);
+ return;
+ }
+ if (operationName == "doBool")
+ {
+ bool& p0 = *( bool*)operation.getParameterValue(0);
+ *(bool*)operation.getReturnValue() = impl->doBool(p0);
+ return;
+ }
+ if (operationName == "doShort")
+ {
+ short& p0 = *( short*)operation.getParameterValue(0);
+ *(short*)operation.getReturnValue() = impl->doShort(p0);
+ return;
+ }
+ if (operationName == "doBytes")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ *(char**)operation.getReturnValue() = impl->doBytes(p0);
+ return;
+ }
+ if (operationName == "doByte")
+ {
+ char& p0 = *( char*)operation.getParameterValue(0);
+ *(char*)operation.getReturnValue() = impl->doByte(p0);
+ return;
+ }
+ if (operationName == "doMixed")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ DataObjectPtr& p2 = *(DataObjectPtr*)operation.getParameterValue(2); bool& p3 = *( bool*)operation.getParameterValue(3);
+ double& p4 = *( double*)operation.getParameterValue(4);
+ *(DataObjectPtr*)operation.getReturnValue() = impl->doMixed(p0, p1, p2, p3, p4);
+ return;
+ }
+ if (operationName == "doDataObject")
+ {
+ DataObjectPtr& p0 = *(DataObjectPtr*)operation.getParameterValue(0); *(DataObjectPtr*)operation.getReturnValue() = impl->doDataObject(p0);
+ return;
+ }
+ if (operationName == "doAny")
+ {
+ DataObjectPtr& p0 = *(DataObjectPtr*)operation.getParameterValue(0); *(DataObjectPtr*)operation.getReturnValue() = impl->doAny(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.h
new file mode 100644
index 0000000000..7bcd09b7c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WSEntryPointTestImpl_WSEntryPointTestService_Wrapper_h
+#define WSEntryPointTestImpl_WSEntryPointTestService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "WSEntryPointTestImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class WSEntryPointTestImpl_WSEntryPointTestService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ WSEntryPointTestImpl_WSEntryPointTestService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~WSEntryPointTestImpl_WSEntryPointTestService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ WSEntryPointTestImpl* impl;
+};
+
+#endif // WSEntryPointTestImpl_WSEntryPointTestService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestModule.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestModule.vcproj
new file mode 100644
index 0000000000..6ff73c3f1c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/WSEntryPointTestModule.vcproj
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="WSEntryPointTestModule"
+ ProjectGUID="{19C4CE76-4E08-4C22-8198-010B837C565A}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TUSCANY_SCACPP)/include,$(TUSCANY_SDOCPP)/include,$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WSENTRYPOINTTESTMODULE_EXPORTS"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tuscany_sca.lib tuscany_sdo.lib tuscany_sdo_axiom.lib axis2_parser.lib axis2_util.lib axiom.lib"
+ OutputFile="$(OutDir)/WSEntryPointTestModule.dll"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(TUSCANY_SCACPP)/lib,$(TUSCANY_SDOCPP)/lib,$(AXIS2C_HOME)/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/WSEntryPointTestModule.pdb"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/WSEntryPointTestModule.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WSENTRYPOINTTESTMODULE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/WSEntryPointTestModule.dll"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/WSEntryPointTestModule.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath=".\WSEntryPointTestImpl.cpp">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestImpl_WSEntryPointTestService_Proxy.cpp">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath=".\WSEntryPointTest.h">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestImpl.h">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestImpl_WSEntryPointTestService_Proxy.h">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestImpl_WSEntryPointTestService_Wrapper.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ <File
+ RelativePath=".\sca.module">
+ </File>
+ <File
+ RelativePath="..\WSEntryPointTestSubsystem\sca.subsystem">
+ </File>
+ <File
+ RelativePath=".\services.xml">
+ </File>
+ <File
+ RelativePath=".\Tuscany-model.config">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTest.wsdl">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestImpl.componentType">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/sca.module
new file mode 100644
index 0000000000..f92fae8110
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/sca.module
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ASCII"?>
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ name="WSEntryPointTestModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="WSEntryPointTestEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="WSEntryPointTest.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="http://www.WSEntryPointTest.org/WSEntryPointTest/#wsdl.endpoint(WSEntryPointTest/WSEntryPointTestSOAP)"></binding.ws>
+ <reference>WSEntryPointTestServiceComponent</reference>
+ </entryPoint>
+
+
+ <component name="WSEntryPointTestServiceComponent">
+ <implementation.cpp dll="WSEntryPointTestModule.dll" header="WSEntryPointTestImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references> </references>
+ </component>
+</module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/services.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/services.xml
new file mode 100644
index 0000000000..b863c79409
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestModule/services.xml
@@ -0,0 +1,62 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<service name="WSEntryPointTest">
+ <parameter name="ServiceClass" locked="xsd:false">tuscany_sca_ws_service</parameter>
+ <parameter name="TuscanySystemRoot" locked="xsd:false">D:/tuscany/cpp/sca/test/WSEntryPointTest/runtime</parameter>
+ <parameter name="TuscanyEntryPoint" locked="xsd:false">WSEntryPointTestSubsystem/WSEntryPointTestService/WSEntryPointTestEntrypoint</parameter>
+
+ <description>
+ This is a testing service , to test the system is working or not
+ </description>
+
+ <operation name="doChars">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doLong">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doInt">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doFloat">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doLongDouble">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doDouble">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doBool">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doShort">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doBytes">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doMixed">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doDataObject">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+ <operation name="doAny">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+</service>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestSubsystem/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestSubsystem/sca.subsystem
new file mode 100644
index 0000000000..45ae34fd42
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/WSEntryPointTestSubsystem/sca.subsystem
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9" name="WSEntryPointTestSubsystem">
+
+ <moduleComponent name="WSEntryPointTestService" module="WSEntryPointTestModule" />
+
+</subsystem>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/Tuscany-model.config
new file mode 100644
index 0000000000..982f7bc271
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/Tuscany-model.config
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="WSEntryPointTest.wsdl"/>
+ </wsdl>
+ <xsd>
+ </xsd>
+</tuscany-model>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.h
new file mode 100644
index 0000000000..19f7aa0b75
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.h
@@ -0,0 +1,53 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTEST_H
+#define WSEENTRYPOINTTEST_H
+
+#include <commonj/sdo/SDO.h>
+#include <stdio.h>
+
+class WSEntryPointTest
+{
+public:
+ virtual char* doChars(char* arg1) = 0;
+ virtual long doLong(long arg1) = 0;
+ virtual int doInt(int arg1) = 0;
+ virtual float doFloat(float arg1) = 0;
+ virtual long double doLongDouble(long double arg1) = 0;
+ virtual double doDouble(double arg1) = 0;
+ virtual bool doBool(bool arg1) = 0;
+ virtual short doShort(short arg1) = 0;
+ virtual char* doBytes(char* arg1) = 0;
+ virtual char doByte(char arg1) = 0;
+ virtual DataObjectPtr doMixed(char* arg1, long arg2, DataObjectPtr arg3, bool arg4, double arg5) = 0;
+ virtual DataObjectPtr doDataObject(DataObjectPtr arg1) = 0;
+ virtual DataObjectPtr doAny(DataObjectPtr arg1) = 0;
+// These don't work because they are passing pointers around
+// virtual int[] doIntArray(int[] arg1, int arg2);
+// virtual string doString(string arg1);
+// This doesn't work because there is no mapping from XSD types to SDO CharacterType
+// virtual wchar_t doWChar(wchar_t arg1);
+// This doesn't work because Operation does not support int64_t yet
+// virtual int64_t doInt64(int64_t arg1);
+};
+
+#endif
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.wsdl
new file mode 100644
index 0000000000..294ae076a7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTest.wsdl
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.WSEntryPointTest.org/WSEntryPointTest/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="WSEntryPointTest" targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTest/">
+ <wsdl:types>
+ <xsd:schema targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTest/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:element name="doChars">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:string" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doCharsResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:string" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doString">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:string" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doLong">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doLongResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doInt">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doIntResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:int" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doFloat">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:float" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doFloatResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:float" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doLongDouble">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doLongDoubleResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doDouble">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doDoubleResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:double" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doBool">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:boolean" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doBoolResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:boolean" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doShort">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:short" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doShortResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:short" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doBytes">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:hexBinary" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doBytesResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:hexBinary" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doByte">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:byte" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doByteResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:byte" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+
+
+ <xsd:element name="doMixed">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="arg1" type="xsd:string" minOccurs="1"/>
+ <xsd:element name="arg2" type="xsd:int" minOccurs="1"/>
+ <xsd:element name="arg3" type="dataObjectData" minOccurs="1"/>
+ <xsd:element name="arg4" type="xsd:boolean" minOccurs="1"/>
+ <xsd:element name="arg5" type="xsd:float" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doMixedResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="dataObjectData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doDataObject">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="dataObjectData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doDataObjectResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="dataObjectData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:complexType name="dataObjectData">
+ <xsd:sequence>
+ <xsd:element name="someStringData" type="xsd:string" minOccurs="1"/>
+ <xsd:element name="someIntData" type="xsd:int" minOccurs="1"/>
+ <xsd:element name="someFloatData" type="xsd:float" minOccurs="1"/>
+ <xsd:element name="someDateData" type="xsd:date" minOccurs="1"/>
+ <xsd:element name="someListData" type="listData" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:complexType name="listData">
+ <xsd:sequence>
+ <xsd:element name="listItem" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ </xsd:complexType>
+
+ <xsd:element name="doAny">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="doAnyResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:any minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <!-- Can't do wchar - no mapping from XSD type to SDO:Character type
+
+ <xsd:element name="doWChar">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" minOccurs="1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:length value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doWChar">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" minOccurs="1">
+ <xsd:simpleType>
+ <xsd:restriction base="xsd:string">
+ <xsd:length value="1"/>
+ </xsd:restriction>
+ </xsd:simpleType>
+ </xsd:element>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ -->
+
+ <!-- Int64 not yet supported - see Jira TUSCANY-439
+ <xsd:element name="doInt64">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:long" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:element name="doInt64Response">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="someData" type="xsd:long" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+ -->
+
+ <!-- Can't do doIntArray -->
+ </xsd:schema>
+ </wsdl:types>
+
+ <wsdl:message name="doDataObjectRequestMsg">
+ <wsdl:part element="tns:doDataObject" name="doDataObjectRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doDataObjectResponseMsg">
+ <wsdl:part element="tns:doDataObjectResponse" name="doDataObjectResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doCharsRequestMsg">
+ <wsdl:part element="tns:doChars" name="doCharsRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doCharsResponseMsg">
+ <wsdl:part element="tns:doCharsResponse" name="doCharsResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doStringRequestMsg">
+ <wsdl:part element="tns:doString" name="doStringRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doStringResponseMsg">
+ <wsdl:part element="tns:doCharsResponse" name="doStringResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doLongRequestMsg">
+ <wsdl:part element="tns:doLong" name="doLongRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doLongResponseMsg">
+ <wsdl:part element="tns:doLongResponse" name="doLongResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doIntRequestMsg">
+ <wsdl:part element="tns:doInt" name="doIntRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doIntResponseMsg">
+ <wsdl:part element="tns:doIntResponse" name="doIntResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doFloatRequestMsg">
+ <wsdl:part element="tns:doFloat" name="doFloatRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doFloatResponseMsg">
+ <wsdl:part element="tns:doFloatResponse" name="doFloatResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doLongDoubleRequestMsg">
+ <wsdl:part element="tns:doLongDouble" name="doLongDoubleRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doLongDoubleResponseMsg">
+ <wsdl:part element="tns:doLongDoubleResponse" name="doLongDoubleResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doDoubleRequestMsg">
+ <wsdl:part element="tns:doDouble" name="doDoubleRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doDoubleResponseMsg">
+ <wsdl:part element="tns:doDoubleResponse" name="doDoubleResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doBoolRequestMsg">
+ <wsdl:part element="tns:doBool" name="doBoolRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doBoolResponseMsg">
+ <wsdl:part element="tns:doBoolResponse" name="doBoolResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doShortRequestMsg">
+ <wsdl:part element="tns:doShort" name="doShortRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doShortResponseMsg">
+ <wsdl:part element="tns:doShortResponse" name="doShortResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doBytesRequestMsg">
+ <wsdl:part element="tns:doBytes" name="doBytesRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doBytesResponseMsg">
+ <wsdl:part element="tns:doBytesResponse" name="doBytesResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doByteRequestMsg">
+ <wsdl:part element="tns:doByte" name="doByteRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doByteResponseMsg">
+ <wsdl:part element="tns:doByteResponse" name="doByteResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doMixedRequestMsg">
+ <wsdl:part element="tns:doMixed" name="doMixedRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doMixedResponseMsg">
+ <wsdl:part element="tns:doMixedResponse" name="doMixedResponsePart"/>
+ </wsdl:message>
+
+ <wsdl:message name="doAnyRequestMsg">
+ <wsdl:part element="tns:doAny" name="doAnyRequestPart"/>
+ </wsdl:message>
+ <wsdl:message name="doAnyResponseMsg">
+ <wsdl:part element="tns:doAnyResponse" name="doAnyResponsePart"/>
+ </wsdl:message>
+
+
+ <wsdl:portType name="WSEntryPointTest">
+ <wsdl:operation name="doDataObject">
+ <wsdl:input message="tns:doDataObjectRequestMsg"/>
+ <wsdl:output message="tns:doDataObjectResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doChars">
+ <wsdl:input message="tns:doCharsRequestMsg"/>
+ <wsdl:output message="tns:doCharsResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doString">
+ <wsdl:input message="tns:doStringRequestMsg"/>
+ <wsdl:output message="tns:doStringResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doLong">
+ <wsdl:input message="tns:doLongRequestMsg"/>
+ <wsdl:output message="tns:doLongResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doInt">
+ <wsdl:input message="tns:doIntRequestMsg"/>
+ <wsdl:output message="tns:doIntResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doFloat">
+ <wsdl:input message="tns:doFloatRequestMsg"/>
+ <wsdl:output message="tns:doFloatResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doLongDouble">
+ <wsdl:input message="tns:doLongDoubleRequestMsg"/>
+ <wsdl:output message="tns:doLongDoubleResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doDouble">
+ <wsdl:input message="tns:doDoubleRequestMsg"/>
+ <wsdl:output message="tns:doDoubleResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doBool">
+ <wsdl:input message="tns:doBoolRequestMsg"/>
+ <wsdl:output message="tns:doBoolResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doShort">
+ <wsdl:input message="tns:doShortRequestMsg"/>
+ <wsdl:output message="tns:doShortResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doBytes">
+ <wsdl:input message="tns:doBytesRequestMsg"/>
+ <wsdl:output message="tns:doBytesResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doByte">
+ <wsdl:input message="tns:doByteRequestMsg"/>
+ <wsdl:output message="tns:doByteResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doMixed">
+ <wsdl:input message="tns:doMixedRequestMsg"/>
+ <wsdl:output message="tns:doMixedResponseMsg"/>
+ </wsdl:operation>
+ <wsdl:operation name="doAny">
+ <wsdl:input message="tns:doAnyRequestMsg"/>
+ <wsdl:output message="tns:doAnyResponseMsg"/>
+ </wsdl:operation>
+ </wsdl:portType>
+
+
+ <wsdl:binding name="WSEntryPointTestSOAP" type="tns:WSEntryPointTest">
+ <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="doDataObject">
+ <soap:operation soapAction="WSEntryPointTest/doDataObject"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doChars">
+ <soap:operation soapAction="WSEntryPointTest/doChars"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doString">
+ <soap:operation soapAction="WSEntryPointTest/doString"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doLong">
+ <soap:operation soapAction="WSEntryPointTest/doLong"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doInt">
+ <soap:operation soapAction="WSEntryPointTest/doInt"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doFloat">
+ <soap:operation soapAction="WSEntryPointTest/doFloat"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doLongDouble">
+ <soap:operation soapAction="WSEntryPointTest/doLongDouble"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doDouble">
+ <soap:operation soapAction="WSEntryPointTest/doDouble"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doBool">
+ <soap:operation soapAction="WSEntryPointTest/doBool"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doShort">
+ <soap:operation soapAction="WSEntryPointTest/doShort"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doBytes">
+ <soap:operation soapAction="WSEntryPointTest/doBytes"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doByte">
+ <soap:operation soapAction="WSEntryPointTest/doByte"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doMixed">
+ <soap:operation soapAction="WSEntryPointTest/doMixed"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="doAny">
+ <soap:operation soapAction="WSEntryPointTest/doAny"/>
+ <wsdl:input><soap:body use="literal"/></wsdl:input>
+ <wsdl:output><soap:body use="literal"/></wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="WSEntryPointTest">
+ <wsdl:port binding="tns:WSEntryPointTestSOAP" name="WSEntryPointTestSOAP">
+ <soap:address location="http://localhost:9090/axis2/services/WSEntryPointTest"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.componentType
new file mode 100644
index 0000000000..cd58a345e6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.componentType
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ASCII"?>
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="WSEntryPointTestService">
+ <interface.cpp header="WSEntryPointTest.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.h
new file mode 100644
index 0000000000..926b6073d4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/WSEntryPointTestImpl.h
@@ -0,0 +1,57 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTESTIMPL_H
+#define WSEENTRYPOINTTESTIMPL_H
+
+#include "WSEntryPointTest.h"
+
+class WSEntryPointTestImpl : public WSEntryPointTest
+{
+public:
+ WSEntryPointTestImpl();
+ virtual ~WSEntryPointTestImpl();
+
+ // WSEntryPointTest interface
+ virtual char* doChars(char* arg1);
+ virtual long doLong(long arg1);
+ virtual int doInt(int arg1);
+ virtual float doFloat(float arg1);
+ virtual long double doLongDouble(long double arg1);
+ virtual double doDouble(double arg1);
+ virtual bool doBool(bool arg1);
+ virtual short doShort(short arg1);
+ virtual char* doBytes(char* arg1);
+ virtual char doByte(char arg1);
+ virtual DataObjectPtr doMixed(char* arg1, long arg2, DataObjectPtr arg3, bool arg4, double arg5);
+ virtual DataObjectPtr doDataObject(DataObjectPtr arg1);
+ virtual DataObjectPtr doAny(DataObjectPtr arg1);
+
+// These don't work because they are passing pointers around
+// virtual int[] doIntArray(int[] arg1, int arg2);
+// virtual string doString(string arg1);
+// This doesn't work because there is no mapping from XSD types to SDO CharacterType
+// virtual wchar_t doWChar(wchar_t arg1);
+// This doesn't work because Operation does not support int64_t yet
+// virtual int64_t doInt64(int64_t arg1);
+
+};
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/sca.module
new file mode 100644
index 0000000000..f92fae8110
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/modules/WSEntryPointTestModule/sca.module
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ASCII"?>
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ name="WSEntryPointTestModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="WSEntryPointTestEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="WSEntryPointTest.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="http://www.WSEntryPointTest.org/WSEntryPointTest/#wsdl.endpoint(WSEntryPointTest/WSEntryPointTestSOAP)"></binding.ws>
+ <reference>WSEntryPointTestServiceComponent</reference>
+ </entryPoint>
+
+
+ <component name="WSEntryPointTestServiceComponent">
+ <implementation.cpp dll="WSEntryPointTestModule.dll" header="WSEntryPointTestImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references> </references>
+ </component>
+</module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/subsystems/WSEntryPointTestSubsystem/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/subsystems/WSEntryPointTestSubsystem/sca.subsystem
new file mode 100644
index 0000000000..45ae34fd42
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTest/runtime/subsystems/WSEntryPointTestSubsystem/sca.subsystem
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9" name="WSEntryPointTestSubsystem">
+
+ <moduleComponent name="WSEntryPointTestService" module="WSEntryPointTestModule" />
+
+</subsystem>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.c b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.c
new file mode 100644
index 0000000000..c23e845691
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.c
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+#include <stdio.h>
+#include <axiom.h>
+#include <axis2_util.h>
+#include <axiom_soap.h>
+#include <axis2_client.h>
+
+axiom_node_t *
+build_om_payload_for_WSEntryPointTestRPC_svc(axis2_env_t *env);
+
+
+int main(int argc, char** argv)
+{
+ axis2_env_t *env = NULL;
+ axis2_char_t *address = NULL;
+ axis2_endpoint_ref_t* endpoint_ref = NULL;
+ axis2_options_t *options = NULL;
+ axis2_char_t *client_home = NULL;
+ axis2_svc_client_t* svc_client = NULL;
+ axiom_node_t *payload = NULL;
+ axiom_node_t *ret_node = NULL;
+
+ /* Set up the envioronment */
+ env = axis2_env_create_all("wsentrypointtestrpc.log", AXIS2_LOG_LEVEL_TRACE);
+
+ /* Set end point reference of echo service */
+ address = "http://localhost:9090/axis2/services/WSEntryPointTestRPC";
+ if (argc > 1 )
+ address = argv[1];
+ if (AXIS2_STRCMP(address, "-h") == 0)
+ {
+ printf("Usage : %s [endpoint_url]\n", argv[0]);
+ printf("use -h for help\n");
+ return 0;
+ }
+ printf ("Using endpoint : %s\n", address);
+
+ /* Create EPR with given address */
+ endpoint_ref = axis2_endpoint_ref_create(env, address);
+
+ /* Setup options */
+ options = axis2_options_create(env);
+ AXIS2_OPTIONS_SET_TO(options, env, endpoint_ref);
+ AXIS2_OPTIONS_SET_ACTION(options, env,
+ "http://www.WSEntryPointTest.org/WSEntryPointTestRPC/doString");
+
+ /* Set up deploy folder. It is from the deploy folder, the configuration is picked up
+ * using the axis2.xml file.
+ * In this sample client_home points to the Axis2/C default deploy folder. The client_home can
+ * be different from this folder on your system. For example, you may have a different folder
+ * (say, my_client_folder) with its own axis2.xml file. my_client_folder/modules will have the
+ * modules that the client uses
+ */
+ client_home = AXIS2_GETENV("AXIS2C_HOME");
+ if (!client_home)
+ {
+ printf("Please ensure AXIS2C_HOME is set as an env variable\n");
+ return 0;
+ }
+
+ /* Create service client */
+ svc_client = axis2_svc_client_create(env, client_home);
+ if (!svc_client)
+ {
+ printf("Error creating service client\n");
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ }
+
+ /* Set service client options */
+ AXIS2_SVC_CLIENT_SET_OPTIONS(svc_client, &env, options);
+
+ /* Engage addressing module */
+ AXIS2_SVC_CLIENT_ENGAGE_MODULE(svc_client, &env, AXIS2_MODULE_ADDRESSING);
+
+ /* Build the SOAP request message payload using OM API.*/
+ payload = build_om_payload_for_WSEntryPointTestRPC_svc(env);
+
+ /* Send request */
+ ret_node = AXIS2_SVC_CLIENT_SEND_RECEIVE(svc_client, env, payload);
+
+ if(ret_node)
+ {
+ axis2_char_t *om_str = NULL;
+ om_str = AXIOM_NODE_TO_STRING(ret_node, env);
+ if (om_str)
+ printf("\nReceived OM : %s\n", om_str);
+ printf("\nWSEntryPointTestRPC client invoke SUCCESSFUL!\n");
+ }
+ else
+ {
+ AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error code:"
+ " %d :: %s", env->error->error_number,
+ AXIS2_ERROR_GET_MESSAGE(env->error));
+ printf("WSEntryPointTestRPC client invoke FAILED!\n");
+ }
+
+ if (svc_client)
+ {
+ AXIS2_SVC_CLIENT_FREE(svc_client, env);
+ svc_client = NULL;
+ }
+ if (endpoint_ref)
+ {
+ AXIS2_ENDPOINT_REF_FREE(endpoint_ref, &env);
+ endpoint_ref = NULL;
+ }
+ return 0;
+}
+
+/* build SOAP request message content using OM */
+axiom_node_t *
+build_om_payload_for_WSEntryPointTestRPC_svc(axis2_env_t *env)
+{
+ axiom_node_t* req_om_node = NULL;
+ axiom_element_t* req_om_elem = NULL;
+ axiom_node_t* param_om_node = NULL;
+ axiom_element_t* param_om_elem = NULL;
+ axiom_namespace_t *ns1 = NULL;
+ axis2_char_t *om_str = NULL;
+
+ ns1 = axiom_namespace_create (env, "http://www.WSEntryPointTest.org/WSEntryPointTestRPC/", "ns1");
+ req_om_elem = axiom_element_create(env, NULL, "doString", ns1, &req_om_node);
+ param_om_elem = axiom_element_create(env, req_om_node, "doStringRequest", ns1, &param_om_node);
+ AXIOM_ELEMENT_SET_TEXT(param_om_elem, env, "WSEntryPointTestRPC Client Call", param_om_node);
+
+ om_str = AXIOM_NODE_TO_STRING(req_om_node, env);
+ if (om_str)
+ printf("\nSending OM : %s\n", om_str);
+
+ return req_om_node;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.vcproj
new file mode 100644
index 0000000000..5c48a3a683
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCClient/WSEntryPointTestRPCClient.vcproj
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="WSEntryPointTestRPCClient"
+ ProjectGUID="{F0972250-9F56-45B3-AFB9-0A4124A8B3D2}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(AXIS2C_HOME)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="5"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="axiom.lib axis2_engine.lib axis2_parser.lib axis2_util.lib"
+ OutputFile="$(OutDir)/WSEntryPointTestRPCClient.exe"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(AXIS2C_HOME)/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/WSEntryPointTestRPCClient.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="1"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+ RuntimeLibrary="4"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/WSEntryPointTestRPCClient.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath=".\WSEntryPointTestRPCClient.c">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/Tuscany-model.config
new file mode 100644
index 0000000000..42ad3ccfe3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/Tuscany-model.config
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="WSEntryPointTestRPC.wsdl"/>
+ </wsdl>
+ <xsd>
+ </xsd>
+</tuscany-model>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h
new file mode 100644
index 0000000000..5bd20f103a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h
@@ -0,0 +1,30 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTESTRPC_H
+#define WSEENTRYPOINTTESTRPC_H
+class WSEntryPointTestRPC
+{
+public:
+ virtual char* doString(char* arg1) = 0;
+};
+
+#endif
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl
new file mode 100644
index 0000000000..1706534042
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="WSEntryPointTestRPC" targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/">
+
+ <wsdl:types>
+ <xs:schema targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/"
+ elementFormDefault="qualified">
+
+ <xs:element name="doStringRequest">
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="doStringResponse">
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:element>
+
+ </xs:schema>
+ </wsdl:types>
+
+ <wsdl:message name="doStringResponseMsg">
+ <wsdl:part name="doStringResponse" element="tns:doStringResponse"/>
+ </wsdl:message>
+ <wsdl:message name="doStringRequestMsg">
+ <wsdl:part name="doStringRequest" element="tns:doStringRequest"/>
+ </wsdl:message>
+
+<!--
+ <wsdl:message name="doStringResponseMsg">
+ <wsdl:part name="doStringResponse" type="xsd:string"/>
+ </wsdl:message>
+ <wsdl:message name="doStringRequestMsg">
+ <wsdl:part name="doStringRequest" type="xsd:string"/>
+ </wsdl:message>
+-->
+ <wsdl:portType name="WSEntryPointTestRPC">
+ <wsdl:operation name="doString">
+ <wsdl:input message="tns:doStringRequestMsg"/>
+ <wsdl:output message="tns:doStringResponseMsg"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="WSEntryPointTestRPCSOAP" type="tns:WSEntryPointTestRPC">
+ <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="doString">
+ <soap:operation soapAction="WSEntryPointTestRPC/doString"/>
+ <wsdl:input>
+ <soap:body namespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/" use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body namespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/" use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="WSEntryPointTestRPC">
+ <wsdl:port binding="tns:WSEntryPointTestRPCSOAP" name="WSEntryPointTestRPCSOAP">
+ <soap:address location="http://localhost:9090/axis2/services/WSEntryPointTestRPC"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType
new file mode 100644
index 0000000000..15287150e0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ASCII"?>
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="WSEntryPointTestRPCService">
+ <interface.cpp header="WSEntryPointTestRPC.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.cpp
new file mode 100644
index 0000000000..f46d64db18
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.cpp
@@ -0,0 +1,38 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#include "WSEntryPointTestRPCImpl.h"
+#include <stdio.h>
+
+WSEntryPointTestRPCImpl::WSEntryPointTestRPCImpl()
+{
+}
+
+WSEntryPointTestRPCImpl::~WSEntryPointTestRPCImpl()
+{
+}
+
+// WSEntryPointTestRPC interface
+char* WSEntryPointTestRPCImpl::doString(char* arg1)
+{
+ printf("WSEntryPointTestRPCImpl::doString %s\n", arg1);
+
+ return "WSEntryPointTestRPCImpl::doString response";
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h
new file mode 100644
index 0000000000..82023992c7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h
@@ -0,0 +1,36 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTESTRPCIMPL_H
+#define WSEENTRYPOINTTESTRPCIMPL_H
+
+#include "WSEntryPointTestRPC.h"
+
+class WSEntryPointTestRPCImpl : public WSEntryPointTestRPC
+{
+public:
+ WSEntryPointTestRPCImpl();
+ virtual ~WSEntryPointTestRPCImpl();
+
+ // WSEntryPointTestRPC interface
+ virtual char* doString(char* arg1);
+};
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.cpp
new file mode 100644
index 0000000000..b3799db850
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy* WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy_Destructor(void* proxy)
+ {
+ delete (WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy*)proxy;
+ }
+}
+
+WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy::WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy::~WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+char* WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy::doString( char* arg0)
+{
+ Operation operation("doString");
+ operation.addParameter(&arg0);
+ char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.h
new file mode 100644
index 0000000000..36aa7a6992
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy_h
+#define WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy_h
+
+#include "WSEntryPointTestRPC.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy : public WSEntryPointTestRPC
+{
+public:
+ WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy();
+ virtual char* doString( char* arg1);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.cpp
new file mode 100644
index 0000000000..c20a5fb027
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.cpp
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper* WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper(target);
+ }
+}
+
+WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper::WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (WSEntryPointTestRPCImpl*)getImplementation();
+}
+
+WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper::~WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper::newImplementation()
+{
+ return new WSEntryPointTestRPCImpl;
+}
+
+void WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "doString")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ *(char**)operation.getReturnValue() = impl->doString(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.h
new file mode 100644
index 0000000000..875143461a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper_h
+#define WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper_h
+
+#include "WSEntryPointTestRPCImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ WSEntryPointTestRPCImpl* impl;
+};
+
+#endif // WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCModule.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCModule.vcproj
new file mode 100644
index 0000000000..d3bc172bcd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/WSEntryPointTestRPCModule.vcproj
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="WSEntryPointTestRPCModule"
+ ProjectGUID="{6F98DD05-6B3D-4C06-9E1C-AF3256DCA7EA}"
+ Keyword="Win32Proj">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="Debug"
+ IntermediateDirectory="Debug"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TUSCANY_SCACPP)/include,$(TUSCANY_SDOCPP)/include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;WSENTRYPOINTTESTRPCMODULE_EXPORTS"
+ MinimalRebuild="TRUE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="tuscany_sca.lib tuscany_sdo.lib"
+ OutputFile="$(OutDir)/WSEntryPointTestRPCModule.dll"
+ LinkIncremental="2"
+ AdditionalLibraryDirectories="$(TUSCANY_SCACPP)/lib,$(TUSCANY_SDOCPP)/lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile="$(OutDir)/WSEntryPointTestRPCModule.pdb"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/WSEntryPointTestRPCModule.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="Release"
+ IntermediateDirectory="Release"
+ ConfigurationType="2"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;WSENTRYPOINTTESTRPCMODULE_EXPORTS"
+ RuntimeLibrary="0"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/WSEntryPointTestRPCModule.dll"
+ LinkIncremental="1"
+ GenerateDebugInformation="TRUE"
+ SubSystem="2"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ ImportLibrary="$(OutDir)/WSEntryPointTestRPCModule.lib"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
+ UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
+ <File
+ RelativePath=".\WSEntryPointTestRPCImpl.cpp">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.cpp">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc;xsd"
+ UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
+ <File
+ RelativePath=".\WSEntryPointTestRPC.h">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestRPCImpl.h">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Proxy.h">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestRPCImpl_WSEntryPointTestRPCService_Wrapper.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
+ UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
+ <File
+ RelativePath=".\sca.module">
+ </File>
+ <File
+ RelativePath=".\services.xml">
+ </File>
+ <File
+ RelativePath=".\Tuscany-model.config">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestRPC.wsdl">
+ </File>
+ <File
+ RelativePath=".\WSEntryPointTestRPCImpl.componentType">
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/sca.module
new file mode 100644
index 0000000000..a6d397653e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/sca.module
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ASCII"?>
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ name="WSEntryPointTestRPCModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="WSEntryPointTestRPCEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="WSEntryPointTestRPC.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/#wsdl.endpoint(WSEntryPointTestRPC/WSEntryPointTestRPCSOAP)"></binding.ws>
+ <reference>WSEntryPointTestRPCServiceComponent</reference>
+ </entryPoint>
+
+
+ <component name="WSEntryPointTestRPCServiceComponent">
+ <implementation.cpp dll="WSEntryPointTestRPCModule.dll" header="WSEntryPointTestRPCImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references> </references>
+ </component>
+</module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/services.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/services.xml
new file mode 100644
index 0000000000..2fd4580526
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCModule/services.xml
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<service name="WSEntryPointTestRPC">
+ <parameter name="ServiceClass" locked="xsd:false">tuscany_sca</parameter>
+ <parameter name="TuscanySystemRoot" locked="xsd:false">D:/tuscany/cpp/sca/test/WSEntryPointTestRPC/runtime</parameter>
+ <parameter name="TuscanyEntryPoint" locked="xsd:false">WSEntryPointTestRPCSubsystem/WSEntryPointTestRPCService/WSEntryPointTestRPCEntrypoint</parameter>
+
+ <description>
+ This is a testing service , to test the system is working or not
+ </description>
+
+ <operation name="doString">
+ <!--messageReceiver class="axis2_receivers" /-->
+ </operation>
+
+</service>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCSubsystem/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCSubsystem/sca.subsystem
new file mode 100644
index 0000000000..c37d656a57
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/WSEntryPointTestRPCSubsystem/sca.subsystem
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9" name="WSEntryPointTestRPCSubsystem">
+
+ <moduleComponent name="WSEntryPointTestRPCService" module="WSEntryPointTestRPCModule" />
+
+</subsystem>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/Tuscany-model.config b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/Tuscany-model.config
new file mode 100644
index 0000000000..42ad3ccfe3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/Tuscany-model.config
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<tuscany-model xmlns="http://org.apache.tuscany/xmlns/cpp/1.0">
+ <wsdl>
+ <file name="WSEntryPointTestRPC.wsdl"/>
+ </wsdl>
+ <xsd>
+ </xsd>
+</tuscany-model>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h
new file mode 100644
index 0000000000..5bd20f103a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.h
@@ -0,0 +1,30 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTESTRPC_H
+#define WSEENTRYPOINTTESTRPC_H
+class WSEntryPointTestRPC
+{
+public:
+ virtual char* doString(char* arg1) = 0;
+};
+
+#endif
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl
new file mode 100644
index 0000000000..1706534042
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPC.wsdl
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="WSEntryPointTestRPC" targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/">
+
+ <wsdl:types>
+ <xs:schema targetNamespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/"
+ elementFormDefault="qualified">
+
+ <xs:element name="doStringRequest">
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:element>
+ <xs:element name="doStringResponse">
+ <xs:simpleType>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+ </xs:element>
+
+ </xs:schema>
+ </wsdl:types>
+
+ <wsdl:message name="doStringResponseMsg">
+ <wsdl:part name="doStringResponse" element="tns:doStringResponse"/>
+ </wsdl:message>
+ <wsdl:message name="doStringRequestMsg">
+ <wsdl:part name="doStringRequest" element="tns:doStringRequest"/>
+ </wsdl:message>
+
+<!--
+ <wsdl:message name="doStringResponseMsg">
+ <wsdl:part name="doStringResponse" type="xsd:string"/>
+ </wsdl:message>
+ <wsdl:message name="doStringRequestMsg">
+ <wsdl:part name="doStringRequest" type="xsd:string"/>
+ </wsdl:message>
+-->
+ <wsdl:portType name="WSEntryPointTestRPC">
+ <wsdl:operation name="doString">
+ <wsdl:input message="tns:doStringRequestMsg"/>
+ <wsdl:output message="tns:doStringResponseMsg"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="WSEntryPointTestRPCSOAP" type="tns:WSEntryPointTestRPC">
+ <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="doString">
+ <soap:operation soapAction="WSEntryPointTestRPC/doString"/>
+ <wsdl:input>
+ <soap:body namespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/" use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body namespace="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/" use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="WSEntryPointTestRPC">
+ <wsdl:port binding="tns:WSEntryPointTestRPCSOAP" name="WSEntryPointTestRPCSOAP">
+ <soap:address location="http://localhost:9090/axis2/services/WSEntryPointTestRPC"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType
new file mode 100644
index 0000000000..15287150e0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.componentType
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ASCII"?>
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="WSEntryPointTestRPCService">
+ <interface.cpp header="WSEntryPointTestRPC.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h
new file mode 100644
index 0000000000..82023992c7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/WSEntryPointTestRPCImpl.h
@@ -0,0 +1,36 @@
+/*
++----------------------------------------------------------------------+
+| (c) Copyright IBM Corporation 2005. |
+| All Rights Reserved. |
++----------------------------------------------------------------------+
+| |
+| 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. |
++----------------------------------------------------------------------+
+*/
+
+#ifndef WSEENTRYPOINTTESTRPCIMPL_H
+#define WSEENTRYPOINTTESTRPCIMPL_H
+
+#include "WSEntryPointTestRPC.h"
+
+class WSEntryPointTestRPCImpl : public WSEntryPointTestRPC
+{
+public:
+ WSEntryPointTestRPCImpl();
+ virtual ~WSEntryPointTestRPCImpl();
+
+ // WSEntryPointTestRPC interface
+ virtual char* doString(char* arg1);
+};
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/sca.module
new file mode 100644
index 0000000000..a6d397653e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/modules/WSEntryPointTestRPCModule/sca.module
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ASCII"?>
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ name="WSEntryPointTestRPCModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="WSEntryPointTestRPCEntrypoint" multiplicity="1..1">
+ <interface.wsdl interface="WSEntryPointTestRPC.wsdl" callbackInterface=""></interface.wsdl>
+ <binding.ws port="http://www.WSEntryPointTest.org/WSEntryPointTestRPC/#wsdl.endpoint(WSEntryPointTestRPC/WSEntryPointTestRPCSOAP)"></binding.ws>
+ <reference>WSEntryPointTestRPCServiceComponent</reference>
+ </entryPoint>
+
+
+ <component name="WSEntryPointTestRPCServiceComponent">
+ <implementation.cpp dll="WSEntryPointTestRPCModule.dll" header="WSEntryPointTestRPCImpl.h"></implementation.cpp>
+ <properties> </properties>
+ <references> </references>
+ </component>
+</module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/subsystems/WSEntryPointTestRPCSubsystem/sca.subsystem b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/subsystems/WSEntryPointTestRPCSubsystem/sca.subsystem
new file mode 100644
index 0000000000..c37d656a57
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/test/WSEntryPointTestRPC/runtime/subsystems/WSEntryPointTestRPCSubsystem/sca.subsystem
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<subsystem xmlns="http://www.osoa.org/xmlns/sca/0.9" name="WSEntryPointTestRPCSubsystem">
+
+ <moduleComponent name="WSEntryPointTestRPCService" module="WSEntryPointTestRPCModule" />
+
+</subsystem>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/Makefile.am
new file mode 100644
index 0000000000..0bea197e35
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = scagen \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/LICENSE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/LICENSE
new file mode 100755
index 0000000000..f433b1a53f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/LICENSE
@@ -0,0 +1,177 @@
+
+ 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
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/NOTICE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/NOTICE
new file mode 100644
index 0000000000..bfb81409ad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/NOTICE
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/) \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/README b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/README
new file mode 100644
index 0000000000..2831dadd94
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/META-INF/README
@@ -0,0 +1,19 @@
+Apache Tuscany C++ M1 build (July, 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.
+
+Thank you for using Tuscany!
+
+The Tuscany Team.
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/Makefile.am
new file mode 100644
index 0000000000..0d8e880488
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/Makefile.am
@@ -0,0 +1,19 @@
+SUBDIRS =
+
+BUILT_SOURCES = scagen_build
+EXTRA_DIST = build.xml scagen.sh scagen.cmd src META-INF
+bin_SCRIPTS = scagen.sh scagen.cmd
+
+scagen_build:
+ ant
+ touch scagen_build
+
+clean:
+ rm -f scagen_build
+
+install-exec-hook:
+ cp bld/scagen.jar $(bindir)
+
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/build.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/build.xml
new file mode 100644
index 0000000000..1b8e66e50a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/build.xml
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<project name="org.apache.tuscany.sca.cpp.tools" default="all" basedir=".">
+
+ <target name="init">
+ <property name="build.result.folder" value="${basedir}/bld" />
+ <property name="temp.folder" value="${basedir}/tmp" />
+ <property name="junit.jar.folder" value="${basedir}/lib" />
+ <property name="tool.name" value="scagen" />
+ <property name="bin.dir" value="${basedir}/../../deploy/bin" />
+ </target>
+
+ <!-- Add "test" to the depends list below to add auto-testing to the build -->
+ <!-- a junit.jar is needed at ${junit.jar.folder}/junit.jar though -->
+ <target name="all" depends="init,jars,doc,scripts,zip.all">
+ </target>
+
+ <target name="test" depends="init,jars,test.jar">
+ <java classname="org.apache.tuscany.sca.cpp.tools.junit.TestAllModulesTest">
+ <classpath>
+ <pathelement location="${build.result.folder}/test.jar" />
+ <pathelement location="${junit.jar.folder}/junit.jar" />
+ <pathelement location="${build.result.folder}/scagen.jar" />
+ <pathelement path="${java.class.path}" />
+ </classpath>
+ </java>
+ </target>
+
+
+
+ <target name="doc">
+ <javadoc packagenames="org.apache.tuscany.sca.cpp.tools.*" sourcepath="src" defaultexcludes="yes" destdir="docs/api" author="true" version="true" use="true" windowtitle="SCA for C++ Tools">
+ <doctitle>
+ <![CDATA[<h1>SCA for C++ Tools</h1>]]>
+ </doctitle>
+ <bottom>
+ <![CDATA[<i>Copyright 2005 The Apache Software Foundation or its licensors, as applicable.</i>]]></bottom>
+ <group title="C++ Parser" packages="org.apache.tuscany.sca.cpp.tools.common" />
+ <group title="SCA Services Generator" packages="org.apache.tuscany.sca.cpp.tools.services" />
+ <link offline="true" href="http://java.sun.com/products/jdk/1.2/docs/api/" packagelistLoc="C:\tmp" />
+</javadoc>
+</target>
+
+<target name="jars" depends="init, scagen.jar, src.jar">
+</target>
+
+<target name="scripts" depends="init">
+<mkdir dir="${build.result.folder}" />
+<copy file="scagen.cmd" todir="${build.result.folder}" />
+<copy file="scagen.sh" todir="${build.result.folder}" />
+</target>
+
+
+
+<target name="src.jar" depends="init">
+<delete dir="${temp.folder}/src.jar.bin" />
+<mkdir dir="${temp.folder}/src.jar.bin" />
+<!-- Copy necessary resources i.e XSL stylesheets, test input etc
+ for the src jar too
+ -->
+<copy todir="${temp.folder}/src.jar.bin" failonerror="true">
+ <fileset dir="src/" />
+</copy>
+<mkdir dir="${build.result.folder}" />
+<jar jarfile="${build.result.folder}/src.jar" basedir="${temp.folder}/src.jar.bin" />
+<delete dir="${temp.folder}/test.jar.bin" />
+</target>
+
+<target name="test.jar" depends="init, scagen.jar" unless="test.jar" description="Create jar for unit tests: test.jar.">
+<delete dir="${temp.folder}/test.jar.bin" />
+<mkdir dir="${temp.folder}/test.jar.bin" />
+<!-- compile the source code -->
+<javac srcdir="junit" destdir="${temp.folder}/test.jar.bin" failonerror="true" includeAntRuntime="no">
+ <src path="junit/" />
+ <classpath>
+ <pathelement path="${junit.jar.folder}/junit.jar" />
+ <pathelement path="${build.result.folder}/scagen.jar" />
+ </classpath>
+</javac>
+<!-- Copy necessary resources i.e XSL stylesheets, test input etc -->
+<copy todir="${temp.folder}/test.jar.bin" failonerror="true">
+ <fileset dir="junit/" excludes="testoutput/**" />
+</copy>
+<mkdir dir="${build.result.folder}" />
+<jar jarfile="${build.result.folder}/test.jar" basedir="${temp.folder}/test.jar.bin" />
+<delete dir="${temp.folder}/test.jar.bin" />
+</target>
+
+<target name="scagen.jar" depends="init" unless="scagen.jar" description="Create main jar: scagen.jar">
+<delete dir="${temp.folder}/scagen.jar.bin" />
+<mkdir dir="${temp.folder}/scagen.jar.bin" />
+<!-- compile the source code -->
+<javac srcdir="src" destdir="${temp.folder}/scagen.jar.bin" failonerror="true" includeAntRuntime="no">
+ <src path="src/" />
+</javac>
+<!-- Copy necessary resources i.e XSL stylesheets, test input etc -->
+<copy todir="${temp.folder}/scagen.jar.bin" failonerror="true">
+ <fileset dir="src/" excludes="**/*.java" />
+</copy>
+
+<copy todir="${temp.folder}/scagen.jar.bin/META-INF" failonerror="true">
+ <fileset dir="META-INF/"/>
+</copy>
+
+<mkdir dir="${build.result.folder}" />
+<jar jarfile="${build.result.folder}/scagen.jar" basedir="${temp.folder}/scagen.jar.bin">
+ <manifest>
+ <attribute name="Main-Class" value="org.apache.tuscany.sca.cpp.tools.services.Scagen" />
+ </manifest>
+</jar>
+<delete dir="${temp.folder}/scagen.jar.bin" />
+</target>
+
+<target name="tobin" depends="jars, scripts" description="move the desired stuff to bin">
+ <move file="${build.result.folder}/scagen.cmd" todir="${bin.dir}" />
+ <move file="${build.result.folder}/scagen.sh" todir="${bin.dir}" />
+ <move file="${build.result.folder}/scagen.jar" todir="${bin.dir}" />
+</target>
+
+
+
+<target name="clean" depends="init" description="Clean of all the files created.">
+<delete file="${build.result.folder}/test.jar" />
+<delete file="${build.result.folder}/src.jar" />
+<delete file="${build.result.folder}/scagen.jar" />
+<delete file="${build.result.folder}/org.apache.tuscany.sca.cpp.tools.zip" />
+<delete dir="${temp.folder}" />
+</target>
+
+<target name="zip.all" depends="jars" description="Create a zip containing everything">
+<delete file="${build.result.folder}/org.apache.tuscany.sca.cpp.tools.zip" />
+<zip zipfile="${build.result.folder}/org.apache.tuscany.sca.cpp.tools.zip" excludes="bin/**,tmp/**,lib/**,junit/testoutput/**" basedir="." filesonly="true" whenempty="skip" update="false" />
+<delete dir="${temp.folder}" />
+</target>
+
+</project> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/CalculatorTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/CalculatorTest.java
new file mode 100644
index 0000000000..448fd6dd7d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/CalculatorTest.java
@@ -0,0 +1,29 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+import org.apache.tuscany.sca.cpp.tools.junit.TuscanyTestCase;
+
+/**
+ * This test case tests a simple Calculator service tools generation
+ */
+public class CalculatorTest extends TuscanyTestCase {
+
+ public void testCalculatorModuleAndComponent() {
+ testModule("CalculatorModuleAndComponent", check_results);
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/EnvHandlerTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/EnvHandlerTest.java
new file mode 100644
index 0000000000..82bdce4dd4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/EnvHandlerTest.java
@@ -0,0 +1,44 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule SCA module as
+ * input data.
+ */
+public class EnvHandlerTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public EnvHandlerTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+ testModule("MyValueServiceModule", check_results);
+ }
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceButNotInClassAttrTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceButNotInClassAttrTest.java
new file mode 100644
index 0000000000..35b3416057
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceButNotInClassAttrTest.java
@@ -0,0 +1,88 @@
+/*
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr SCA module as
+ * input data.
+ */
+public class ImplClassWithNameSpaceButNotInClassAttrTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public ImplClassWithNameSpaceButNotInClassAttrTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+ testModule("MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr", check_results);
+ }
+
+}
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr SCA module as
+ * input data.
+ */
+public class ImplClassWithNameSpaceButNotInClassAttrTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public ImplClassWithNameSpaceButNotInClassAttrTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+ testModule("MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr", check_results);
+ }
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceTest.java
new file mode 100644
index 0000000000..5c38f6fe31
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/ImplClassWithNameSpaceTest.java
@@ -0,0 +1,44 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule SCA module as
+ * input data.
+ */
+public class ImplClassWithNameSpaceTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public ImplClassWithNameSpaceTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+ testModule("MyValueServiceModuleImplClassWithNamespace", check_results);
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceButNotInClassAttrTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceButNotInClassAttrTest.java
new file mode 100644
index 0000000000..b4b025bcba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceButNotInClassAttrTest.java
@@ -0,0 +1,44 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule SCA module as
+ * input data.
+ */
+public class IntfClassWithNameSpaceButNotInClassAttrTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public IntfClassWithNameSpaceButNotInClassAttrTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+ testModule("MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr", check_results);
+ }
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceTest.java
new file mode 100644
index 0000000000..90ea9751ad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/IntfClassWithNameSpaceTest.java
@@ -0,0 +1,44 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule SCA module as
+ * input data.
+ */
+public class IntfClassWithNameSpaceTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public IntfClassWithNameSpaceTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+ testModule("MyValueServiceModuleIntfClassWithNamespace", check_results);
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/MissingModuleAndFragmentTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/MissingModuleAndFragmentTest.java
new file mode 100644
index 0000000000..d45e9eb941
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/MissingModuleAndFragmentTest.java
@@ -0,0 +1,44 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule SCA module as
+ * input data.
+ */
+public class MissingModuleAndFragmentTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public MissingModuleAndFragmentTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+ testModule("MyValueServiceModuleMissingScaModule",check_results);
+ }
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/SimplePublicPrivateProtectedTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/SimplePublicPrivateProtectedTest.java
new file mode 100644
index 0000000000..baf5ad6c61
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/SimplePublicPrivateProtectedTest.java
@@ -0,0 +1,45 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+/**
+ * This is a "run this first" testcase that just tests some simple operations of
+ * the scagen tools it uses the
+ * Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule SCA module as
+ * input data.
+ */
+public class SimplePublicPrivateProtectedTest extends TuscanyTestCase {
+
+ /**
+ * Constructor for CustomerInfoTestOLD.
+ *
+ * @param arg0
+ */
+ public SimplePublicPrivateProtectedTest(String arg0) {
+ super(arg0);
+ }
+
+ /**
+ * Test the Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule
+ * proxy and wrapper generation.
+ */
+ public void testEnvHandler() {
+
+ testModule("SimplePublicPrivateProtectedTest", check_results);
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestAllModulesTest.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestAllModulesTest.java
new file mode 100644
index 0000000000..d0d85db1ea
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestAllModulesTest.java
@@ -0,0 +1,83 @@
+/*
+ * IBM Confidential
+ *
+ * OCO Source Materials
+ *
+ * <PID TBD>
+ *
+ * (C) Copyright IBM Corp. 2005
+ *
+ * The source code for this program is not published
+ * or otherwise divested of its trade secrets,
+ * irrespective of what has been deposited with the
+ * U. S. Copyright Office.
+ */
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.tuscany.sca.cpp.tools.junit.TuscanyTestCase;
+
+/**
+ * This test case will test all the modules placed in the "modules" directory
+ * against the results in their repectice "expected_results" folders.
+ */
+public class TestAllModulesTest extends TuscanyTestCase {
+
+ String testsDir = TuscanyTestCase.junit_modules;
+
+ Set excludes = new HashSet();
+
+ public TestAllModulesTest(String arg0) {
+ super(arg0);
+ excludes.add("MyValueServiceModuleMissingScaModule");
+ excludes.add("CVS");
+ excludes.add(".svn");
+ }
+
+
+ /* main exists to allow running from the java ant task */
+ public static void main(String[] args) {
+ TestAllModulesTest test = new TestAllModulesTest("");
+ test.testAllModulesRegression();
+ }
+
+ public void testAllModulesRegression() {
+ File dir = new File(testsDir);
+
+ if (dir.isDirectory()) {
+ System.out.println("Testing all modules under "
+ + dir.getAbsolutePath());
+ String[] test_modules = dir.list();
+
+ for (int i = 0; i < test_modules.length; i++) {
+ File test_module = new File(testsDir, test_modules[i]);
+
+ String module_name = null;
+ if (test_module.isDirectory()) {
+ module_name = test_module.getName();
+ if (!excludes.contains(module_name.intern())) {
+ testModule(module_name, check_results);
+ System.out.println("Test of module \"" + module_name
+ + "\" passed.");
+ continue;
+ } else {
+ System.out
+ .println("Ignoring excluded module subdirectory \""
+ + module_name + "\"");
+ }
+ }
+ }
+
+ } else {
+
+ fail("Test directory is not a directory! \r The variable org.apache.tuscany.sca.cpp.tools.junit.TuscanyTestCase.root sets the location of the junit input data,\r it is currently set as "
+ + TuscanyTestCase.root + "\rand we expect to find a testinput\\modules directory under there.");
+ }
+
+ System.out.println("testAllModules test passed.");
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestDeployAssistTool.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestDeployAssistTool.java
new file mode 100644
index 0000000000..8210ca9a5c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TestDeployAssistTool.java
@@ -0,0 +1,91 @@
+/*
+ * IBM Confidential
+ *
+ * OCO Source Materials
+ *
+ * <PID TBD>
+ *
+ * (C) Copyright IBM Corp. 2005
+ *
+ * The source code for this program is not published
+ * or otherwise divested of its trade secrets,
+ * irrespective of what has been deposited with the
+ * U. S. Copyright Office.
+ */
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+import java.io.File;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * This test case will test all the modules placed in the "modules" directory
+ * against the results in their repectice "expected_results" folders.
+ */
+public class TestDeployAssistTool extends TuscanyTestCase {
+
+ String testsDir = TuscanyTestCase.junit_modules;
+
+ Set excludes = new HashSet();
+
+ public TestDeployAssistTool(String arg0) {
+ super(arg0);
+ excludes.add("MyValueServiceModuleMissingScaModule");
+ excludes.add("CVS");
+ }
+
+ /* main exists to allow running from the test script which will
+ * wrap this test case and pipe the satandard output to somewhere
+ * for checking.
+ */
+
+ public static void main(String[] args) {
+ TestDeployAssistTool test = new TestDeployAssistTool("");
+ test.testDeployToolNullParms();
+ }
+
+ public void testDeployTool() {
+ //Utils.setReportArtefacts(true);
+ TestAllModulesTest t = new TestAllModulesTest("");
+ File dir = new File(testsDir);
+
+ if (dir.isDirectory()) {
+ String[] test_modules = dir.list();
+
+ for (int i = 0; i < test_modules.length; i++) {
+ File test_module = new File(testsDir, test_modules[i]);
+ String module_name = null;
+ if (test_module.isDirectory()) {
+ module_name = test_module.getName();
+ if (!excludes.contains(module_name.intern())) {
+ t.testModuleDeploy(module_name, create_results, "c:\\colin", "cp");
+ }
+ }
+ System.out.println("");
+ }
+ }
+ }
+
+ public void testDeployToolNullParms() {
+ //Utils.setReportArtefacts(true);
+ TestAllModulesTest t = new TestAllModulesTest("");
+ File dir = new File(testsDir);
+
+ if (dir.isDirectory()) {
+ String[] test_modules = dir.list();
+
+ for (int i = 0; i < test_modules.length; i++) {
+ File test_module = new File(testsDir, test_modules[i]);
+ String module_name = null;
+ if (test_module.isDirectory()) {
+ module_name = test_module.getName();
+ if (!excludes.contains(module_name.intern())) {
+ t.testModuleDeploy(module_name, create_results, null, null);
+ }
+ }
+ System.out.println("");
+ }
+ }
+ }
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TuscanyTestCase.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TuscanyTestCase.java
new file mode 100644
index 0000000000..7eae483fb4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/org/apache/tuscany/sca/cpp/tools/junit/TuscanyTestCase.java
@@ -0,0 +1,337 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.junit;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+import junit.framework.TestCase;
+
+import org.apache.tuscany.sca.cpp.tools.common.Options;
+import org.apache.tuscany.sca.cpp.tools.services.Scagen;
+
+/**
+ * A superclass for testcases that can be used to store common functions.
+ */
+public class TuscanyTestCase extends TestCase {
+
+ public static String root = "d:\\tuscany\\cpp\\sca\\tools\\scagen\\junit\\";
+
+ public static String junit_modules = root + "testinput\\modules\\";
+
+ public static String junit_output = root + "testoutput\\";
+
+ private String testcase = "TESTCASE NOT SET BY SUBCLASS";
+
+ String input = null;
+
+ String output = null;
+
+ /**
+ * Check the resulting files with the contents of the expected_results
+ * folder in the testModule method
+ */
+ public final static boolean check_results = true;
+
+ /**
+ * Create test output but do not check it (useful for setting up new
+ * expected test output
+ */
+ public final static boolean create_results = false;
+
+ /**
+ *
+ */
+ public TuscanyTestCase() {
+ super();
+ }
+
+ /**
+ * @param arg0
+ */
+ public TuscanyTestCase(String arg0) {
+ super(arg0);
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ }
+
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ }
+
+ /**
+ * Tests to see if two files are the same - this is just a scratch method at
+ * the moment that flags up testcase output files not matching expected
+ * results rather than needing to be a fully robust implementation and needs
+ * a little further work.
+ *
+ * @param file1
+ * the first file to compare
+ * @param file2
+ * the second file to compare
+ *
+ */
+ protected boolean areFilesEqual(String file1, String file2) {
+
+ try {
+ FileInputStream fis1 = new java.io.FileInputStream(file1);
+ FileInputStream fis2 = new java.io.FileInputStream(file2);
+
+ BufferedReader br1 = new BufferedReader(new InputStreamReader(fis1));
+ BufferedReader br2 = new BufferedReader(new InputStreamReader(fis2));
+
+ String line1 = br1.readLine();
+ String line2 = br2.readLine();
+ boolean moretodo = (line1 != null) && (line2 != null);
+
+ for (int line = 1; moretodo; line++) {
+
+ if (line1.equals(line2)) {
+
+ line1 = br1.readLine();
+ line2 = br2.readLine();
+
+ } else {
+
+ int l1i, l2i;
+
+ if ((l1i = line1.lastIndexOf("$Id")) > 0) {
+ //allow CVS strings
+ line1 = br1.readLine();
+ }
+
+ if ((l2i = line2.lastIndexOf("$Id")) > 0) {
+ //allow CVS strings
+ line2 = br2.readLine();
+ }
+
+ if (l1i == -1 && l2i == -1) {
+
+ // they don't match
+ System.out.println("file " + file1 + " and file "
+ + file2);
+ System.out.println(" don't match at line " + line);
+ System.out.println("1 is :" + line1);
+ System.out.println("2 is :" + line2);
+
+ return false;
+ }
+ }
+
+ moretodo = (line1 != null) && (line2 != null);
+ }
+
+ System.out.println("MATCH FOR: file " + file1 + " and file "
+ + file2);
+ return true;
+
+ } catch (Throwable t) {
+ t.printStackTrace();
+ return true;
+ }
+
+ }
+
+ /**
+ * @param outputDir
+ */
+ protected void clearDirButNotExpectedOutputSubDir(String outputDir) {
+ File dir = new File(outputDir);
+ if (dir.isDirectory()) {
+ String[] files = dir.list();
+ for (int i = 0; i < files.length; i++) {
+ File child = new File(dir, files[i]);
+ if (child.isDirectory()) {
+ if (!(child.getName().equals("expected_output") || child.getName().equals(".svn"))) {
+ clearDirButNotExpectedOutputSubDir(dir
+ .getAbsolutePath()
+ + File.separator + files[i]);
+ }
+ }
+ else
+ {
+ if( !child.delete() )
+ {
+ System.out.println("File "+outputDir+"/"+child.getName()+" could not be deleted");
+ }
+ }
+ }
+ }
+
+ }
+
+ public void testModule(String module, boolean check) {
+
+ Options.reset();
+ setTestcase(module);
+ clearDirButNotExpectedOutputSubDir(output);
+
+ String[] commandLine = new String[] { "-dir", input, "-output", output };
+ try {
+ Scagen.main(commandLine);
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+
+ if (check) {
+ checkDirWithExpected(output);
+ }
+ }
+
+ public void testModuleDeploy(String module, boolean check,
+ String deployDir, String command) {
+
+ Options.reset();
+ setTestcase(module);
+ clearDirButNotExpectedOutputSubDir(output);
+
+ String[] commandLine;
+ if (null == deployDir) {
+ commandLine = new String[] { "-dir", input, "-output",
+ output, "-deploy"};
+ } else {
+ commandLine = new String[] { "-dir", input, "-output",
+ output, "-deploy", deployDir, "-command", command };
+ }
+ try {
+ Scagen.main(commandLine);
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+
+ if (check) {
+ checkDirWithExpected(output);
+ }
+ }
+
+ /**
+ * @param outputDirName
+ */
+ private void checkDirWithExpected(String outputDirName) {
+
+ File actualDir = new File(outputDirName);
+ if (actualDir == null || !actualDir.isDirectory()) {
+ fail("result directory does not exist");
+ }
+
+ File expectedDir = new File(outputDirName + File.separator
+ + "expected_output");
+ if (expectedDir == null || !actualDir.isDirectory()) {
+ fail("can't check results as expected directory does not exist");
+ }
+
+ //Check every file in the expected output directory is present
+ //in the actual directory
+
+ String[] expectedFiles = expectedDir.list();
+
+ if (expectedFiles == null) {
+ fail("no expected results for " + expectedDir.getPath());
+ }
+ for (int i = 0; expectedFiles != null && i < expectedFiles.length; i++) {
+ File expectedFile = new File(expectedDir, expectedFiles[i]);
+ if (expectedFile.isDirectory()) {
+ // we can't check subdirectories yet
+ // and it conveniently skips over "CVS"
+ } else {
+ File actualFile = checkFileExistsFailIfNot(actualDir,
+ expectedFile.getName());
+ checkFileHasNoTabsAndEndsInNewline(actualDir, expectedFile
+ .getName());
+ if (!areFilesEqual(expectedFile.getAbsolutePath(), actualFile
+ .getAbsolutePath())) {
+ fail("odd output for " + expectedFile.getPath());
+ }
+
+ }
+
+ }
+
+ }
+
+ /**
+ * @param actualDir
+ * @param name
+ */
+ private File checkFileExistsFailIfNot(File dir, String name) {
+
+ File f = new File(dir, name);
+ if (f == null || !f.exists() || !f.isFile()) {
+ fail("Expected result file " + f + " does not exist");
+ }
+ return f;
+
+ }
+
+ /**
+ * @param actualDir
+ * @param name
+ */
+ private void checkFileHasNoTabsAndEndsInNewline(File dir, String name) {
+
+ try {
+ File f = new File(dir, name);
+ FileInputStream fis = new FileInputStream(f);
+ InputStreamReader isr = new InputStreamReader(fis);
+ Reader br = new BufferedReader(isr);
+ int ch, charBeforeMinusOne = -1;
+ while ((ch = br.read()) > -1) {
+ if (ch == '\t') {
+ fail("found tab in output " + f.getPath());
+ }
+ charBeforeMinusOne = ch;
+ }
+ //The last char must be newline;
+ if (charBeforeMinusOne != '\n') {
+ fail("last char in file is not a newline in " + "(char is:"
+ + ch + " " + dir.getName() + File.separator + name);
+ }
+
+ br.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ fail("io exception in tab/newline checker for " + dir.getName()
+ + File.separator + name);
+ return;
+ }
+
+ }
+
+ /**
+ * @param testcase
+ * The testcase to set.
+ */
+ void setTestcase(String testcase) {
+ this.testcase = testcase;
+ input = TuscanyTestCase.junit_modules + testcase;
+ output = TuscanyTestCase.junit_output + testcase;
+ }
+
+ /**
+ * @return Returns the testcase.
+ */
+ String getTestcase() {
+ return testcase;
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go.cmd
new file mode 100644
index 0000000000..6a303b1471
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go.cmd
@@ -0,0 +1,2 @@
+rm -rf out
+java -jar scagen.jar -dir c:\workspaces\wid60-no-core\Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule -output c:\hydra\out
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_dir_option.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_dir_option.cmd
new file mode 100644
index 0000000000..13834b3aae
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_dir_option.cmd
@@ -0,0 +1 @@
+java -jar scagen.jar -dirX c:\workspaces\wid60-no-core\Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule -output c:\hydra\out
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_input_dir.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_input_dir.cmd
new file mode 100644
index 0000000000..4fa9a86b1f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_input_dir.cmd
@@ -0,0 +1 @@
+java -jar scagen.jar -dir x:\not_there -output c:\hydra\irrelevant
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_output_dir.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_output_dir.cmd
new file mode 100644
index 0000000000..5e6b818ae3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/go_no_output_dir.cmd
@@ -0,0 +1 @@
+java -jar scagen.jar -dir c:\workspaces\wid60-no-core\Hydra.sca.core\test\testSCASystem\modules\MyValueServiceModule -output r:\hydra\out
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/refresh-tools-jar.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/refresh-tools-jar.cmd
new file mode 100644
index 0000000000..2640ed87de
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/scripts_for_standalone_testing/refresh-tools-jar.cmd
@@ -0,0 +1 @@
+copy c:\workspaces\wid60-no-core\Hydra.sca.tools\scagen.jar . \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/Calculator.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/Calculator.h
new file mode 100644
index 0000000000..3ab503ef1d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/Calculator.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CALCULATOR_H
+#define CALCULATOR_H
+
+
+class Calculator {
+
+private:
+ virtual long add(long a, long b) = 0;
+public:
+
+ virtual long subtract(long a, long b) = 0;
+};
+
+
+#endif // CALCULATOR_H
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.componentType
new file mode 100644
index 0000000000..ef0f346ba0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.componentType
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+ <service name="CalculatorService">
+ <interface.cpp header="Calculator.h"/> <!-- Header is relative to the module root -->
+ </service>
+</componentType> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.h
new file mode 100644
index 0000000000..daa9b25627
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/CalculatorImpl.h
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CALCULATORIMPL_H
+#define CALCULATORIMPL_H
+
+#include "Calculator.h"
+
+class CalculatorImpl : public Calculator
+{
+public:
+ CalculatorImpl();
+ virtual ~CalculatorImpl();
+ virtual long add(long a, long b);
+ virtual long subtract(long a, long b);
+
+};
+
+#endif //
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/sca.module
new file mode 100644
index 0000000000..f74d5f690c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorModuleAndComponent/sca.module
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9" name="Calculator">
+
+ <component name="Calculator">
+ <implementation.cpp dll="debug/Calculator.dll" header="CalculatorImpl.h"/>
+ </component>
+
+</module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorBack.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorBack.h
new file mode 100644
index 0000000000..da74be77a6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorBack.h
@@ -0,0 +1,31 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CALCULATOR_H
+#define CALCULATOR_H
+
+
+class CalculatorBack {
+
+
+
+public:
+ virtual long subtractBack(long a, long b) = 0;
+ virtual long addBack(long a, long b) = 0;
+};
+
+
+#endif // CALCULATOR_H
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorForward.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorForward.h
new file mode 100644
index 0000000000..48a5ff5018
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/otherSubFolder/CalculatorForward.h
@@ -0,0 +1,30 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CALCULATOR_H
+#define CALCULATOR_H
+
+
+class CalculatorForward {
+
+public:
+
+ virtual long subtractForward(long a, long b) = 0;
+ virtual long addForward(long a, long b) = 0;
+};
+
+
+#endif // CALCULATOR_H
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/sca.module
new file mode 100644
index 0000000000..b4aaa37a4c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/sca.module
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9" name="Calculator">
+
+ <component name="CalculatorForward">
+ <implementation.cpp header="subFolder/CalculatorForwardImpl.h"/>
+ </component>
+
+ <component name="CalculatorBack">
+ <implementation.cpp header="subFolder\CalculatorBackImpl.h"/>
+ </component>
+
+</module>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.componentType
new file mode 100644
index 0000000000..6a5a152266
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.componentType
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+ <service name="CalculatorService">
+ <interface.cpp header="otherSubFolder\CalculatorBack.h"/> <!-- Header is relative to the module root -->
+ </service>
+</componentType> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.h
new file mode 100644
index 0000000000..0cacc5916c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorBackImpl.h
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CALCULATORIMPL_H
+#define CALCULATORIMPL_H
+
+#include "Calculator.h"
+
+class CalculatorBackImpl : public Calculator
+{
+public:
+ CalculatorImpl();
+ virtual ~CalculatorImpl();
+ virtual long addBack(long a, long b);
+ virtual long subtractBack(long a, long b);
+
+};
+
+#endif //
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.componentType
new file mode 100644
index 0000000000..9617b22aee
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.componentType
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+ <service name="CalculatorService">
+ <interface.cpp header="otherSubFolder/CalculatorForward.h"/> <!-- Header is relative to the module root -->
+ </service>
+</componentType> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.h
new file mode 100644
index 0000000000..f3b0467002
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CalculatorSlashDirectionTest/subFolder/CalculatorForwardImpl.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CALCULATORIMPL_H
+#define CALCULATORIMPL_H
+
+#include "Calculator.h"
+
+class CalculatorForwardImpl : public Calculator
+{
+public:
+ CalculatorImpl();
+ virtual ~CalculatorImpl();
+ virtual long addForward(long a, long b);
+ virtual long subtractForward(long a, long b);
+
+};
+
+#endif //
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.fragment
new file mode 100644
index 0000000000..29fd03c399
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.fragment
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo.dll" class="CustomerInfoImpl" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.h
new file mode 100644
index 0000000000..d5e1a702c6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfo.h
@@ -0,0 +1,94 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+//char (simple extra type)
+ virtual const char* getCustomerInformationChar(char * p1, const char* customerID ) = 0;
+ virtual const char* getCustomerInfoAChar(char * p1,const char*) = 0;
+ virtual const char* getCustomerInfoBChar(char * p1, char* customerID ) = 0;
+ virtual const char* getCustomerInfoCChar(char * p1, char customerID ) = 0;
+ virtual const char* getCustomerInfoDChar(char * p1,char) = 0;
+ virtual const char* getCustomerInfoEChar(char * p1 , char *) = 0;
+ virtual const char* getCustomerInfoFChar(char * p1, char * p1, char *customerID ) = 0;
+ virtual const char* getCustomerInfoGChar(char * p1, char *, char * p1,signed char *customerID ) = 0;
+ virtual const char* getCustomerInfoHChar(unsigned char *customerID, const char, ) = 0;
+ virtual const char* getCustomerInfoHChar(unsigned char *customerID, const char*) = 0;
+
+//long (duplicate the types)
+ virtual const long* getCustomerInformationLong(const long* customerID, const long* customerID ) = 0;
+ virtual const long* getCustomerInfoALong(const long*,const long*) = 0;
+ virtual const long* getCustomerInfoBLong(long* customerID, long* customerID2 ) = 0;
+ virtual const long* getCustomerInfoCLong(long customerID , long customerID2 ) = 0;
+ virtual const long* getCustomerInfoDLong(long,long) = 0;
+ virtual const long* getCustomerInfoELong(long *, long*) = 0;
+ virtual const long* getCustomerInfoFLong(long *customerID, long* customerID2 ) = 0;
+ virtual const long* getCustomerInfoGLong(signed long *customerID, signed long *customerID2 ) = 0;
+ virtual const long* getCustomerInfoHLong(signed long *customerID, signed long *customerID2 ) = 0;
+
+//int
+ virtual const int* getCustomerInformationInt(char*, const int* customerID ) = 0;
+ virtual const int* getCustomerInfoAInt(char*,const int*) = 0;
+ virtual const int* getCustomerInfoBInt(char*,int* customerID ) = 0;
+ virtual const int* getCustomerInfoCInt(char*,int customerID ) = 0;
+ virtual const int* getCustomerInfoDInt(char*,int) = 0;
+ virtual const int* getCustomerInfoEInt(char*,int *) = 0;
+ virtual const int* getCustomerInfoFInt(char*,int *customerID ) = 0;
+ virtual const int* getCustomerInfoGInt(char*,signed int *customerID ) = 0;
+ virtual const int* getCustomerInfoHInt(char*,unsigned int *customerID ) = 0;
+
+
+//__int64
+ virtual const __int64* getCustomerInformationint64(Diamond&,const __int64* customerID ) = 0;
+ virtual const __int64* getCustomerInfoAint64(Diamond&, const __int64*) = 0;
+ virtual const __int64* getCustomerInfoBint64( Diamond&, __int64* customerID ) = 0;
+ virtual const __int64* getCustomerInfoCint64(Diamond&,__int64 customerID ) = 0;
+ virtual const __int64* getCustomerInfoDint64(Diamond& myDiamond,__int64) = 0;
+ virtual const __int64* getCustomerInfoEint64(Diamond& myDiamond, __int64 *) = 0;
+ virtual const __int64* getCustomerInfoFint64(Diamond& myDiamond, __int64 *customerID ) = 0;
+ virtual const __int64* getCustomerInfoGint64(Diamond& myDiamond, signed __int64 *customerID ) = 0;
+ virtual const __int64* getCustomerInfoHint64(const Diamond& myDiamond, unsigned int64 *customerID ) = 0;
+
+//void
+ virtual const void* getCustomerInformationVoid(float& f, const __int64* customerID ) = 0;
+ virtual void getCustomerInfoAVoid(const float& f, const __int64*) = 0;
+ virtual void getCustomerInfoBVoid( ) = 0;
+ virtual void getCustomerInfoCVoid() = 0;
+ virtual void getCustomerInfoDVoid(void) = 0;
+ virtual char getCustomerInfoEVoid(void) = 0;
+ virtual char getCustomerInfoFVoid() = 0;
+ virtual char getCustomerInfoGVoid( void ) = 0;
+
+//inline
+ virtual inline const char * getCustomerInfoAInline(int,int,int,int, char* customer id) = 0;
+ inline int getCustomerInfoBInline(int*,int* f, int* g, char* customer id) = 0;
+ virtual inline friend const unsigned int * getCustomerInfoCInline(char* customer id) = 0;
+
+//tricky examples
+ int getCustomerInfoTrickyA(const char, const char) = 0;
+ int getCustomerInfoTrickyB(int myInt, int myInt) = 0;
+
+
+
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..d39a3bdadf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.componentType
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="/CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.h
new file mode 100644
index 0000000000..546df093a3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplMultiParamDiffTypesTest/CustomerInfoImpl.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.fragment
new file mode 100644
index 0000000000..fa6d101363
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.fragment
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo" class="CustomerInfoImpl" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.h
new file mode 100644
index 0000000000..d3be176bfd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfo.h
@@ -0,0 +1,89 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+//char
+ virtual const char* getCustomerInformationChar(const char* customerID ) = 0;
+ virtual const char* getCustomerInfoAChar(const char*) = 0;
+ virtual const char* getCustomerInfoBChar(char* customerID ) = 0;
+ virtual const char* getCustomerInfoCChar(char customerID ) = 0;
+ virtual const char* getCustomerInfoDChar(char) = 0;
+ virtual const char* getCustomerInfoEChar(char *) = 0;
+ virtual const char* getCustomerInfoFChar(char *customerID ) = 0;
+ virtual const char* getCustomerInfoGChar(signed char *customerID ) = 0;
+ virtual const char* getCustomerInfoHChar(unsigned char *customerID ) = 0;
+
+//long
+ virtual const long* getCustomerInformationLong(const long* customerID ) = 0;
+ virtual const long* getCustomerInfoALong(const long*) = 0;
+ virtual const long* getCustomerInfoBLong(long* customerID ) = 0;
+ virtual const long* getCustomerInfoCLong(long customerID ) = 0;
+ virtual const long* getCustomerInfoDLong(long) = 0;
+ virtual const long* getCustomerInfoELong(long *) = 0;
+ virtual const long* getCustomerInfoFLong(long *customerID ) = 0;
+ virtual const long* getCustomerInfoGLong(signed long *customerID ) = 0;
+ virtual const long* getCustomerInfoHLong(unsigned long *customerID ) = 0;
+
+//int
+ virtual const int* getCustomerInformationInt(const int* customerID ) = 0;
+ virtual const int* getCustomerInfoAInt(const int*) = 0;
+ virtual const int* getCustomerInfoBInt(int* customerID ) = 0;
+ virtual const int* getCustomerInfoCInt(int customerID ) = 0;
+ virtual const int* getCustomerInfoDInt(int) = 0;
+ virtual const int* getCustomerInfoEInt(int *) = 0;
+ virtual const int* getCustomerInfoFInt(int *customerID ) = 0;
+ virtual const int* getCustomerInfoGInt(signed int *customerID ) = 0;
+ virtual const int* getCustomerInfoHInt(unsigned int *customerID ) = 0;
+
+
+//__int64
+ virtual const __int64* getCustomerInformationint64(const __int64* customerID ) = 0;
+ virtual const __int64* getCustomerInfoAint64(const __int64*) = 0;
+ virtual const __int64* getCustomerInfoBint64(__int64* customerID ) = 0;
+ virtual const __int64* getCustomerInfoCint64(__int64 customerID ) = 0;
+ virtual const __int64* getCustomerInfoDint64(__int64) = 0;
+ virtual const __int64* getCustomerInfoEint64(__int64 *) = 0;
+ virtual const __int64* getCustomerInfoFint64(__int64 *customerID ) = 0;
+ virtual const __int64* getCustomerInfoGint64(signed __int64 *customerID ) = 0;
+ virtual const __int64* getCustomerInfoHint64(unsigned int64 *customerID ) = 0;
+
+//void
+ virtual const void* getCustomerInformationVoid(const __int64* customerID ) = 0;
+ virtual void getCustomerInfoAVoid(const __int64*) = 0;
+ virtual void getCustomerInfoBVoid( ) = 0;
+ virtual void getCustomerInfoCVoid() = 0;
+ virtual void getCustomerInfoDVoid(void) = 0;
+
+//inline
+ virtual inline const char * getCustomerInfoAInline(char* customer id) = 0;
+ inline int getCustomerInfoBInline(char* customer id) = 0;
+ virtual inline friend const unsigned int * getCustomerInfoCInline(char* customer id) = 0;
+
+//tricky examples
+ int getCustomerInfoTrickyA(const char) = 0;
+ int getCustomerInfoTrickyB(int myInt) = 0;
+
+
+
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..d39a3bdadf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.componentType
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="/CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.h
new file mode 100644
index 0000000000..50d37ee4f2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/CustomerInfoImplSingleParamDiffTypesTest/CustomerInfoImpl.h
@@ -0,0 +1,43 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+class CustomerInfoImpl2 : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation2(const char* customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.fragment
new file mode 100644
index 0000000000..491e79f5e4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.fragment
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo" class="CustomerInfoImpl2" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.h
new file mode 100644
index 0000000000..7bd355b3ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfo.h
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+ virtual const char* getCustomerInformation(const char* customerID) = 0;
+
+};
+
+
+class CustomerInfoSecond
+{
+public:
+ virtual const char* getCustomerInformationSecond(const char* customerID) = 0;
+
+};
+
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..179af71dca
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.componentType
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="/CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.h
new file mode 100644
index 0000000000..85e96bb348
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/CustomerInfoImpl.h
@@ -0,0 +1,46 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+// Class definition for the implementation
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+class CustomerInfoImpl2 : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation2(const char* customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValue.h
new file mode 100644
index 0000000000..a65b1f944c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValue.h
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// MyValue.h: interface for the MyValueImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+class MyValue
+{
+public:
+ virtual float getMyValue(const char* customerID) = 0;
+ virtual float getMyValueS(const string& customerID) = 0;
+ virtual string getCustname(string& customerID) = 0;
+ virtual const string& getCustnamecs(string customerID) = 0;
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.componentType
new file mode 100644
index 0000000000..df0d97a438
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.componentType
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp class="MyValue" header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="customerInfo">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.hpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.hpp
new file mode 100644
index 0000000000..f7a8171a65
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl.hpp
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+
+class MyValueImpl : public MyValue
+{
+public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..5c8293b51e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/MyValueImpl_stockQuote_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_stockQuote_Proxy_h
+#define MyValueImpl_stockQuote_Proxy_h
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_stockQuote_Proxy : public StockQuoteService
+{
+public:
+ MyValueImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_stockQuote_Proxy();
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes(commonj::sdo::DataObjectPtr);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_stockQuote_Proxy_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/StockQuoteService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/StockQuoteService.h
new file mode 100644
index 0000000000..d96115fb3f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/StockQuoteService.h
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef StockQuoteService_h
+#define StockQuoteService_h
+#include <string>
+#include "commonj/sdo/sdo.h"
+using std::string;
+class StockQuoteService
+{
+public:
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes(commonj::sdo::DataObjectPtr request) = 0;
+
+};
+
+#endif // StockQuoteService_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/sca.module
new file mode 100644
index 0000000000..565f4a74ec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModule/sca.module
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--
+ <component name="Calculator">
+ <implementation.cpp dll="debug/Calculator.dll" header="CalculatorImpl.h"/>
+ </component>
+ -->
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h"/>
+ <binding.ws port="http://swanandmokashi.com#wsdl.endpoint(StockQuotes/StockQuotesSoap)"/>
+ </externalService>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.fragment
new file mode 100644
index 0000000000..5666c51a41
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.fragment
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo" class="Other::CustomerInfoImpl" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.h
new file mode 100644
index 0000000000..e41f9e8287
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfo.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+ virtual const char* getCustomerInformation(const char* customerID) = 0;
+
+};
+
+
+class CustomerInfoSecond
+{
+public:
+ virtual const char* getCustomerInformationSecond(const char* customerID) = 0;
+
+};
+
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..179af71dca
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.componentType
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="/CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.h
new file mode 100644
index 0000000000..b1360c5994
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/CustomerInfoImpl.h
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+/*
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+*/
+namespace Other {
+ class CustomerInfoImpl : public CustomerInfo
+ {
+ public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformationOther(const char* customerID);
+
+ };
+}
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValue.h
new file mode 100644
index 0000000000..8b921bc2bf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValue.h
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// MyValue.h: interface for the MyValueImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+class MyValue
+{
+public:
+ virtual float getMyValue(const char* customerID) = 0;
+ virtual float getMyValueS(const string& customerID) = 0;
+ virtual string getCustname(string& customerID) = 0;
+ virtual const string& getCustnamecs(string customerID) = 0;
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.componentType
new file mode 100644
index 0000000000..df0d97a438
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.componentType
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp class="MyValue" header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="customerInfo">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.hpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.hpp
new file mode 100644
index 0000000000..f7a8171a65
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl.hpp
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+
+class MyValueImpl : public MyValue
+{
+public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..5c8293b51e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/MyValueImpl_stockQuote_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_stockQuote_Proxy_h
+#define MyValueImpl_stockQuote_Proxy_h
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_stockQuote_Proxy : public StockQuoteService
+{
+public:
+ MyValueImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_stockQuote_Proxy();
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes(commonj::sdo::DataObjectPtr);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_stockQuote_Proxy_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/StockQuoteService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/StockQuoteService.h
new file mode 100644
index 0000000000..919b514e1a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/StockQuoteService.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef StockQuoteService_h
+#define StockQuoteService_h
+#include <string>
+#include "commonj/sdo/sdo.h"
+using std::string;
+class StockQuoteService
+{
+public:
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes(commonj::sdo::DataObjectPtr request) = 0;
+
+};
+
+#endif // StockQuoteService_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/sca.module
new file mode 100644
index 0000000000..565f4a74ec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespace/sca.module
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--
+ <component name="Calculator">
+ <implementation.cpp dll="debug/Calculator.dll" header="CalculatorImpl.h"/>
+ </component>
+ -->
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h"/>
+ <binding.ws port="http://swanandmokashi.com#wsdl.endpoint(StockQuotes/StockQuotesSoap)"/>
+ </externalService>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValue.h
new file mode 100644
index 0000000000..73af9ae562
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValue.h
@@ -0,0 +1,72 @@
+/*
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// MyValue.h: interface for the MyValueImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+
+class MyValue
+{
+ public:
+ virtual float getMyValueOther(const char* customerID) = 0;
+ virtual float getMyValueSOther(const string& customerID) = 0;
+ virtual string getCustnameOther(string& customerID) = 0;
+ virtual const string& getCustnamecsOther(string customerID) = 0;
+}
+
+#endif
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// MyValue.h: interface for the MyValueImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+
+class MyValue
+{
+ public:
+ virtual float getMyValueOther(const char* customerID) = 0;
+ virtual float getMyValueSOther(const string& customerID) = 0;
+ virtual string getCustnameOther(string& customerID) = 0;
+ virtual const string& getCustnamecsOther(string customerID) = 0;
+}
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType
new file mode 100644
index 0000000000..ff4ff50e9b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="ASCII"?>
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
+
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp
new file mode 100644
index 0000000000..77950477ce
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp
@@ -0,0 +1,86 @@
+/*
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+namespace myvaluecorp
+{
+ namespace implns
+ {
+
+ class MyValueImpl : public MyValue
+ {
+ public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+ };
+ }
+}
+#endif
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+namespace myvaluecorp
+{
+ namespace implns
+ {
+
+ class MyValueImpl : public MyValue
+ {
+ public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+ };
+ }
+}
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/sca.module
new file mode 100644
index 0000000000..ab49065c21
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/sca.module
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="ASCII"?>
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValue.h
new file mode 100644
index 0000000000..503f771bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValue.h
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// MyValue.h: interface for the MyValueImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+
+namespace Other {
+ class MyValue
+ {
+ public:
+ virtual float getMyValueOther(const char* customerID) = 0;
+ virtual float getMyValueSOther(const string& customerID) = 0;
+ virtual string getCustnameOther(string& customerID) = 0;
+ virtual const string& getCustnamecsOther(string customerID) = 0;
+ }
+}
+
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.componentType
new file mode 100644
index 0000000000..8673c813a6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.componentType
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp class="Other::MyValue" header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.hpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.hpp
new file mode 100644
index 0000000000..f7a8171a65
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/MyValueImpl.hpp
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+
+class MyValueImpl : public MyValue
+{
+public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/sca.module
new file mode 100644
index 0000000000..6572621f1d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespace/sca.module
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValue.h
new file mode 100644
index 0000000000..ea8ebbb792
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValue.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// MyValue.h: interface for the MyValueImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+
+namespace Other {
+ class MyValue
+ {
+ public:
+ virtual float getMyValueOther(const char* customerID) = 0;
+ virtual float getMyValueSOther(const string& customerID) = 0;
+ virtual string getCustnameOther(string& customerID) = 0;
+ virtual const string& getCustnamecsOther(string customerID) = 0;
+ }
+}
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType
new file mode 100644
index 0000000000..c8d68fba5a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.componentType
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp
new file mode 100644
index 0000000000..f7a8171a65
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/MyValueImpl.hpp
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+
+class MyValueImpl : public MyValue
+{
+public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/sca.module
new file mode 100644
index 0000000000..6572621f1d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/sca.module
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/CustomerInfo.fragmentX b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/CustomerInfo.fragmentX
new file mode 100644
index 0000000000..10c1805244
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/CustomerInfo.fragmentX
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo" class="CustomerInfoImpl2" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/sca.moduleX b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/sca.moduleX
new file mode 100644
index 0000000000..3eea80439f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleMissingScaModule/sca.moduleX
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--
+ <component name="Calculator">
+ <implementation.cpp dll="debug/Calculator.dll" header="CalculatorImpl.h"/>
+ </component>
+ -->
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h"/>
+ <binding.ws port="http://swanandmokashi.com#wsdl.endpoint(StockQuotes/StockQuotesSoap)"/>
+ </externalService>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.fragment
new file mode 100644
index 0000000000..491e79f5e4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.fragment
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo" class="CustomerInfoImpl2" header="CustomerInfoImpl.h"></implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.h
new file mode 100644
index 0000000000..7bd355b3ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfo.h
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+ virtual const char* getCustomerInformation(const char* customerID) = 0;
+
+};
+
+
+class CustomerInfoSecond
+{
+public:
+ virtual const char* getCustomerInformationSecond(const char* customerID) = 0;
+
+};
+
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..179af71dca
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.componentType
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="/CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.h
new file mode 100644
index 0000000000..e247a9b0bb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/CustomerInfoImpl.h
@@ -0,0 +1,45 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// Class definition for the implementation
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+class CustomerInfoImpl2 : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValue.h
new file mode 100644
index 0000000000..a65b1f944c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValue.h
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// MyValue.h: interface for the MyValueImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef MyValue_h
+#define MyValue_h
+#include <string>
+using std::string;
+class MyValue
+{
+public:
+ virtual float getMyValue(const char* customerID) = 0;
+ virtual float getMyValueS(const string& customerID) = 0;
+ virtual string getCustname(string& customerID) = 0;
+ virtual const string& getCustnamecs(string customerID) = 0;
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.componentType
new file mode 100644
index 0000000000..df0d97a438
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.componentType
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9">
+
+ <service name="MyValueService">
+ <interface.cpp class="MyValue" header="MyValue.h">
+ </interface.cpp>
+ </service>
+
+ <reference name="customerInfo">
+ <interface.cpp header="CustomerInfo.h">
+ </interface.cpp>
+ </reference>
+
+ <reference name="stockQuote">
+ <interface.cpp header="StockQuoteService.h">
+ </interface.cpp>
+ </reference>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.hpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.hpp
new file mode 100644
index 0000000000..f7a8171a65
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl.hpp
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef MyValueImpl_h
+#define MyValueImpl_h
+
+#include "MyValue.h"
+
+
+
+class MyValueImpl : public MyValue
+{
+public:
+ MyValueImpl();
+ virtual ~MyValueImpl();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname(string& customerID);
+ virtual const string& getCustnamecs(string customerID);
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..5c8293b51e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/MyValueImpl_stockQuote_Proxy.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_stockQuote_Proxy_h
+#define MyValueImpl_stockQuote_Proxy_h
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_stockQuote_Proxy : public StockQuoteService
+{
+public:
+ MyValueImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_stockQuote_Proxy();
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes(commonj::sdo::DataObjectPtr);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_stockQuote_Proxy_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/StockQuoteService.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/StockQuoteService.h
new file mode 100644
index 0000000000..919b514e1a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/StockQuoteService.h
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+//
+//////////////////////////////////////////////////////////////////////
+
+#ifndef StockQuoteService_h
+#define StockQuoteService_h
+#include <string>
+#include "commonj/sdo/sdo.h"
+using std::string;
+class StockQuoteService
+{
+public:
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes(commonj::sdo::DataObjectPtr request) = 0;
+
+};
+
+#endif // StockQuoteService_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/sca.module b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/sca.module
new file mode 100644
index 0000000000..565f4a74ec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/MyValueServiceModuleTwoClasses/sca.module
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<module xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="MyValueServiceModule">
+
+ <!-- Expose as a web service -->
+ <entryPoint name="MyValueServiceExport" multiplicity="1..1">
+ <interface.wsdl interface="" callbackInterface=""></interface.wsdl>
+ <binding.ws port="mvs:MyValueServiceSOAP"></binding.ws>
+ <reference>MyValueServiceComponent</reference>
+ </entryPoint>
+
+ <component name="MyValueServiceComponent">
+ <implementation.cpp dll="MyValue" header="MyValueImpl.hpp"></implementation.cpp>
+ <properties>
+ </properties>
+ <references>
+ <customerInfo>CustomerInfoComponent</customerInfo>
+ <stockQuote>StockQuoteService</stockQuote>
+ </references>
+ </component>
+
+ <!--
+ <component name="Calculator">
+ <implementation.cpp dll="debug/Calculator.dll" header="CalculatorImpl.h"/>
+ </component>
+ -->
+
+ <externalService name="StockQuoteService">
+ <interface.cpp header="StockQuoteService.h"/>
+ <binding.ws port="http://swanandmokashi.com#wsdl.endpoint(StockQuotes/StockQuotesSoap)"/>
+ </externalService>
+
+ <!--wire>
+ <source.uri>MyValueServiceComponent/customerInfo</source.uri>
+ <target.uri>CustomerInfoComponent</target.uri>
+ </wire-->
+
+</module>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.fragment b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.fragment
new file mode 100644
index 0000000000..687162ec2a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.fragment
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<moduleFragment xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:v="http://www.osoa.org/xmlns/sca/values/0.9"
+ xmlns:mvs="http://www.myvalue.org/MyValueService/"
+ name="CustomerInfoComponent">
+
+
+ <component name="CustomerInfoComponent">
+ <implementation.cpp dll="CustomerInfo" header="CustomerInfoImpl.h">
+ </implementation.cpp>
+ <properties>
+ <v:Fred>x</v:Fred>
+ <v:Joe>23</v:Joe>
+ <Joe>42</Joe>
+ </properties>
+ <references>
+ </references>
+ </component>
+
+</moduleFragment>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.h
new file mode 100644
index 0000000000..b944d161eb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfo.h
@@ -0,0 +1,40 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef CustomerInfo_h
+#define CustomerInfo_h
+
+class CustomerInfo
+{
+public:
+ virtual const char* getCustomerInformationCharPublic(char * p1, const char* customerID ) = 0;
+ virtual const char* getCustomerInfoACharPublic(char * p1,const char*) = 0;
+ virtual const char* getCustomerInfoBCharPublic(char * p1, char* customerID ) = 0;
+
+private:
+ virtual const char* getCustomerInformationCharPrivate(char * p1, const char* customerID ) = 0;
+ virtual const char* getCustomerInfoACharPrivate(char * p1,const char*) = 0;
+ virtual const char* getCustomerInfoBCharPrivate(char * p1, char* customerID ) = 0;
+
+protected:
+ virtual const char* getCustomerInformationCharProtected(char * p1, const char* customerID ) = 0;
+ virtual const char* getCustomerInfoACharProtected(char * p1,const char*) = 0;
+ virtual const char* getCustomerInfoBCharProtected(char * p1, char* customerID ) = 0;
+
+
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.componentType b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.componentType
new file mode 100644
index 0000000000..179af71dca
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.componentType
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+<componentType xmlns="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <service name="CustomerInfoService">
+ <interface.cpp header="/CustomerInfo.h">
+ </interface.cpp>
+ </service>
+
+ <property name="Fred" type="xs:string"/>
+ <property name="Joe" type="xs:integer" many="true"/>
+
+</componentType>
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.h
new file mode 100644
index 0000000000..87cac61085
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testinput/modules/SimplePublicPrivateProtectedTest/CustomerInfoImpl.h
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+// Class definition for the implementation
+
+#ifndef CustomerInfoImpl_h
+#define CustomerInfoImpl_h
+
+#include "CustomerInfo.h"
+
+
+
+class CustomerInfoImpl : public CustomerInfo
+{
+public:
+ CustomerInfoImpl();
+ virtual ~CustomerInfoImpl();
+ virtual const char* getCustomerInformation(const char* customerID);
+
+};
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.cpp
new file mode 100644
index 0000000000..3b04e26b05
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.cpp
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorImpl_CalculatorService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorImpl_CalculatorService_Proxy* CalculatorImpl_CalculatorService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CalculatorImpl_CalculatorService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CalculatorImpl_CalculatorService_Proxy_Destructor(void* proxy)
+ {
+ delete (CalculatorImpl_CalculatorService_Proxy*)proxy;
+ }
+}
+
+CalculatorImpl_CalculatorService_Proxy::CalculatorImpl_CalculatorService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CalculatorImpl_CalculatorService_Proxy::~CalculatorImpl_CalculatorService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+long CalculatorImpl_CalculatorService_Proxy::subtract( long arg0, long arg1)
+{
+ Operation operation("subtract");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ long ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.h
new file mode 100644
index 0000000000..ad8f588ede
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorImpl_CalculatorService_Proxy_h
+#define CalculatorImpl_CalculatorService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "Calculator.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CalculatorImpl_CalculatorService_Proxy : public Calculator
+{
+public:
+ CalculatorImpl_CalculatorService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CalculatorImpl_CalculatorService_Proxy();
+ virtual long subtract( long a, long b);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CalculatorImpl_CalculatorService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.cpp
new file mode 100644
index 0000000000..787314f817
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorImpl_CalculatorService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorImpl_CalculatorService_Wrapper* CalculatorImpl_CalculatorService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CalculatorImpl_CalculatorService_Wrapper(target);
+ }
+}
+
+CalculatorImpl_CalculatorService_Wrapper::CalculatorImpl_CalculatorService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CalculatorImpl*)getImplementation();
+}
+
+CalculatorImpl_CalculatorService_Wrapper::~CalculatorImpl_CalculatorService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CalculatorImpl_CalculatorService_Wrapper::newImplementation()
+{
+ return new CalculatorImpl;
+}
+
+void CalculatorImpl_CalculatorService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CalculatorImpl_CalculatorService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "subtract")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ *(long*)operation.getReturnValue() = impl->subtract(p0, p1);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.h
new file mode 100644
index 0000000000..c881576ca2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorModuleAndComponent/expected_output/CalculatorImpl_CalculatorService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorImpl_CalculatorService_Wrapper_h
+#define CalculatorImpl_CalculatorService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CalculatorImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CalculatorImpl_CalculatorService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CalculatorImpl_CalculatorService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CalculatorImpl_CalculatorService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CalculatorImpl* impl;
+};
+
+#endif // CalculatorImpl_CalculatorService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.cpp
new file mode 100644
index 0000000000..aeb9642130
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorBackImpl_CalculatorService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorBackImpl_CalculatorService_Proxy* CalculatorBackImpl_CalculatorService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CalculatorBackImpl_CalculatorService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CalculatorBackImpl_CalculatorService_Proxy_Destructor(void* proxy)
+ {
+ delete (CalculatorBackImpl_CalculatorService_Proxy*)proxy;
+ }
+}
+
+CalculatorBackImpl_CalculatorService_Proxy::CalculatorBackImpl_CalculatorService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CalculatorBackImpl_CalculatorService_Proxy::~CalculatorBackImpl_CalculatorService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+long CalculatorBackImpl_CalculatorService_Proxy::subtractBack( long arg0, long arg1)
+{
+ Operation operation("subtractBack");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ long ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+long CalculatorBackImpl_CalculatorService_Proxy::addBack( long arg0, long arg1)
+{
+ Operation operation("addBack");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ long ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.h
new file mode 100644
index 0000000000..4a263154e0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Proxy.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorBackImpl_CalculatorService_Proxy_h
+#define CalculatorBackImpl_CalculatorService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "otherSubFolder/CalculatorBack.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CalculatorBackImpl_CalculatorService_Proxy : public CalculatorBack
+{
+public:
+ CalculatorBackImpl_CalculatorService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CalculatorBackImpl_CalculatorService_Proxy();
+ virtual long subtractBack( long a, long b);
+ virtual long addBack( long a, long b);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CalculatorBackImpl_CalculatorService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.cpp
new file mode 100644
index 0000000000..6f71734763
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorBackImpl_CalculatorService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorBackImpl_CalculatorService_Wrapper* CalculatorBackImpl_CalculatorService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CalculatorBackImpl_CalculatorService_Wrapper(target);
+ }
+}
+
+CalculatorBackImpl_CalculatorService_Wrapper::CalculatorBackImpl_CalculatorService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CalculatorBackImpl*)getImplementation();
+}
+
+CalculatorBackImpl_CalculatorService_Wrapper::~CalculatorBackImpl_CalculatorService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CalculatorBackImpl_CalculatorService_Wrapper::newImplementation()
+{
+ return new CalculatorBackImpl;
+}
+
+void CalculatorBackImpl_CalculatorService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CalculatorBackImpl_CalculatorService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "subtractBack")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ *(long*)operation.getReturnValue() = impl->subtractBack(p0, p1);
+ return;
+ }
+ if (operationName == "addBack")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ *(long*)operation.getReturnValue() = impl->addBack(p0, p1);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.h
new file mode 100644
index 0000000000..1dbfdd58c1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorBackImpl_CalculatorService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorBackImpl_CalculatorService_Wrapper_h
+#define CalculatorBackImpl_CalculatorService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "subFolder/CalculatorBackImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CalculatorBackImpl_CalculatorService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CalculatorBackImpl_CalculatorService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CalculatorBackImpl_CalculatorService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CalculatorBackImpl* impl;
+};
+
+#endif // CalculatorBackImpl_CalculatorService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.cpp
new file mode 100644
index 0000000000..33b66fbc28
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.cpp
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorForwardImpl_CalculatorService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorForwardImpl_CalculatorService_Proxy* CalculatorForwardImpl_CalculatorService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CalculatorForwardImpl_CalculatorService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CalculatorForwardImpl_CalculatorService_Proxy_Destructor(void* proxy)
+ {
+ delete (CalculatorForwardImpl_CalculatorService_Proxy*)proxy;
+ }
+}
+
+CalculatorForwardImpl_CalculatorService_Proxy::CalculatorForwardImpl_CalculatorService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CalculatorForwardImpl_CalculatorService_Proxy::~CalculatorForwardImpl_CalculatorService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+long CalculatorForwardImpl_CalculatorService_Proxy::subtractForward( long arg0, long arg1)
+{
+ Operation operation("subtractForward");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ long ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+long CalculatorForwardImpl_CalculatorService_Proxy::addForward( long arg0, long arg1)
+{
+ Operation operation("addForward");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ long ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.h
new file mode 100644
index 0000000000..9b87ee9d7e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Proxy.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorForwardImpl_CalculatorService_Proxy_h
+#define CalculatorForwardImpl_CalculatorService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "otherSubFolder/CalculatorForward.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CalculatorForwardImpl_CalculatorService_Proxy : public CalculatorForward
+{
+public:
+ CalculatorForwardImpl_CalculatorService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CalculatorForwardImpl_CalculatorService_Proxy();
+ virtual long subtractForward( long a, long b);
+ virtual long addForward( long a, long b);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CalculatorForwardImpl_CalculatorService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.cpp
new file mode 100644
index 0000000000..ce20b11941
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.cpp
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CalculatorForwardImpl_CalculatorService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CalculatorForwardImpl_CalculatorService_Wrapper* CalculatorForwardImpl_CalculatorService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CalculatorForwardImpl_CalculatorService_Wrapper(target);
+ }
+}
+
+CalculatorForwardImpl_CalculatorService_Wrapper::CalculatorForwardImpl_CalculatorService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CalculatorForwardImpl*)getImplementation();
+}
+
+CalculatorForwardImpl_CalculatorService_Wrapper::~CalculatorForwardImpl_CalculatorService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CalculatorForwardImpl_CalculatorService_Wrapper::newImplementation()
+{
+ return new CalculatorForwardImpl;
+}
+
+void CalculatorForwardImpl_CalculatorService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CalculatorForwardImpl_CalculatorService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "subtractForward")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ *(long*)operation.getReturnValue() = impl->subtractForward(p0, p1);
+ return;
+ }
+ if (operationName == "addForward")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ *(long*)operation.getReturnValue() = impl->addForward(p0, p1);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.h
new file mode 100644
index 0000000000..bb035ccb2b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CalculatorSlashDirectionTest/expected_output/CalculatorForwardImpl_CalculatorService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CalculatorForwardImpl_CalculatorService_Wrapper_h
+#define CalculatorForwardImpl_CalculatorService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "subFolder/CalculatorForwardImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CalculatorForwardImpl_CalculatorService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CalculatorForwardImpl_CalculatorService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CalculatorForwardImpl_CalculatorService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CalculatorForwardImpl* impl;
+};
+
+#endif // CalculatorForwardImpl_CalculatorService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
new file mode 100644
index 0000000000..9f09ba8d6f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
@@ -0,0 +1,593 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Proxy* CustomerInfoImpl_CustomerInfoService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CustomerInfoImpl_CustomerInfoService_Proxy_Destructor(void* proxy)
+ {
+ delete (CustomerInfoImpl_CustomerInfoService_Proxy*)proxy;
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::CustomerInfoImpl_CustomerInfoService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::~CustomerInfoImpl_CustomerInfoService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationChar( char* arg0, const char* arg1)
+{
+ Operation operation("getCustomerInformationChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAChar( char* arg0, const char* arg1)
+{
+ Operation operation("getCustomerInfoAChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBChar( char* arg0, char* arg1)
+{
+ Operation operation("getCustomerInfoBChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCChar( char* arg0, char arg1)
+{
+ Operation operation("getCustomerInfoCChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDChar( char* arg0, char arg1)
+{
+ Operation operation("getCustomerInfoDChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoEChar( char* arg0, char* arg1)
+{
+ Operation operation("getCustomerInfoEChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFChar( char* arg0, char* arg1, char* arg2)
+{
+ Operation operation("getCustomerInfoFChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ operation.addParameter(&arg2);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGChar( char* arg0, char* arg1, char* arg2, signed char* arg3)
+{
+ Operation operation("getCustomerInfoGChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ operation.addParameter(&arg2);
+ operation.addParameter(&arg3);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHChar( unsigned char* arg0, const char arg1)
+{
+ Operation operation("getCustomerInfoHChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHChar( unsigned char* arg0, const char* arg1)
+{
+ Operation operation("getCustomerInfoHChar");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationLong(const long* arg0, const long* arg1)
+{
+ Operation operation("getCustomerInformationLong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoALong(const long* arg0, const long* arg1)
+{
+ Operation operation("getCustomerInfoALong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBLong( long* arg0, long* arg1)
+{
+ Operation operation("getCustomerInfoBLong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCLong( long arg0, long arg1)
+{
+ Operation operation("getCustomerInfoCLong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDLong( long arg0, long arg1)
+{
+ Operation operation("getCustomerInfoDLong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoELong( long* arg0, long* arg1)
+{
+ Operation operation("getCustomerInfoELong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFLong( long* arg0, long* arg1)
+{
+ Operation operation("getCustomerInfoFLong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGLong( signed long* arg0, signed long* arg1)
+{
+ Operation operation("getCustomerInfoGLong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHLong( signed long* arg0, signed long* arg1)
+{
+ Operation operation("getCustomerInfoHLong");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationInt( char* arg0, const int* arg1)
+{
+ Operation operation("getCustomerInformationInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAInt( char* arg0, const int* arg1)
+{
+ Operation operation("getCustomerInfoAInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBInt( char* arg0, int* arg1)
+{
+ Operation operation("getCustomerInfoBInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCInt( char* arg0, int arg1)
+{
+ Operation operation("getCustomerInfoCInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDInt( char* arg0, int arg1)
+{
+ Operation operation("getCustomerInfoDInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoEInt( char* arg0, int* arg1)
+{
+ Operation operation("getCustomerInfoEInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFInt( char* arg0, int* arg1)
+{
+ Operation operation("getCustomerInfoFInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGInt( char* arg0, signed int* arg1)
+{
+ Operation operation("getCustomerInfoGInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHInt( char* arg0, unsigned int* arg1)
+{
+ Operation operation("getCustomerInfoHInt");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationint64( Diamond& arg0, const __int64* arg1)
+{
+ Operation operation("getCustomerInformationint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAint64( Diamond& arg0, const __int64* arg1)
+{
+ Operation operation("getCustomerInfoAint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBint64( Diamond& arg0, __int64* arg1)
+{
+ Operation operation("getCustomerInfoBint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCint64( Diamond& arg0, __int64 arg1)
+{
+ Operation operation("getCustomerInfoCint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDint64( Diamond& arg0, __int64 arg1)
+{
+ Operation operation("getCustomerInfoDint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoEint64( Diamond& arg0, __int64* arg1)
+{
+ Operation operation("getCustomerInfoEint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFint64( Diamond& arg0, __int64* arg1)
+{
+ Operation operation("getCustomerInfoFint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGint64( Diamond& arg0, signed __int64* arg1)
+{
+ Operation operation("getCustomerInfoGint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHint64(const Diamond& arg0, unsigned int64* arg1)
+{
+ Operation operation("getCustomerInfoHint64");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const void* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationVoid( float& arg0, const __int64* arg1)
+{
+ Operation operation("getCustomerInformationVoid");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const void* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAVoid(const float& arg0, const __int64* arg1)
+{
+ Operation operation("getCustomerInfoAVoid");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ target->invoke(operation);
+ return;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBVoid()
+{
+ Operation operation("getCustomerInfoBVoid");
+ target->invoke(operation);
+ return;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCVoid()
+{
+ Operation operation("getCustomerInfoCVoid");
+ target->invoke(operation);
+ return;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDVoid()
+{
+ Operation operation("getCustomerInfoDVoid");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return;
+}
+
+char CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoEVoid()
+{
+ Operation operation("getCustomerInfoEVoid");
+ operation.addParameter(&arg0);
+ char ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+char CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFVoid()
+{
+ Operation operation("getCustomerInfoFVoid");
+ char ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+char CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGVoid()
+{
+ Operation operation("getCustomerInfoGVoid");
+ operation.addParameter(&arg0);
+ char ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAInline( int arg0, int arg1, int arg2, int arg3, char* customer arg4)
+{
+ Operation operation("getCustomerInfoAInline");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ operation.addParameter(&arg2);
+ operation.addParameter(&arg3);
+ operation.addParameter(&arg4);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+int CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBInline( int* arg0, int* arg1, int* arg2, char* customer arg3)
+{
+ Operation operation("getCustomerInfoBInline");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ operation.addParameter(&arg2);
+ operation.addParameter(&arg3);
+ int ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+friend const unsigned int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCInline( char* customer arg0)
+{
+ Operation operation("getCustomerInfoCInline");
+ operation.addParameter(&arg0);
+ friend const unsigned int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+int CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoTrickyA(const char arg0, const char arg1)
+{
+ Operation operation("getCustomerInfoTrickyA");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ int ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+int CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoTrickyB( int arg0, int arg1)
+{
+ Operation operation("getCustomerInfoTrickyB");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ int ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
new file mode 100644
index 0000000000..baa55ac5b8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "/CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformationChar( char* p1, const char* customerID);
+ virtual const char* getCustomerInfoAChar( char* p1, const char* );
+ virtual const char* getCustomerInfoBChar( char* p1, char* customerID);
+ virtual const char* getCustomerInfoCChar( char* p1, char customerID);
+ virtual const char* getCustomerInfoDChar( char* p1, char );
+ virtual const char* getCustomerInfoEChar( char* p1, char* );
+ virtual const char* getCustomerInfoFChar( char* p1, char* p1, char* customerID);
+ virtual const char* getCustomerInfoGChar( char* p1, char* , char* p1, signed char* customerID);
+ virtual const char* getCustomerInfoHChar( unsigned char* customerID, const char );
+ virtual const char* getCustomerInfoHChar( unsigned char* customerID, const char* );
+ virtual const long* getCustomerInformationLong(const long* customerID, const long* customerID);
+ virtual const long* getCustomerInfoALong(const long* , const long* );
+ virtual const long* getCustomerInfoBLong( long* customerID, long* customerID2);
+ virtual const long* getCustomerInfoCLong( long customerID, long customerID2);
+ virtual const long* getCustomerInfoDLong( long , long );
+ virtual const long* getCustomerInfoELong( long* , long* );
+ virtual const long* getCustomerInfoFLong( long* customerID, long* customerID2);
+ virtual const long* getCustomerInfoGLong( signed long* customerID, signed long* customerID2);
+ virtual const long* getCustomerInfoHLong( signed long* customerID, signed long* customerID2);
+ virtual const int* getCustomerInformationInt( char* , const int* customerID);
+ virtual const int* getCustomerInfoAInt( char* , const int* );
+ virtual const int* getCustomerInfoBInt( char* , int* customerID);
+ virtual const int* getCustomerInfoCInt( char* , int customerID);
+ virtual const int* getCustomerInfoDInt( char* , int );
+ virtual const int* getCustomerInfoEInt( char* , int* );
+ virtual const int* getCustomerInfoFInt( char* , int* customerID);
+ virtual const int* getCustomerInfoGInt( char* , signed int* customerID);
+ virtual const int* getCustomerInfoHInt( char* , unsigned int* customerID);
+ virtual const __int64* getCustomerInformationint64( Diamond& , const __int64* customerID);
+ virtual const __int64* getCustomerInfoAint64( Diamond& , const __int64* );
+ virtual const __int64* getCustomerInfoBint64( Diamond& , __int64* customerID);
+ virtual const __int64* getCustomerInfoCint64( Diamond& , __int64 customerID);
+ virtual const __int64* getCustomerInfoDint64( Diamond& myDiamond, __int64 );
+ virtual const __int64* getCustomerInfoEint64( Diamond& myDiamond, __int64* );
+ virtual const __int64* getCustomerInfoFint64( Diamond& myDiamond, __int64* customerID);
+ virtual const __int64* getCustomerInfoGint64( Diamond& myDiamond, signed __int64* customerID);
+ virtual const __int64* getCustomerInfoHint64(const Diamond& myDiamond, unsigned int64* customerID);
+ virtual const void* getCustomerInformationVoid( float& f, const __int64* customerID);
+ virtual void getCustomerInfoAVoid(const float& f, const __int64* );
+ virtual void getCustomerInfoBVoid();
+ virtual void getCustomerInfoCVoid();
+ virtual void getCustomerInfoDVoid( void );
+ virtual char getCustomerInfoEVoid( void );
+ virtual char getCustomerInfoFVoid();
+ virtual char getCustomerInfoGVoid( void );
+ virtual const char* getCustomerInfoAInline( int , int , int , int , char* customer id);
+ virtual int getCustomerInfoBInline( int* , int* f, int* g, char* customer id);
+ virtual friend const unsigned int* getCustomerInfoCInline( char* customer id);
+ virtual int getCustomerInfoTrickyA(const char , const char );
+ virtual int getCustomerInfoTrickyB( int myInt, int myInt);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
new file mode 100644
index 0000000000..25d73c326c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
@@ -0,0 +1,411 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Wrapper* CustomerInfoImpl_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::CustomerInfoImpl_CustomerInfoService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl*)getImplementation();
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::~CustomerInfoImpl_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformationChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const char* p1 = *(const char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformationChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoAChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const char* p1 = *(const char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoAChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoBChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char* p1 = *( char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoBChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoCChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char& p1 = *( char*)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoCChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoDChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char& p1 = *( char*)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoDChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoEChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char* p1 = *( char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoEChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoFChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char* p1 = *( char**)operation.getParameterValue(1);
+ char* p2 = *( char**)operation.getParameterValue(2);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoFChar(p0, p1, p2);
+ return;
+ }
+ if (operationName == "getCustomerInfoGChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char* p1 = *( char**)operation.getParameterValue(1);
+ char* p2 = *( char**)operation.getParameterValue(2);
+ signed char* p3 = *( signed char**)operation.getParameterValue(3);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoGChar(p0, p1, p2, p3);
+ return;
+ }
+ if (operationName == "getCustomerInfoHChar")
+ {
+ unsigned char* p0 = *( unsigned char**)operation.getParameterValue(0);
+ const char& p1 = *(const char*)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoHChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoHChar")
+ {
+ unsigned char* p0 = *( unsigned char**)operation.getParameterValue(0);
+ const char* p1 = *(const char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoHChar(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInformationLong")
+ {
+ const long* p0 = *(const long**)operation.getParameterValue(0);
+ const long* p1 = *(const long**)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInformationLong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoALong")
+ {
+ const long* p0 = *(const long**)operation.getParameterValue(0);
+ const long* p1 = *(const long**)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoALong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoBLong")
+ {
+ long* p0 = *( long**)operation.getParameterValue(0);
+ long* p1 = *( long**)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoBLong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoCLong")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoCLong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoDLong")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ long& p1 = *( long*)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoDLong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoELong")
+ {
+ long* p0 = *( long**)operation.getParameterValue(0);
+ long* p1 = *( long**)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoELong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoFLong")
+ {
+ long* p0 = *( long**)operation.getParameterValue(0);
+ long* p1 = *( long**)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoFLong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoGLong")
+ {
+ signed long* p0 = *( signed long**)operation.getParameterValue(0);
+ signed long* p1 = *( signed long**)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoGLong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoHLong")
+ {
+ signed long* p0 = *( signed long**)operation.getParameterValue(0);
+ signed long* p1 = *( signed long**)operation.getParameterValue(1);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoHLong(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInformationInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const int* p1 = *(const int**)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInformationInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoAInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const int* p1 = *(const int**)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoAInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoBInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ int* p1 = *( int**)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoBInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoCInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ int& p1 = *( int*)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoCInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoDInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ int& p1 = *( int*)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoDInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoEInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ int* p1 = *( int**)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoEInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoFInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ int* p1 = *( int**)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoFInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoGInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ signed int* p1 = *( signed int**)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoGInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoHInt")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ unsigned int* p1 = *( unsigned int**)operation.getParameterValue(1);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoHInt(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInformationint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ const __int64* p1 = *(const __int64**)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInformationint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoAint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ const __int64* p1 = *(const __int64**)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoAint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoBint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ __int64* p1 = *( __int64**)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoBint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoCint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ __int64& p1 = *( __int64*)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoCint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoDint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ __int64& p1 = *( __int64*)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoDint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoEint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ __int64* p1 = *( __int64**)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoEint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoFint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ __int64* p1 = *( __int64**)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoFint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoGint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ signed __int64* p1 = *( signed __int64**)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoGint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoHint64")
+ {
+ Diamond& p0 = *(Diamond*)operation.getParameterValue(0);
+ unsigned int64* p1 = *( unsigned int64**)operation.getParameterValue(1);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoHint64(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInformationVoid")
+ {
+ float& p0 = *(float*)operation.getParameterValue(0);
+ const __int64* p1 = *(const __int64**)operation.getParameterValue(1);
+ *(const void**)operation.getReturnValue() = impl->getCustomerInformationVoid(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoAVoid")
+ {
+ float& p0 = *(float*)operation.getParameterValue(0);
+ const __int64* p1 = *(const __int64**)operation.getParameterValue(1);
+ impl->getCustomerInfoAVoid(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoBVoid")
+ {
+ impl->getCustomerInfoBVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoCVoid")
+ {
+ impl->getCustomerInfoCVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoDVoid")
+ {
+ impl->getCustomerInfoDVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoEVoid")
+ {
+ *(char*)operation.getReturnValue() = impl->getCustomerInfoEVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoFVoid")
+ {
+ *(char*)operation.getReturnValue() = impl->getCustomerInfoFVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoGVoid")
+ {
+ *(char*)operation.getReturnValue() = impl->getCustomerInfoGVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoAInline")
+ {
+ int& p0 = *( int*)operation.getParameterValue(0);
+ int& p1 = *( int*)operation.getParameterValue(1);
+ int& p2 = *( int*)operation.getParameterValue(2);
+ int& p3 = *( int*)operation.getParameterValue(3);
+ char* customer p4 = *( char* customer*)operation.getParameterValue(4);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoAInline(p0, p1, p2, p3, p4);
+ return;
+ }
+ if (operationName == "getCustomerInfoBInline")
+ {
+ int* p0 = *( int**)operation.getParameterValue(0);
+ int* p1 = *( int**)operation.getParameterValue(1);
+ int* p2 = *( int**)operation.getParameterValue(2);
+ char* customer p3 = *( char* customer*)operation.getParameterValue(3);
+ *(int*)operation.getReturnValue() = impl->getCustomerInfoBInline(p0, p1, p2, p3);
+ return;
+ }
+ if (operationName == "getCustomerInfoCInline")
+ {
+ char* customer p0 = *( char* customer*)operation.getParameterValue(0);
+ *(friend const unsigned int**)operation.getReturnValue() = impl->getCustomerInfoCInline(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoTrickyA")
+ {
+ const char& p0 = *(const char*)operation.getParameterValue(0);
+ const char& p1 = *(const char*)operation.getParameterValue(1);
+ *(int*)operation.getReturnValue() = impl->getCustomerInfoTrickyA(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoTrickyB")
+ {
+ int& p0 = *( int*)operation.getParameterValue(0);
+ int& p1 = *( int*)operation.getParameterValue(1);
+ *(int*)operation.getReturnValue() = impl->getCustomerInfoTrickyB(p0, p1);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
new file mode 100644
index 0000000000..5fb82c4295
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplMultiParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CustomerInfoImpl* impl;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
new file mode 100644
index 0000000000..531ca6c010
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
@@ -0,0 +1,503 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Proxy* CustomerInfoImpl_CustomerInfoService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CustomerInfoImpl_CustomerInfoService_Proxy_Destructor(void* proxy)
+ {
+ delete (CustomerInfoImpl_CustomerInfoService_Proxy*)proxy;
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::CustomerInfoImpl_CustomerInfoService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::~CustomerInfoImpl_CustomerInfoService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationChar(const char* arg0)
+{
+ Operation operation("getCustomerInformationChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAChar(const char* arg0)
+{
+ Operation operation("getCustomerInfoAChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBChar( char* arg0)
+{
+ Operation operation("getCustomerInfoBChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCChar( char arg0)
+{
+ Operation operation("getCustomerInfoCChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDChar( char arg0)
+{
+ Operation operation("getCustomerInfoDChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoEChar( char* arg0)
+{
+ Operation operation("getCustomerInfoEChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFChar( char* arg0)
+{
+ Operation operation("getCustomerInfoFChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGChar( signed char* arg0)
+{
+ Operation operation("getCustomerInfoGChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHChar( unsigned char* arg0)
+{
+ Operation operation("getCustomerInfoHChar");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationLong(const long* arg0)
+{
+ Operation operation("getCustomerInformationLong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoALong(const long* arg0)
+{
+ Operation operation("getCustomerInfoALong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBLong( long* arg0)
+{
+ Operation operation("getCustomerInfoBLong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCLong( long arg0)
+{
+ Operation operation("getCustomerInfoCLong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDLong( long arg0)
+{
+ Operation operation("getCustomerInfoDLong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoELong( long* arg0)
+{
+ Operation operation("getCustomerInfoELong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFLong( long* arg0)
+{
+ Operation operation("getCustomerInfoFLong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGLong( signed long* arg0)
+{
+ Operation operation("getCustomerInfoGLong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const long* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHLong( unsigned long* arg0)
+{
+ Operation operation("getCustomerInfoHLong");
+ operation.addParameter(&arg0);
+ const long* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationInt(const int* arg0)
+{
+ Operation operation("getCustomerInformationInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAInt(const int* arg0)
+{
+ Operation operation("getCustomerInfoAInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBInt( int* arg0)
+{
+ Operation operation("getCustomerInfoBInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCInt( int arg0)
+{
+ Operation operation("getCustomerInfoCInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDInt( int arg0)
+{
+ Operation operation("getCustomerInfoDInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoEInt( int* arg0)
+{
+ Operation operation("getCustomerInfoEInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFInt( int* arg0)
+{
+ Operation operation("getCustomerInfoFInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGInt( signed int* arg0)
+{
+ Operation operation("getCustomerInfoGInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHInt( unsigned int* arg0)
+{
+ Operation operation("getCustomerInfoHInt");
+ operation.addParameter(&arg0);
+ const int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationint64(const __int64* arg0)
+{
+ Operation operation("getCustomerInformationint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAint64(const __int64* arg0)
+{
+ Operation operation("getCustomerInfoAint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBint64( __int64* arg0)
+{
+ Operation operation("getCustomerInfoBint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCint64( __int64 arg0)
+{
+ Operation operation("getCustomerInfoCint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDint64( __int64 arg0)
+{
+ Operation operation("getCustomerInfoDint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoEint64( __int64* arg0)
+{
+ Operation operation("getCustomerInfoEint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoFint64( __int64* arg0)
+{
+ Operation operation("getCustomerInfoFint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoGint64( signed __int64* arg0)
+{
+ Operation operation("getCustomerInfoGint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const __int64* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoHint64( unsigned int64* arg0)
+{
+ Operation operation("getCustomerInfoHint64");
+ operation.addParameter(&arg0);
+ const __int64* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const void* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationVoid(const __int64* arg0)
+{
+ Operation operation("getCustomerInformationVoid");
+ operation.addParameter(&arg0);
+ const void* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAVoid(const __int64* arg0)
+{
+ Operation operation("getCustomerInfoAVoid");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBVoid()
+{
+ Operation operation("getCustomerInfoBVoid");
+ target->invoke(operation);
+ return;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCVoid()
+{
+ Operation operation("getCustomerInfoCVoid");
+ target->invoke(operation);
+ return;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoDVoid()
+{
+ Operation operation("getCustomerInfoDVoid");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoAInline( char* customer arg0)
+{
+ Operation operation("getCustomerInfoAInline");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+int CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBInline( char* customer arg0)
+{
+ Operation operation("getCustomerInfoBInline");
+ operation.addParameter(&arg0);
+ int ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+friend const unsigned int* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoCInline( char* customer arg0)
+{
+ Operation operation("getCustomerInfoCInline");
+ operation.addParameter(&arg0);
+ friend const unsigned int* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+int CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoTrickyA(const char arg0)
+{
+ Operation operation("getCustomerInfoTrickyA");
+ operation.addParameter(&arg0);
+ int ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+int CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoTrickyB( int arg0)
+{
+ Operation operation("getCustomerInfoTrickyB");
+ operation.addParameter(&arg0);
+ int ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
new file mode 100644
index 0000000000..f35d841b12
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "/CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformationChar(const char* customerID);
+ virtual const char* getCustomerInfoAChar(const char* );
+ virtual const char* getCustomerInfoBChar( char* customerID);
+ virtual const char* getCustomerInfoCChar( char customerID);
+ virtual const char* getCustomerInfoDChar( char );
+ virtual const char* getCustomerInfoEChar( char* );
+ virtual const char* getCustomerInfoFChar( char* customerID);
+ virtual const char* getCustomerInfoGChar( signed char* customerID);
+ virtual const char* getCustomerInfoHChar( unsigned char* customerID);
+ virtual const long* getCustomerInformationLong(const long* customerID);
+ virtual const long* getCustomerInfoALong(const long* );
+ virtual const long* getCustomerInfoBLong( long* customerID);
+ virtual const long* getCustomerInfoCLong( long customerID);
+ virtual const long* getCustomerInfoDLong( long );
+ virtual const long* getCustomerInfoELong( long* );
+ virtual const long* getCustomerInfoFLong( long* customerID);
+ virtual const long* getCustomerInfoGLong( signed long* customerID);
+ virtual const long* getCustomerInfoHLong( unsigned long* customerID);
+ virtual const int* getCustomerInformationInt(const int* customerID);
+ virtual const int* getCustomerInfoAInt(const int* );
+ virtual const int* getCustomerInfoBInt( int* customerID);
+ virtual const int* getCustomerInfoCInt( int customerID);
+ virtual const int* getCustomerInfoDInt( int );
+ virtual const int* getCustomerInfoEInt( int* );
+ virtual const int* getCustomerInfoFInt( int* customerID);
+ virtual const int* getCustomerInfoGInt( signed int* customerID);
+ virtual const int* getCustomerInfoHInt( unsigned int* customerID);
+ virtual const __int64* getCustomerInformationint64(const __int64* customerID);
+ virtual const __int64* getCustomerInfoAint64(const __int64* );
+ virtual const __int64* getCustomerInfoBint64( __int64* customerID);
+ virtual const __int64* getCustomerInfoCint64( __int64 customerID);
+ virtual const __int64* getCustomerInfoDint64( __int64 );
+ virtual const __int64* getCustomerInfoEint64( __int64* );
+ virtual const __int64* getCustomerInfoFint64( __int64* customerID);
+ virtual const __int64* getCustomerInfoGint64( signed __int64* customerID);
+ virtual const __int64* getCustomerInfoHint64( unsigned int64* customerID);
+ virtual const void* getCustomerInformationVoid(const __int64* customerID);
+ virtual void getCustomerInfoAVoid(const __int64* );
+ virtual void getCustomerInfoBVoid();
+ virtual void getCustomerInfoCVoid();
+ virtual void getCustomerInfoDVoid( void );
+ virtual const char* getCustomerInfoAInline( char* customer id);
+ virtual int getCustomerInfoBInline( char* customer id);
+ virtual friend const unsigned int* getCustomerInfoCInline( char* customer id);
+ virtual int getCustomerInfoTrickyA(const char );
+ virtual int getCustomerInfoTrickyB( int myInt);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
new file mode 100644
index 0000000000..892b92c524
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
@@ -0,0 +1,339 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Wrapper* CustomerInfoImpl_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::CustomerInfoImpl_CustomerInfoService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl*)getImplementation();
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::~CustomerInfoImpl_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformationChar")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformationChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoAChar")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoAChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoBChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoBChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoCChar")
+ {
+ char& p0 = *( char*)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoCChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoDChar")
+ {
+ char& p0 = *( char*)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoDChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoEChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoEChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoFChar")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoFChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoGChar")
+ {
+ signed char* p0 = *( signed char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoGChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoHChar")
+ {
+ unsigned char* p0 = *( unsigned char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoHChar(p0);
+ return;
+ }
+ if (operationName == "getCustomerInformationLong")
+ {
+ const long* p0 = *(const long**)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInformationLong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoALong")
+ {
+ const long* p0 = *(const long**)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoALong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoBLong")
+ {
+ long* p0 = *( long**)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoBLong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoCLong")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoCLong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoDLong")
+ {
+ long& p0 = *( long*)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoDLong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoELong")
+ {
+ long* p0 = *( long**)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoELong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoFLong")
+ {
+ long* p0 = *( long**)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoFLong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoGLong")
+ {
+ signed long* p0 = *( signed long**)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoGLong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoHLong")
+ {
+ unsigned long* p0 = *( unsigned long**)operation.getParameterValue(0);
+ *(const long**)operation.getReturnValue() = impl->getCustomerInfoHLong(p0);
+ return;
+ }
+ if (operationName == "getCustomerInformationInt")
+ {
+ const int* p0 = *(const int**)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInformationInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoAInt")
+ {
+ const int* p0 = *(const int**)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoAInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoBInt")
+ {
+ int* p0 = *( int**)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoBInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoCInt")
+ {
+ int& p0 = *( int*)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoCInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoDInt")
+ {
+ int& p0 = *( int*)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoDInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoEInt")
+ {
+ int* p0 = *( int**)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoEInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoFInt")
+ {
+ int* p0 = *( int**)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoFInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoGInt")
+ {
+ signed int* p0 = *( signed int**)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoGInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoHInt")
+ {
+ unsigned int* p0 = *( unsigned int**)operation.getParameterValue(0);
+ *(const int**)operation.getReturnValue() = impl->getCustomerInfoHInt(p0);
+ return;
+ }
+ if (operationName == "getCustomerInformationint64")
+ {
+ const __int64* p0 = *(const __int64**)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInformationint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoAint64")
+ {
+ const __int64* p0 = *(const __int64**)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoAint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoBint64")
+ {
+ __int64* p0 = *( __int64**)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoBint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoCint64")
+ {
+ __int64& p0 = *( __int64*)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoCint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoDint64")
+ {
+ __int64& p0 = *( __int64*)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoDint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoEint64")
+ {
+ __int64* p0 = *( __int64**)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoEint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoFint64")
+ {
+ __int64* p0 = *( __int64**)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoFint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoGint64")
+ {
+ signed __int64* p0 = *( signed __int64**)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoGint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoHint64")
+ {
+ unsigned int64* p0 = *( unsigned int64**)operation.getParameterValue(0);
+ *(const __int64**)operation.getReturnValue() = impl->getCustomerInfoHint64(p0);
+ return;
+ }
+ if (operationName == "getCustomerInformationVoid")
+ {
+ const __int64* p0 = *(const __int64**)operation.getParameterValue(0);
+ *(const void**)operation.getReturnValue() = impl->getCustomerInformationVoid(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoAVoid")
+ {
+ const __int64* p0 = *(const __int64**)operation.getParameterValue(0);
+ impl->getCustomerInfoAVoid(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoBVoid")
+ {
+ impl->getCustomerInfoBVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoCVoid")
+ {
+ impl->getCustomerInfoCVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoDVoid")
+ {
+ impl->getCustomerInfoDVoid();
+ return;
+ }
+ if (operationName == "getCustomerInfoAInline")
+ {
+ char* customer p0 = *( char* customer*)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoAInline(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoBInline")
+ {
+ char* customer p0 = *( char* customer*)operation.getParameterValue(0);
+ *(int*)operation.getReturnValue() = impl->getCustomerInfoBInline(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoCInline")
+ {
+ char* customer p0 = *( char* customer*)operation.getParameterValue(0);
+ *(friend const unsigned int**)operation.getReturnValue() = impl->getCustomerInfoCInline(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoTrickyA")
+ {
+ const char& p0 = *(const char*)operation.getParameterValue(0);
+ *(int*)operation.getReturnValue() = impl->getCustomerInfoTrickyA(p0);
+ return;
+ }
+ if (operationName == "getCustomerInfoTrickyB")
+ {
+ int& p0 = *( int*)operation.getParameterValue(0);
+ *(int*)operation.getReturnValue() = impl->getCustomerInfoTrickyB(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
new file mode 100644
index 0000000000..5fb82c4295
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/CustomerInfoImplSingleParamDiffTypesTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CustomerInfoImpl* impl;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp
new file mode 100644
index 0000000000..b875e97a95
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl2_CustomerInfoService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl2_CustomerInfoService_Proxy* CustomerInfoImpl2_CustomerInfoService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CustomerInfoImpl2_CustomerInfoService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CustomerInfoImpl2_CustomerInfoService_Proxy_Destructor(void* proxy)
+ {
+ delete (CustomerInfoImpl2_CustomerInfoService_Proxy*)proxy;
+ }
+}
+
+CustomerInfoImpl2_CustomerInfoService_Proxy::CustomerInfoImpl2_CustomerInfoService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CustomerInfoImpl2_CustomerInfoService_Proxy::~CustomerInfoImpl2_CustomerInfoService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* CustomerInfoImpl2_CustomerInfoService_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h
new file mode 100644
index 0000000000..90cf63c66a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl2_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl2_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "/CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl2_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl2_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl2_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl2_CustomerInfoService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp
new file mode 100644
index 0000000000..03c4b2af44
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl2_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl2_CustomerInfoService_Wrapper* CustomerInfoImpl2_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl2_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl2_CustomerInfoService_Wrapper::CustomerInfoImpl2_CustomerInfoService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl2*)getImplementation();
+}
+
+CustomerInfoImpl2_CustomerInfoService_Wrapper::~CustomerInfoImpl2_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl2_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl2;
+}
+
+void CustomerInfoImpl2_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl2_CustomerInfoService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformation")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformation(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h
new file mode 100644
index 0000000000..2a73893241
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl2_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl2_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CustomerInfoImpl2_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CustomerInfoImpl2_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl2_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CustomerInfoImpl2* impl;
+};
+
+#endif // CustomerInfoImpl2_CustomerInfoService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.cpp
new file mode 100644
index 0000000000..d34b63ea14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValue(const char* arg0)
+{
+ Operation operation("getMyValue");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueS(const string& arg0)
+{
+ Operation operation("getMyValueS");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustname( string& arg0)
+{
+ Operation operation("getCustname");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecs( string arg0)
+{
+ Operation operation("getCustnamecs");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.h
new file mode 100644
index 0000000000..742947ca69
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Proxy.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname( string& customerID);
+ virtual const string& getCustnamecs( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
new file mode 100644
index 0000000000..da60e4c1e3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValue")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValue(p0);
+ return;
+ }
+ if (operationName == "getMyValueS")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueS(p0);
+ return;
+ }
+ if (operationName == "getCustname")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustname(p0);
+ return;
+ }
+ if (operationName == "getCustnamecs")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecs(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.h
new file mode 100644
index 0000000000..f8b8b11724
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_MyValueService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.hpp"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.cpp
new file mode 100644
index 0000000000..cda55a99c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_customerInfo_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_customerInfo_Proxy* MyValueImpl_customerInfo_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_customerInfo_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_customerInfo_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_customerInfo_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_customerInfo_Proxy::MyValueImpl_customerInfo_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_customerInfo_Proxy::~MyValueImpl_customerInfo_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* MyValueImpl_customerInfo_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.h
new file mode 100644
index 0000000000..6ac33b4ef6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_customerInfo_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_customerInfo_Proxy_h
+#define MyValueImpl_customerInfo_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_customerInfo_Proxy : public CustomerInfo
+{
+public:
+ MyValueImpl_customerInfo_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_customerInfo_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_customerInfo_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.cpp
new file mode 100644
index 0000000000..3656acbaad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_stockQuote_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_stockQuote_Proxy* MyValueImpl_stockQuote_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_stockQuote_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_stockQuote_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_stockQuote_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_stockQuote_Proxy::MyValueImpl_stockQuote_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_stockQuote_Proxy::~MyValueImpl_stockQuote_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+commonj::sdo::DataObjectPtr MyValueImpl_stockQuote_Proxy::GetStockQuotes( commonj::sdo::DataObjectPtr arg0)
+{
+ Operation operation("GetStockQuotes");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..7619b6c9cd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModule/expected_output/MyValueImpl_stockQuote_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_stockQuote_Proxy_h
+#define MyValueImpl_stockQuote_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_stockQuote_Proxy : public StockQuoteService
+{
+public:
+ MyValueImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_stockQuote_Proxy();
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes( commonj::sdo::DataObjectPtr request);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_stockQuote_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
new file mode 100644
index 0000000000..e6cb3b3426
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Proxy* CustomerInfoImpl_CustomerInfoService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CustomerInfoImpl_CustomerInfoService_Proxy_Destructor(void* proxy)
+ {
+ delete (CustomerInfoImpl_CustomerInfoService_Proxy*)proxy;
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::CustomerInfoImpl_CustomerInfoService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::~CustomerInfoImpl_CustomerInfoService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
new file mode 100644
index 0000000000..1e2c47225e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "/CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
new file mode 100644
index 0000000000..57404925d2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+using Other::CustomerInfoImpl;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Wrapper* CustomerInfoImpl_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::CustomerInfoImpl_CustomerInfoService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl*)getImplementation();
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::~CustomerInfoImpl_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformation")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformation(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
new file mode 100644
index 0000000000..cbb77ab41e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ Other::CustomerInfoImpl* impl;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp
new file mode 100644
index 0000000000..d34b63ea14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValue(const char* arg0)
+{
+ Operation operation("getMyValue");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueS(const string& arg0)
+{
+ Operation operation("getMyValueS");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustname( string& arg0)
+{
+ Operation operation("getCustname");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecs( string arg0)
+{
+ Operation operation("getCustnamecs");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h
new file mode 100644
index 0000000000..742947ca69
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname( string& customerID);
+ virtual const string& getCustnamecs( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
new file mode 100644
index 0000000000..d5eaade5b1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+using Other::MyValueImpl;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValue")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValue(p0);
+ return;
+ }
+ if (operationName == "getMyValueS")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueS(p0);
+ return;
+ }
+ if (operationName == "getCustname")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustname(p0);
+ return;
+ }
+ if (operationName == "getCustnamecs")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecs(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h
new file mode 100644
index 0000000000..bcaff5b880
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.hpp"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ Other::MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.cpp
new file mode 100644
index 0000000000..cda55a99c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_customerInfo_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_customerInfo_Proxy* MyValueImpl_customerInfo_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_customerInfo_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_customerInfo_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_customerInfo_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_customerInfo_Proxy::MyValueImpl_customerInfo_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_customerInfo_Proxy::~MyValueImpl_customerInfo_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* MyValueImpl_customerInfo_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.h
new file mode 100644
index 0000000000..6ac33b4ef6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_customerInfo_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_customerInfo_Proxy_h
+#define MyValueImpl_customerInfo_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_customerInfo_Proxy : public CustomerInfo
+{
+public:
+ MyValueImpl_customerInfo_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_customerInfo_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_customerInfo_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.cpp
new file mode 100644
index 0000000000..3656acbaad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_stockQuote_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_stockQuote_Proxy* MyValueImpl_stockQuote_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_stockQuote_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_stockQuote_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_stockQuote_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_stockQuote_Proxy::MyValueImpl_stockQuote_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_stockQuote_Proxy::~MyValueImpl_stockQuote_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+commonj::sdo::DataObjectPtr MyValueImpl_stockQuote_Proxy::GetStockQuotes( commonj::sdo::DataObjectPtr arg0)
+{
+ Operation operation("GetStockQuotes");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..7619b6c9cd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespace/expected_output/MyValueImpl_stockQuote_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_stockQuote_Proxy_h
+#define MyValueImpl_stockQuote_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_stockQuote_Proxy : public StockQuoteService
+{
+public:
+ MyValueImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_stockQuote_Proxy();
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes( commonj::sdo::DataObjectPtr request);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_stockQuote_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp
new file mode 100644
index 0000000000..b1f76af778
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp
@@ -0,0 +1,182 @@
+/*
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueOther(const char* arg0)
+{
+ Operation operation("getMyValueOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueSOther(const string& arg0)
+{
+ Operation operation("getMyValueSOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustnameOther( string& arg0)
+{
+ Operation operation("getCustnameOther");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecsOther( string arg0)
+{
+ Operation operation("getCustnamecsOther");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueOther(const char* arg0)
+{
+ Operation operation("getMyValueOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueSOther(const string& arg0)
+{
+ Operation operation("getMyValueSOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustnameOther( string& arg0)
+{
+ Operation operation("getCustnameOther");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecsOther( string arg0)
+{
+ Operation operation("getCustnamecsOther");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h
new file mode 100644
index 0000000000..d9459ece24
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h
@@ -0,0 +1,82 @@
+/*
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValueOther(const char* customerID);
+ virtual float getMyValueSOther(const string& customerID);
+ virtual string getCustnameOther( string& customerID);
+ virtual const string& getCustnamecsOther( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValueOther(const char* customerID);
+ virtual float getMyValueSOther(const string& customerID);
+ virtual string getCustnameOther( string& customerID);
+ virtual const string& getCustnamecsOther( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
new file mode 100644
index 0000000000..d77b4a302d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
@@ -0,0 +1,182 @@
+/*
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+using myvaluecorp::implns::MyValueImpl;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValueOther")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueOther(p0);
+ return;
+ }
+ if (operationName == "getMyValueSOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueSOther(p0);
+ return;
+ }
+ if (operationName == "getCustnameOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustnameOther(p0);
+ return;
+ }
+ if (operationName == "getCustnamecsOther")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecsOther(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+using myvaluecorp::implns::MyValueImpl;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValueOther")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueOther(p0);
+ return;
+ }
+ if (operationName == "getMyValueSOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueSOther(p0);
+ return;
+ }
+ if (operationName == "getCustnameOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustnameOther(p0);
+ return;
+ }
+ if (operationName == "getCustnamecsOther")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecsOther(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h
new file mode 100644
index 0000000000..3992f0445f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleImplClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h
@@ -0,0 +1,80 @@
+/*
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.hpp"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ myvaluecorp::implns::MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.hpp"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ myvaluecorp::implns::MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp
new file mode 100644
index 0000000000..4cdd4899b0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueOther(const char* arg0)
+{
+ Operation operation("getMyValueOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueSOther(const string& arg0)
+{
+ Operation operation("getMyValueSOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustnameOther( string& arg0)
+{
+ Operation operation("getCustnameOther");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecsOther( string arg0)
+{
+ Operation operation("getCustnamecsOther");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h
new file mode 100644
index 0000000000..5bb75abd5b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Proxy.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public Other::MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValueOther(const char* customerID);
+ virtual float getMyValueSOther(const string& customerID);
+ virtual string getCustnameOther( string& customerID);
+ virtual const string& getCustnamecsOther( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
new file mode 100644
index 0000000000..34125fa6a3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValueOther")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueOther(p0);
+ return;
+ }
+ if (operationName == "getMyValueSOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueSOther(p0);
+ return;
+ }
+ if (operationName == "getCustnameOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustnameOther(p0);
+ return;
+ }
+ if (operationName == "getCustnamecsOther")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecsOther(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h
new file mode 100644
index 0000000000..f8b8b11724
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespace/expected_output/MyValueImpl_MyValueService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.hpp"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp
new file mode 100644
index 0000000000..4cdd4899b0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueOther(const char* arg0)
+{
+ Operation operation("getMyValueOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueSOther(const string& arg0)
+{
+ Operation operation("getMyValueSOther");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustnameOther( string& arg0)
+{
+ Operation operation("getCustnameOther");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecsOther( string arg0)
+{
+ Operation operation("getCustnamecsOther");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h
new file mode 100644
index 0000000000..5bb75abd5b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Proxy.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public Other::MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValueOther(const char* customerID);
+ virtual float getMyValueSOther(const string& customerID);
+ virtual string getCustnameOther( string& customerID);
+ virtual const string& getCustnamecsOther( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
new file mode 100644
index 0000000000..34125fa6a3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValueOther")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueOther(p0);
+ return;
+ }
+ if (operationName == "getMyValueSOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueSOther(p0);
+ return;
+ }
+ if (operationName == "getCustnameOther")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustnameOther(p0);
+ return;
+ }
+ if (operationName == "getCustnamecsOther")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecsOther(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h
new file mode 100644
index 0000000000..f8b8b11724
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleIntfClassWithNamespaceButNotInClassAttr/expected_output/MyValueImpl_MyValueService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.hpp"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp
new file mode 100644
index 0000000000..b875e97a95
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl2_CustomerInfoService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl2_CustomerInfoService_Proxy* CustomerInfoImpl2_CustomerInfoService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CustomerInfoImpl2_CustomerInfoService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CustomerInfoImpl2_CustomerInfoService_Proxy_Destructor(void* proxy)
+ {
+ delete (CustomerInfoImpl2_CustomerInfoService_Proxy*)proxy;
+ }
+}
+
+CustomerInfoImpl2_CustomerInfoService_Proxy::CustomerInfoImpl2_CustomerInfoService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CustomerInfoImpl2_CustomerInfoService_Proxy::~CustomerInfoImpl2_CustomerInfoService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* CustomerInfoImpl2_CustomerInfoService_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h
new file mode 100644
index 0000000000..90cf63c66a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl2_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl2_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "/CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl2_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl2_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl2_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl2_CustomerInfoService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp
new file mode 100644
index 0000000000..12d3a1a3d1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.cpp
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl2_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl2_CustomerInfoService_Wrapper* CustomerInfoImpl2_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl2_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl2_CustomerInfoService_Wrapper::CustomerInfoImpl2_CustomerInfoService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl2*)getImplementation();
+}
+
+CustomerInfoImpl2_CustomerInfoService_Wrapper::~CustomerInfoImpl2_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl2_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl2;
+}
+
+void CustomerInfoImpl2_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl2_CustomerInfoService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformation")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformation(p0);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h
new file mode 100644
index 0000000000..2a73893241
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/CustomerInfoImpl2_CustomerInfoService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl2_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl2_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CustomerInfoImpl2_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CustomerInfoImpl2_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl2_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CustomerInfoImpl2* impl;
+};
+
+#endif // CustomerInfoImpl2_CustomerInfoService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.cpp
new file mode 100644
index 0000000000..d34b63ea14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.cpp
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Proxy* MyValueImpl_MyValueService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_MyValueService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_MyValueService_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_MyValueService_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_MyValueService_Proxy::MyValueImpl_MyValueService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_MyValueService_Proxy::~MyValueImpl_MyValueService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValue(const char* arg0)
+{
+ Operation operation("getMyValue");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+float MyValueImpl_MyValueService_Proxy::getMyValueS(const string& arg0)
+{
+ Operation operation("getMyValueS");
+ operation.addParameter(&arg0);
+ float ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+string MyValueImpl_MyValueService_Proxy::getCustname( string& arg0)
+{
+ Operation operation("getCustname");
+ operation.addParameter(&arg0);
+ string ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const string& MyValueImpl_MyValueService_Proxy::getCustnamecs( string arg0)
+{
+ Operation operation("getCustnamecs");
+ operation.addParameter(&arg0);
+ target->invoke(operation);
+ return *(const string*)operation.getReturnValue();
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.h
new file mode 100644
index 0000000000..742947ca69
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Proxy.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Proxy_h
+#define MyValueImpl_MyValueService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValue.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Proxy : public MyValue
+{
+public:
+ MyValueImpl_MyValueService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_MyValueService_Proxy();
+ virtual float getMyValue(const char* customerID);
+ virtual float getMyValueS(const string& customerID);
+ virtual string getCustname( string& customerID);
+ virtual const string& getCustnamecs( string customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_MyValueService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
new file mode 100644
index 0000000000..83857169e5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_MyValueService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_MyValueService_Wrapper* MyValueImpl_MyValueService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new MyValueImpl_MyValueService_Wrapper(target);
+ }
+}
+
+MyValueImpl_MyValueService_Wrapper::MyValueImpl_MyValueService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (MyValueImpl*)getImplementation();
+}
+
+MyValueImpl_MyValueService_Wrapper::~MyValueImpl_MyValueService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* MyValueImpl_MyValueService_Wrapper::newImplementation()
+{
+ return new MyValueImpl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void MyValueImpl_MyValueService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getMyValue")
+ {
+ const char* p0 = *(const char**)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValue(p0);
+ return;
+ }
+ if (operationName == "getMyValueS")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(float*)operation.getReturnValue() = impl->getMyValueS(p0);
+ return;
+ }
+ if (operationName == "getCustname")
+ {
+ string& p0 = *(string*)operation.getParameterValue(0);
+ *(string*)operation.getReturnValue() = impl->getCustname(p0);
+ return;
+ }
+ if (operationName == "getCustnamecs")
+ {
+ string& p0 = *( string*)operation.getParameterValue(0);
+ const string& ret = impl->getCustnamecs(p0);
+ operation.setReturnValue(&ret);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.h
new file mode 100644
index 0000000000..f8b8b11724
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_MyValueService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_MyValueService_Wrapper_h
+#define MyValueImpl_MyValueService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "MyValueImpl.hpp"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class MyValueImpl_MyValueService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ MyValueImpl_MyValueService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~MyValueImpl_MyValueService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ MyValueImpl* impl;
+};
+
+#endif // MyValueImpl_MyValueService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.cpp
new file mode 100644
index 0000000000..cda55a99c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_customerInfo_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_customerInfo_Proxy* MyValueImpl_customerInfo_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_customerInfo_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_customerInfo_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_customerInfo_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_customerInfo_Proxy::MyValueImpl_customerInfo_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_customerInfo_Proxy::~MyValueImpl_customerInfo_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* MyValueImpl_customerInfo_Proxy::getCustomerInformation(const char* arg0)
+{
+ Operation operation("getCustomerInformation");
+ operation.addParameter(&arg0);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.h
new file mode 100644
index 0000000000..6ac33b4ef6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_customerInfo_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_customerInfo_Proxy_h
+#define MyValueImpl_customerInfo_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_customerInfo_Proxy : public CustomerInfo
+{
+public:
+ MyValueImpl_customerInfo_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_customerInfo_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_customerInfo_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.cpp
new file mode 100644
index 0000000000..3656acbaad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.cpp
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "MyValueImpl_stockQuote_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ MyValueImpl_stockQuote_Proxy* MyValueImpl_stockQuote_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new MyValueImpl_stockQuote_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void MyValueImpl_stockQuote_Proxy_Destructor(void* proxy)
+ {
+ delete (MyValueImpl_stockQuote_Proxy*)proxy;
+ }
+}
+
+MyValueImpl_stockQuote_Proxy::MyValueImpl_stockQuote_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+MyValueImpl_stockQuote_Proxy::~MyValueImpl_stockQuote_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+commonj::sdo::DataObjectPtr MyValueImpl_stockQuote_Proxy::GetStockQuotes( commonj::sdo::DataObjectPtr arg0)
+{
+ Operation operation("GetStockQuotes");
+ operation.addParameter(&arg0);
+ commonj::sdo::DataObjectPtr ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.h
new file mode 100644
index 0000000000..7619b6c9cd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/MyValueServiceModuleTwoClasses/expected_output/MyValueImpl_stockQuote_Proxy.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MyValueImpl_stockQuote_Proxy_h
+#define MyValueImpl_stockQuote_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "StockQuoteService.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class MyValueImpl_stockQuote_Proxy : public StockQuoteService
+{
+public:
+ MyValueImpl_stockQuote_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~MyValueImpl_stockQuote_Proxy();
+ virtual commonj::sdo::DataObjectPtr GetStockQuotes( commonj::sdo::DataObjectPtr request);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // MyValueImpl_stockQuote_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
new file mode 100644
index 0000000000..074406c606
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Proxy.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Proxy* CustomerInfoImpl_CustomerInfoService_Proxy_Factory(ServiceWrapper* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Proxy(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void CustomerInfoImpl_CustomerInfoService_Proxy_Destructor(void* proxy)
+ {
+ delete (CustomerInfoImpl_CustomerInfoService_Proxy*)proxy;
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::CustomerInfoImpl_CustomerInfoService_Proxy(ServiceWrapper* targ) : target(targ)
+{
+}
+
+CustomerInfoImpl_CustomerInfoService_Proxy::~CustomerInfoImpl_CustomerInfoService_Proxy()
+{
+ if (target)
+ delete target;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInformationCharPublic( char* arg0, const char* arg1)
+{
+ Operation operation("getCustomerInformationCharPublic");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoACharPublic( char* arg0, const char* arg1)
+{
+ Operation operation("getCustomerInfoACharPublic");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+const char* CustomerInfoImpl_CustomerInfoService_Proxy::getCustomerInfoBCharPublic( char* arg0, char* arg1)
+{
+ Operation operation("getCustomerInfoBCharPublic");
+ operation.addParameter(&arg0);
+ operation.addParameter(&arg1);
+ const char* ret;
+ operation.setReturnValue(&ret);
+ target->invoke(operation);
+ return ret;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
new file mode 100644
index 0000000000..ddb678c094
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Proxy.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Proxy_h
+#define CustomerInfoImpl_CustomerInfoService_Proxy_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "/CustomerInfo.h"
+#include "tuscany/sca/core/ServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Proxy : public CustomerInfo
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformationCharPublic( char* p1, const char* customerID);
+ virtual const char* getCustomerInfoACharPublic( char* p1, const char* );
+ virtual const char* getCustomerInfoBCharPublic( char* p1, char* customerID);
+private:
+ tuscany::sca::ServiceWrapper* target;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Proxy_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
new file mode 100644
index 0000000000..09000f9040
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.cpp
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "CustomerInfoImpl_CustomerInfoService_Wrapper.h"
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+
+
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ CustomerInfoImpl_CustomerInfoService_Wrapper* CustomerInfoImpl_CustomerInfoService_Wrapper_Factory(tuscany::sca::model::Service* target)
+ {
+ return new CustomerInfoImpl_CustomerInfoService_Wrapper(target);
+ }
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::CustomerInfoImpl_CustomerInfoService_Wrapper(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (CustomerInfoImpl*)getImplementation();
+}
+
+CustomerInfoImpl_CustomerInfoService_Wrapper::~CustomerInfoImpl_CustomerInfoService_Wrapper()
+{
+ releaseImplementation();
+}
+
+void* CustomerInfoImpl_CustomerInfoService_Wrapper::newImplementation()
+{
+ return new CustomerInfoImpl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::deleteImplementation()
+{
+ delete impl;
+}
+
+void CustomerInfoImpl_CustomerInfoService_Wrapper::invokeService(Operation& operation)
+{
+ const string& operationName = operation.getName();
+
+ if (operationName == "getCustomerInformationCharPublic")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const char* p1 = *(const char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInformationCharPublic(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoACharPublic")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ const char* p1 = *(const char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoACharPublic(p0, p1);
+ return;
+ }
+ if (operationName == "getCustomerInfoBCharPublic")
+ {
+ char* p0 = *( char**)operation.getParameterValue(0);
+ char* p1 = *( char**)operation.getParameterValue(1);
+ *(const char**)operation.getReturnValue() = impl->getCustomerInfoBCharPublic(p0, p1);
+ return;
+ }
+
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
new file mode 100644
index 0000000000..5fb82c4295
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/junit/testoutput/SimplePublicPrivateProtectedTest/expected_output/CustomerInfoImpl_CustomerInfoService_Wrapper.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CustomerInfoImpl_CustomerInfoService_Wrapper_h
+#define CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "CustomerInfoImpl.h"
+#include "tuscany/sca/core/ComponentServiceWrapper.h"
+
+class CustomerInfoImpl_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Service* target);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Wrapper();
+ virtual void invokeService(tuscany::sca::Operation& operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+private:
+ CustomerInfoImpl* impl;
+};
+
+#endif // CustomerInfoImpl_CustomerInfoService_Wrapper_h
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/lib/readme.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/lib/readme.txt
new file mode 100644
index 0000000000..d99c666c6a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/lib/readme.txt
@@ -0,0 +1,4 @@
+Place a junit.jar file (not shipped as part of Tuscany)
+in this directory to get the scagen build.xml Ant build
+file to find it and Junit classes (without setting the
+property "junit.jar.folder".
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.cmd
new file mode 100644
index 0000000000..a655d5d217
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.cmd
@@ -0,0 +1,15 @@
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+@java -jar %~d0%~p0scagen.jar %*
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.sh
new file mode 100755
index 0000000000..23d6dedc47
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/scagen.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+java -jar scagen.jar -dir $2 -output $4 \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java
new file mode 100644
index 0000000000..65b1e2f6fa
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/BodyPart.java
@@ -0,0 +1,90 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+
+package org.apache.tuscany.sca.cpp.tools.common;
+
+/**
+ * A snippet of C or C++ source code. If this snippet ends with a return
+ * statement, this body part also contains the return value.
+ */
+public class BodyPart {
+ public final static int TRAILING = 0;
+
+ public final static int RETURN = 1;
+
+ public final static int CATCH = 2;
+
+ private String codeFragment;
+
+ private String returnValue = null;
+
+ private Parameter caughtValue = null;
+
+ private int type;
+
+ BodyPart(String cf) {
+ codeFragment = cf;
+ type = TRAILING;
+ }
+
+ BodyPart(String cf, String rv) {
+ codeFragment = cf;
+ if (null != rv && !Utils.isSpace(rv)) {
+ type = RETURN;
+ returnValue = rv;
+ } else
+ type = TRAILING;
+ }
+
+ BodyPart(String cf, Parameter cv) {
+ codeFragment = cf;
+ caughtValue = cv;
+ type = CATCH;
+ }
+
+ public String getCodeFragment() {
+ return codeFragment;
+ }
+
+ public boolean isTrailing() {
+ return TRAILING == type;
+ }
+
+ public boolean isReturn() {
+ return RETURN == type;
+ }
+
+ public boolean isCatch() {
+ return CATCH == type;
+ }
+
+ public String getReturnValue() {
+ if (returnValue != null)
+ return returnValue.trim();
+ else
+ return null;
+ }
+
+ public Parameter getCaughtValue() {
+ return caughtValue;
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java
new file mode 100644
index 0000000000..6846bb4096
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/CParsingTool.java
@@ -0,0 +1,119 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * The superclass of tools that parse C/C++ code. This CParsingTool provides
+ * some useful common methods.
+ */
+public class CParsingTool {
+ protected boolean failed = false;
+
+ protected Headers headers = new Headers();
+
+ protected CParsingTool(String[] args) throws Exception {
+ String text = new String();
+ for (int i = 0; i < args.length; i++)
+ text += args[i] + " ";
+ Utils.outputDebugString(text);
+
+ Options.set(args);
+ String config = (String) Options.getOption("-config");
+ if (null != config)
+ Configuration.initialise(config);
+ }
+
+ /**
+ * Read in any include files before the main processing of the tool is done.
+ * This constructs the Headers.
+ */
+ protected Headers preparseHeaders(String option) throws Exception {
+ Headers headers = new Headers();
+ Object o = Options.getOption(option);
+ if (null != o) {
+ Utils.outputDebugString("Pre-parsing headers...");
+ List includeList;
+ if (o instanceof List)
+ includeList = (List) o;
+ else {
+ includeList = new ArrayList();
+ includeList.add(o);
+ }
+ Iterator it = includeList.iterator();
+ while (it.hasNext()) {
+ File include = new File((String) it.next());
+ if (!include.isDirectory())
+ Utils.rude("Bad include directory " + include);
+
+ DirectoryTree tree = new DirectoryTree(headers, new HashSet(
+ Arrays.asList(new Object[] { "hpp", "h" })));
+ tree.walkTree(include, null, 0);
+ }
+ Utils.outputDebugString("Parsing files...");
+ }
+
+ return headers;
+ }
+
+ /**
+ * Checks the source directory looks good.
+ */
+ protected File checkFile(String option) throws Exception {
+ String name = (String) Options.getOption(option);
+ if (null == name) {
+ printUsage();
+ System.exit(-1);
+ }
+
+ File file = new File(name);
+ if (!file.isFile() && !file.isDirectory())
+ Utils.rude("Bad file or directory " + file);
+ return file;
+ }
+
+ /**
+ * Checks the target directory and creates it if it doesn't already exist.
+ */
+ protected File maybeCreateDirectory(String option) throws Exception {
+ String name = (String) Options.getOption(option);
+ if (null == name) {
+ printUsage();
+ System.exit(-1);
+ }
+
+ File file = new File(name);
+ if (!file.exists() && !file.mkdir())
+ Utils.screenMessage("Failed to create directory " + file);
+ return file;
+ }
+
+ protected void printUsage() {
+ System.out.println("usage: ??");
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java
new file mode 100644
index 0000000000..1a900ff711
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Configuration.java
@@ -0,0 +1,126 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Encapsulates the tool's configuration file
+ */
+public class Configuration {
+ private static Set files = new HashSet();
+
+ private static Set classes = new HashSet();
+
+ private static Set methods = new HashSet();
+
+ private static Set macros = new HashSet();
+
+ private static Set defines = new HashSet();
+
+ private static Set attributes = new HashSet();
+
+ private static Map others = new HashMap();
+
+ /**
+ * No one creates an instance of this class.
+ */
+ private Configuration() {
+ }
+
+ /**
+ * Reads in the configuration file
+ */
+ public static void initialise(String filename) throws Exception {
+ File file = new File(filename);
+ FileReader fr = new FileReader(file);
+ BufferedReader br = new BufferedReader(fr);
+ String line = br.readLine();
+ for (int lineno = 1; null != line; lineno++, line = br.readLine()) {
+ // Ignore lines starting with a # (comments) and blank lines
+ if (line.startsWith("#"))
+ continue;
+ boolean blank = true;
+ for (int i = 0; i < line.length() && blank; i++)
+ if (!Character.isWhitespace(line.charAt(i)))
+ blank = false;
+ if (blank)
+ continue;
+
+ int equals = line.indexOf("=");
+ if (-1 == equals)
+ Utils.rude("Bad line in configuration file " + filename
+ + " lineno " + lineno);
+ String key = line.substring(0, equals).trim();
+ String value = line.substring(equals + 1).trim();
+ if ("excludefile".equals(key)) {
+ files.add(value);
+ } else if ("excludeclass".equals(key)) {
+ classes.add(value);
+ } else if ("excludemethod".equals(key)) {
+ methods.add(value);
+ } else if ("macro".equals(key)) {
+ macros.add(value);
+ } else if ("define".equals(key)) {
+ defines.add(value);
+ } else if ("attribute".equals(key)) {
+ attributes.add(value);
+ } else {
+ others.put(key, value);
+ }
+ }
+ }
+
+ public static boolean fileExcluded(String s) {
+ return files.contains(s);
+ }
+
+ public static boolean classExcluded(String s) {
+ return classes.contains(s);
+ }
+
+ public static boolean methodExcluded(String className, String method) {
+ return methods.contains(className + "::" + method);
+ }
+
+ public static boolean isMacro(String s) {
+ return macros.contains(s);
+ }
+
+ public static boolean isDefine(String s) {
+ return defines.contains(s);
+ }
+
+ public static boolean isAttribute(String s) {
+ return attributes.contains(s);
+ }
+
+ public static String getConfigured(String key) {
+ return (String) others.get(key);
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java
new file mode 100644
index 0000000000..a4f1ca9a21
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/DirectoryTree.java
@@ -0,0 +1,100 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.File;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+public class DirectoryTree {
+ private FileActor actor;
+
+ private Set extensions;
+
+ public DirectoryTree(FileActor actor, Set extensions) {
+ this.actor = actor;
+ this.extensions = extensions;
+ }
+
+ /**
+ * Starts adding trace into the given file. If the given file is a directory
+ * then this the starting directory and all code beneath and in this
+ * directory will be given trace.
+ *
+ * @param source -
+ * either the starting directory or one file to add trace to.
+ */
+ public void walkTree(File source, File target, int depth) throws Exception {
+ depth++;
+ boolean noTarget = (null == target);
+
+ if (!source.canRead())
+ Utils.rude("Cannot read from source directory " + source);
+ if (!noTarget && !target.canWrite())
+ Utils.rude("Cannot write to target directory " + target);
+
+ if (source.isDirectory()) {
+ File[] filesInDirectory = source.listFiles();
+ for (int i = 0; i < filesInDirectory.length; i++) {
+ File file = filesInDirectory[i];
+ String name = file.getName();
+ int dot = name.lastIndexOf('.');
+ String ext = null;
+ if (-1 != dot)
+ ext = name.substring(dot + 1);
+
+ if (file.isDirectory()) {
+ File newTarget = null;
+ if (!noTarget) {
+ StringTokenizer st = new StringTokenizer(
+ file.getPath(), "\\/");
+ String newdir = null;
+ while (st.hasMoreTokens())
+ newdir = st.nextToken();
+ String targetName = maybeAppendSeparator(target
+ .toString());
+ newTarget = new File(targetName + newdir);
+ if (!newTarget.mkdir())
+ Utils.rude("Failed to create target directory "
+ + newTarget);
+ }
+
+ // recurse
+ walkTree(file, newTarget, depth);
+ } else if (file.isFile()
+ && (extensions == null || (!file.isHidden() && extensions
+ .contains(ext)))) {
+ // this is a file and we need to add trace into it !
+ actor.actOnFile(file, target, depth);
+ }
+ }
+ } else {
+ actor.actOnFile(source, target, depth);
+ }
+ }
+
+ public static String maybeAppendSeparator(String name) {
+ if (!name.endsWith("/") && !name.endsWith("\\"))
+ name += "/";
+ return name;
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java
new file mode 100644
index 0000000000..fc1c8ec5c3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FileActor.java
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.File;
+
+/**
+ * DirectoryTree calls this interface to allow implementations of this interface
+ * to act on a file in the directory tree.
+ */
+public interface FileActor {
+ public void actOnFile(File source, File target, int depth) throws Exception;
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java
new file mode 100644
index 0000000000..e629751ea4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/FilePart.java
@@ -0,0 +1,75 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+
+package org.apache.tuscany.sca.cpp.tools.common;
+
+/**
+ * A piece of C++ source code
+ */
+public class FilePart {
+ public final static int UNKNOWN = 0;
+
+ public final static int COMMENT = 1;
+
+ public final static int METHOD = 2;
+
+ public final static int FIELD = 3;
+
+ public final static int BEGINSCOPE = 4;
+
+ public final static int ENDSCOPE = 5;
+
+ public final static int DIRECTIVE = 6;
+
+ public final static int WHITESPACE = 7;
+
+ public final static int MACRO = 8;
+
+ public final static int CLASSATTRIBUTE = 9;
+
+ public final static int ENUM = 10;
+
+ public final static int PROTOTYPE = 11;
+
+ public final static int TYPEDEF = 12;
+
+ protected String cppsource;
+
+ protected int type;
+
+ FilePart(String s, int type) {
+ cppsource = s;
+ this.type = type;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ int length() {
+ return cppsource.length();
+ }
+
+ public String toString() {
+ return cppsource;
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java
new file mode 100644
index 0000000000..8deba2401d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Headers.java
@@ -0,0 +1,162 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class Headers implements FileActor {
+ private ArrayList instanceMethods = new ArrayList();
+
+ private ArrayList staticMethods = new ArrayList();
+
+ private ArrayList allMethods = new ArrayList();
+
+ private ArrayList classNames = new ArrayList();
+
+ private boolean failed = false;
+
+ public void actOnFile(File header, File ignored, int depth)
+ throws Exception {
+ if (Configuration.fileExcluded(header.getName())) {
+ Utils.outputDebugString("excluding " + header + "...");
+ return;
+ }
+
+ Utils.outputDebugString("pre-parsing " + header + "...");
+ FileReader fr = null;
+ try {
+ fr = new FileReader(header);
+ } catch (FileNotFoundException fnfe) {
+ throw fnfe;
+ }
+ BufferedReader inputFile = new BufferedReader(fr);
+
+ try {
+ InputCppSourceCode code = new InputCppSourceCode(inputFile, header
+ .getName());
+ Iterator it = code.getPartIterator();
+ while (it.hasNext()) {
+ FilePart fp = (FilePart) (it.next());
+ if (fp.getType() != FilePart.PROTOTYPE)
+ continue;
+ PrototypePart pp = (PrototypePart) fp;
+ String className = pp.className();
+ if (null == className)
+ continue;
+ String trimClassName = className;
+ if (className.endsWith("::"))
+ trimClassName = className.substring(0,
+ className.length() - 2);
+ if (!classNames.contains(trimClassName))
+ classNames.add(trimClassName);
+
+ Signature sign = new Signature(fp.toString());
+ sign.setClassName(className);
+ //Tuscany
+ sign.setScope(pp.getSignature().getScope());
+ sign.setNamespace(pp.getSignature().getNamespace());
+
+ // "Clean" the signature by stripping off attributes,
+ // semicolons, etc
+ Signature cleaned = new Signature(sign.toStringWithoutAttrs());
+ //Tuscany - problem
+ cleaned.setClassName(className);
+ cleaned.setScope(pp.getSignature().getScope());
+ cleaned.setNamespace(pp.getSignature().getNamespace());
+ //Tuscany - end of problem
+
+
+ if (-1 == sign.getAttributes().indexOf("static"))
+ instanceMethods.add(cleaned);
+ else
+ staticMethods.add(cleaned);
+ }
+ } catch (ParsingException pe) {
+ failed = true;
+ }
+
+ inputFile.close();
+ allMethods.addAll(staticMethods);
+ allMethods.addAll(instanceMethods);
+ }
+
+ public boolean failed() {
+ return failed;
+ }
+
+ public boolean isInstanceMethod(Signature sign) {
+ Iterator it = instanceMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ if (s.equals(sign))
+ return true;
+ }
+ return false;
+ }
+
+ public boolean isStaticMethod(Signature sign) {
+ Iterator it = staticMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ if (s.equals(sign))
+ return true;
+ }
+ return false;
+ }
+
+ public List getMethods(String method) {
+ ArrayList list = new ArrayList();
+ if (null == method)
+ return list;
+
+ Iterator it = allMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ if (method.equals(s.getMethodName()))
+ list.add(s);
+ }
+ return list;
+ }
+
+ /**
+ * Tuscany change - a method to get all the method signatures at once
+ */
+ public List getAllMethods() {
+ ArrayList list = new ArrayList();
+ Iterator it = allMethods.iterator();
+ while (it.hasNext()) {
+ Signature s = (Signature) it.next();
+ list.add(s);
+ }
+ return list;
+ }
+
+ public boolean isClassName(String text) {
+ return classNames.contains(text);
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java
new file mode 100644
index 0000000000..6fa68b14a3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/InputCppSourceCode.java
@@ -0,0 +1,420 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.BufferedReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+public class InputCppSourceCode {
+
+ private ArrayList parts = new ArrayList();
+
+ private String name;
+
+ public InputCppSourceCode(BufferedReader br, String name) throws Exception {
+ this.name = name;
+
+ String s = null;
+ StringBuffer buff = new StringBuffer();
+ for (int i = 1;; i++) {
+ try {
+ s = br.readLine();
+ } catch (Exception e) {
+ System.err.println("Ignoring exception thrown parsing file "
+ + name + " line number " + i);
+ e.printStackTrace();
+ break;
+ }
+ if (s == null)
+ break;
+ buff.append(s + "\n");
+ }
+ String str = buff.toString();
+
+ // TODO: When checking for rest.startsWith("struct") should
+ // check the next letter after struct is not alphanumeric otherwise
+ // we'll get false matches on a function called structify() for
+ // instance. Also applies to enum, union, public, typedef, etc
+
+ String rest, text = "";
+ int scopedepth = 0;
+ String scope = "public";
+ String currentClass = null;
+ String currentNamespace = null;
+ for (int idx = 0; idx < str.length(); /* No idx++ */
+ ) {
+ rest = str.substring(idx);
+ if (Character.isWhitespace(rest.charAt(0))) {
+ int ridx = 0;
+ while (ridx < rest.length()
+ && Character.isWhitespace(rest.charAt(ridx)))
+ ridx++;
+ text = rest.substring(0, ridx);
+ FilePart fp = new FilePart(text, FilePart.WHITESPACE);
+ parts.add(fp);
+ idx += ridx;
+
+ } else if (rest.startsWith("/*")) {
+ int ridx = rest.indexOf("*/"); // Don't use Utils here
+ text = str.substring(idx, idx + ridx + 2);
+ FilePart fp = new FilePart(text, FilePart.COMMENT);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (rest.startsWith("//")) {
+ text = str.substring(idx, idx + rest.indexOf("\n"));
+ FilePart fp = new FilePart(text, FilePart.COMMENT);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (rest.startsWith("#")) {
+ int ridx = rest.indexOf("\n");
+ char c = rest.charAt(ridx - 1);
+ while (-1 != ridx && '\\' == c) {
+ String rest2 = rest.substring(ridx + 1);
+ ridx += rest2.indexOf("\n") + 1;
+ c = rest.charAt(ridx - 1);
+ }
+ text = str.substring(idx, idx + ridx);
+ FilePart fp = new FilePart(text, FilePart.DIRECTIVE);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (rest.startsWith("}")) {
+ if (scopedepth <= 0) //Tuscany need to increase scopedepth for
+ // namespaces?
+ Utils.rude("Braces do not match", name, lineNo(str, idx),
+ rest.substring(0, rest.indexOf("\n")));
+ else
+ scopedepth--;
+ // TODO: better checking that this brace really ends the class
+ if (0 == scopedepth)
+ currentClass = null;
+ scope = "public";
+ parts.add(new FilePart("}", FilePart.ENDSCOPE));
+ idx++;
+
+ } else if (rest.startsWith(";")) {
+ parts.add(new FilePart(";", FilePart.FIELD));
+ idx++;
+
+ } else if (!Character.isLetter(rest.charAt(0))
+ && '~' != rest.charAt(0) && '_' != rest.charAt(0)) {
+ Utils.rude("Lines must start with a letter ", name, lineNo(str,
+ idx), rest.substring(0, rest.indexOf("\n")));
+
+ } else if (MacroPart.isAMacro(rest)) {
+ MacroPart mp = MacroPart.create(rest);
+ parts.add(mp);
+ idx += mp.length();
+
+ } else if (beginsScope(rest)) {
+
+ //Tuscany a namespace comes in here
+ scopedepth++;
+ text = rest.substring(0, Utils.indexOf(rest, "{") + 1);
+ FilePart fp = new FilePart(text, FilePart.BEGINSCOPE);
+ parts.add(fp);
+ idx += text.length();
+ if (Utils.startsWith(text, "class")) {
+ // TODO: cope with comments here
+ // TODO: split out classes into a ClassPart
+ StringTokenizer st = new StringTokenizer(text,
+ Utils.whitespace + ":");
+ st.nextToken(); // step over "class"
+ while (st.hasMoreTokens()) {
+ String word = st.nextToken();
+ if (Configuration.isAttribute(word))
+ continue;
+ currentClass = word;
+ break;
+ }
+ }
+
+ //Tuscany
+ if (Utils.startsWith(text, "namespace")) {
+ // TODO: cope with comments here
+ StringTokenizer st = new StringTokenizer(text,
+ Utils.whitespace + "{");
+ st.nextToken(); // step over "namespace"
+ String word = "";
+ while (st.hasMoreTokens()) {
+ word = st.nextToken();
+ if (word.equals("{")) {
+ break;
+ }
+
+ }
+
+ if(currentNamespace == null)
+ {
+ currentNamespace = word;
+ }
+ else
+ {
+ currentNamespace += "::" + word;
+ }
+ //We have not got to the class yet
+ //so will need ot deal with the namespace
+ //when we do
+ }
+ // Tuscany end
+
+ } else if (isEnumOrUnion(rest)) {
+ int ridx = Utils.findMatching(rest, '{', '}') + 1;
+ String rest2 = rest.substring(ridx);
+ ridx = idx + ridx + Utils.indexOf(rest2, ';') + 1;
+ text = str.substring(idx, ridx);
+ FilePart fp = new FilePart(text, FilePart.ENUM);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (scopedepth > 0
+ && (rest.startsWith("public")
+ || rest.startsWith("protected") || rest
+ .startsWith("private"))) {
+ int colon = rest.indexOf(":");
+ if (-1 == colon)
+ Utils.rude("No colon found after public or private ", name,
+ lineNo(str, idx), rest.substring(0, rest
+ .indexOf("\n")));
+ scope = str.substring(idx, idx + colon);
+ text = str.substring(idx, idx + colon + 1);
+ FilePart fp = new FilePart(text, FilePart.CLASSATTRIBUTE);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (Utils.startsWith(rest, "typedef")) {
+ int semicolon = Utils.indexOf(rest, ';');
+ int brace = Utils.indexOf(rest, '{');
+
+ if (-1 == semicolon)
+ Utils.rude("No semicolon found after typedef", name,
+ lineNo(str, idx), rest.substring(0, rest
+ .indexOf("\n")));
+
+ if (-1 == brace || semicolon < brace) {
+ // Simple typedef
+ text = str.substring(idx, idx + semicolon + 1);
+ } else {
+ // Typedef of a struct, etc
+ int endbrace = Utils.findMatching(rest, '{', '}');
+ String rest2 = rest.substring(endbrace);
+ semicolon = Utils.indexOf(rest2, ';');
+ text = str.substring(idx, idx + endbrace + semicolon + 1);
+ }
+ FilePart fp = new FilePart(text, FilePart.TYPEDEF);
+ parts.add(fp);
+ idx += text.length();
+
+ } else {
+ if (isMethod(rest)) {
+
+ int brace = Utils.indexOf(rest, '{');
+ Signature signature = new Signature(str.substring(idx, idx
+ + brace));
+ if (signature.failed())
+ Utils.rude("Signature parsing failed", name, lineNo(
+ str, idx), signature.getOriginal());
+ if (null != currentClass
+ && null == signature.getClassName())
+ signature.setClassName(currentClass);
+ signature.setScope(scope);
+ signature.setNamespace(currentNamespace);
+
+ String body = rest.substring(brace);
+ int endBrace = Utils.findMatching(body, '{', '}');
+ body = body.substring(0, endBrace + 1);
+ int endIdx = idx + signature.originalLength()
+ + body.length();
+ text = str.substring(idx, endIdx);
+ MethodPart mp = new MethodPart(text, signature, body);
+ parts.add(mp);
+ idx += text.length();
+
+ } else if (isField(rest)) {
+ int semicolon = Utils.indexOf(rest, ';');
+ text = str.substring(idx, idx + semicolon + 1);
+ FilePart fp = new FilePart(text, FilePart.FIELD);
+ parts.add(fp);
+ idx += text.length();
+
+ } else if (isPrototype(rest)) {
+ int semicolon = Utils.indexOf(rest, ';');
+ text = str.substring(idx, idx + semicolon + 1);
+ PrototypePart pp = new PrototypePart(text, currentClass, currentNamespace);
+ pp.setScope(scope);
+ parts.add(pp);
+ idx += text.length();
+
+ } else {
+ //TODO other file parts here - not sure if there are any
+ // others?
+ Utils.rude("Unrecognised file part", name,
+ lineNo(str, idx), rest.substring(0, rest
+ .indexOf("\n")));
+ } // end if
+ } // end if
+ } // end for
+ }
+
+ public Iterator getPartIterator() {
+ return parts.iterator();
+ }
+
+ private int lineNo(String s, int idx) {
+ int n = 0;
+ for (int i = 0; i < idx && i < s.length(); i++)
+ if ('\n' == s.charAt(i))
+ n++;
+ return n;
+ }
+
+ /**
+ * Find out whether we are defining a class, struct or extern "C" which may
+ * contain function implementations. These will have braces which begin a
+ * new scope. Ignore function prototypes that return a struct. struct mystr {
+ * int f1; }; struct mystr func(); struct mystr func() { struct mystr a;
+ * return a; }
+ */
+ private static boolean beginsScope(String s) throws ParsingException {
+ if (isMethod(s))
+ return false;
+
+ int brace = Utils.indexOf(s, '{');
+ int semicolon = Utils.indexOf(s, ';');
+
+ // Return false for class prototypes, but true for class definitions.
+ if (Utils.startsWith(s, "class")) {
+ if (-1 == brace)
+ return false;
+ if (-1 == semicolon)
+ return true;
+ return brace < semicolon;
+ }
+
+ if (Utils.startsWith(s, "struct")) {
+ if (-1 == brace || -1 == semicolon)
+ return false;
+ return brace < semicolon;
+ }
+
+ //Tuscany handle namespace for prototypes
+ //in a similar way to "class"
+ if (Utils.startsWith(s, "namespace")) {
+ if (-1 == brace || -1 == semicolon)
+ return false;
+ return brace < semicolon;
+ }
+
+ return startsWithExternScope(s);
+ }
+
+ /**
+ * There are 4 types of extern ... extern int field; extern int func();
+ * extern "C" int func() { return 2; } extern "C" { int func() { return 2; } }
+ * This method should return true only for the last of these three examples
+ * since only the last one creates a new scope using braces.
+ */
+ private static boolean startsWithExternScope(String s)
+ throws ParsingException {
+ if (!s.startsWith("extern"))
+ return false;
+
+ int brace = Utils.indexOf(s, '{');
+ int semicolon = Utils.indexOf(s, ';');
+ int bracket = Utils.indexOf(s, '(');
+
+ if (-1 == brace)
+ return false;
+ return (-1 == semicolon || brace < semicolon)
+ && (-1 == bracket || brace < bracket);
+ }
+
+ /**
+ * Find out whether we are defining an enum or union which will contain
+ * braces. Ignore function prototypes that return an enum or union. enum
+ * colour { red, blue }; enum colour func(); enum colour func() { return
+ * colour.red; }
+ */
+ private static boolean isEnumOrUnion(String s) throws ParsingException {
+ if ((!Utils.startsWith(s, "enum") && !Utils.startsWith(s, "union"))
+ || isMethod(s))
+ return false;
+
+ int brace = Utils.indexOf(s, '{');
+ int semicolon = Utils.indexOf(s, ';');
+ return -1 != brace && (-1 == semicolon || brace < semicolon);
+ }
+
+ /**
+ * Rules to recognise fields and methods...
+ *
+ * Fields must contain a semicolon Methods may or may not contain a
+ * semicolon Prototypes must contain a semicolon Fields may or may not
+ * contain a brace (array initialisers do) Methods must contain a brace
+ * Prototypes must not contain a brace Fields may or may not contain a
+ * bracket (casts do) Methods must contain a bracket Prototypes must contain
+ * a bracket
+ *
+ * It's a method if it contains a bracket and then a brace before the first
+ * semicolon (if there is a semicolon). It's a prototype if it's not a
+ * method and it contains brackets before a semicolon. It's a field if it's
+ * not a method or a prototype and it contains a semicolon. If it's not a
+ * field, a method or a prototype and we haven't recognised it previously
+ * then it's an error.
+ */
+ private static boolean isMethod(String s) throws ParsingException {
+ int semicolon = Utils.indexOf(s, ';');
+ int brace = Utils.indexOf(s, '{');
+ int bracket = Utils.indexOf(s, '(');
+
+ return (-1 != bracket && -1 != brace && bracket < brace && (-1 == semicolon || brace < semicolon));
+ }
+
+ private static boolean isPrototype(String s) throws ParsingException {
+ int semicolon = Utils.indexOf(s, ';');
+ int bracket = Utils.indexOf(s, '(');
+ return !isMethod(s) && -1 != semicolon && -1 != bracket
+ && bracket < semicolon;
+ }
+
+ private static boolean isField(String s) throws ParsingException {
+ int semicolon = Utils.indexOf(s, ';');
+ return !isMethod(s) && !isPrototype(s) && -1 != semicolon;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String toString() {
+ StringBuffer text = new StringBuffer();
+ for (int i = 0; i < parts.size(); i++) {
+ text.append(((FilePart) (parts.get(i))).toString());
+ }
+ return text.toString();
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
new file mode 100644
index 0000000000..813de0ff56
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MacroPart.java
@@ -0,0 +1,82 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+
+/*
+ * A C or C++ macro as it is used in the source code
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+class MacroPart extends FilePart {
+ /**
+ * Factory method to create a MacroPart.
+ *
+ * @param s
+ * unparsed source code which may start with a define or macro.
+ */
+ static MacroPart create(String s) {
+ String orig = getOriginalText(s);
+ if (null == orig)
+ return null;
+ return new MacroPart(orig);
+ }
+
+ MacroPart(String s) {
+ super(s, FilePart.MACRO);
+ }
+
+ /**
+ * @param s
+ * unparsed source code which may start with a define or macro.
+ * @return all of s up to the end of the define or macro.
+ */
+ private static String getOriginalText(String s) {
+ String name = getName(s);
+ int len = name.length();
+ if (null == name)
+ return null;
+ else if (Configuration.isDefine(name)) {
+ return s.substring(0, len);
+ } else if (Configuration.isMacro(name)) {
+ String rest = s.substring(len);
+ len += Utils.findMatching(rest, '(', ')');
+ return s.substring(0, len + 1);
+ } else
+ return null;
+ }
+
+ static boolean isAMacro(String s) {
+ if (s == null || 0 == s.length())
+ return false;
+ String name = getName(s);
+ return Configuration.isMacro(name) || Configuration.isDefine(name);
+ }
+
+ private static String getName(String s) {
+ int i;
+ for (i = 0; i < s.length(); i++)
+ if (!Character.isLetterOrDigit(s.charAt(i)) && '_' != s.charAt(i))
+ break;
+ if (s.length() == i)
+ return null;
+ return s.substring(0, i);
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java
new file mode 100644
index 0000000000..facebe84ef
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/MethodPart.java
@@ -0,0 +1,128 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.util.ArrayList;
+
+/**
+ * A C or C++ method from a piece of source code. The method has a signature and
+ * a body (the bit between the braces).
+ */
+public class MethodPart extends FilePart {
+ private Signature signature;
+
+ private String body;
+
+ MethodPart(String s, Signature signature, String body) {
+ super(s, METHOD);
+ this.signature = signature;
+ this.body = body;
+ }
+
+ public Signature getSignature() {
+ return signature;
+ }
+
+ public String getOriginalSignature() {
+ return signature.getOriginal();
+ }
+
+ /**
+ * Returns the method body as code snippets, each ending with a place where
+ * a trace statement belongs. The end of the first code snippet is where the
+ * entry trace should go. The end of every other snippet is a return from
+ * the method.
+ */
+ public BodyPart[] getBodyParts() throws ParsingException {
+ String b = body; // Don't alter field member
+ if (b.startsWith("{"))
+ b = b.substring(1);
+
+ // Add in trace exit at all the return statements in the method.
+ ArrayList al = new ArrayList();
+ int idxR = Utils.indexOf(b, "return");
+ int idxC = Utils.indexOf(b, "catch");
+ while (-1 != idxR || -1 != idxC) {
+ if (-1 == idxC || (-1 != idxR && idxR < idxC)) {
+ String frag = b.substring(0, idxR);
+ String rest = b.substring(idxR + "return".length());
+
+ int semicolon = Utils.indexOf(rest, ';');
+ if (-1 == semicolon)
+ Utils.rude("Missing semicolon in " + signature);
+ String retVal = rest.substring(0, semicolon);
+ BodyPart bp = new BodyPart(frag, retVal);
+ al.add(bp);
+ b = b.substring(idxR + "return".length() + retVal.length() + 1);
+ } else {
+ String frag = b.substring(0, idxC);
+ String rest = b.substring(idxC);
+
+ int brace = Utils.indexOf(rest, "{");
+ if (-1 == brace)
+ Utils.rude("Missing open brace in " + signature);
+ Signature signature = new Signature(rest.substring(0, brace));
+ frag = frag + rest.substring(0, brace + 1);
+ BodyPart bp = new BodyPart(frag, signature.getParameters()[0]);
+ al.add(bp);
+ b = rest.substring(brace + 1);
+ }
+ idxR = Utils.indexOf(b, "return");
+ idxC = Utils.indexOf(b, "catch");
+ }
+
+ // Add in trace exit before the last } if there are no returns in
+ // the method or there is code after the last return and the method
+ // returns void.
+ // int f1(){try{return f2();}catch(Exception& e){throw;}}
+ // has code after the last return but having a traceexit before the
+ // last brace wouldn't compile since the method returns an int. We
+ // cope with this by only adding in a traceexit before the last brace
+ // if the method returns void. That may mean we add in an unreachable
+ // traceexit which may give a compiler warning, but that should be
+ // benign.
+ //
+ // TODO: Not quite good enough for
+ // void f(int a){if(a){printf("a");}else{printf("!a");return;}}
+ // as a trace exit is needed before the last } in case a>0 but
+ // void f(int a){if(a){printf("a");return;}else{printf("!a");return;}}
+ // would give compiler warnings about unreachable code if a trace
+ // exit is added before the last brace. This could be tricky to fix.
+ if ((0 == al.size() || -1 != Utils.indexOf(b, ';'))
+ && null == signature.getReturnType().getType()) {
+
+ int last = b.lastIndexOf('}');
+ if (-1 == last)
+ Utils.rude("Missing end brace in " + signature);
+ String b2 = b.substring(0, last);
+ al.add(new BodyPart(b2));
+ b = b.substring(last);
+ }
+
+ // The final body part is the last }
+ al.add(new BodyPart(b));
+
+ BodyPart[] bps = new BodyPart[al.size()];
+ System.arraycopy(al.toArray(), 0, bps, 0, al.size());
+ return bps;
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java
new file mode 100644
index 0000000000..dc9d941849
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Options.java
@@ -0,0 +1,159 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ *
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Command line options passed to a tool's main program. All command line
+ * options should begin with a dash "-". Some command line options take a value
+ * which is the next parameter after the option. Others do not.
+ */
+public class Options {
+ static HashMap pairs = new HashMap();
+
+ static List values = new ArrayList();
+
+ /**
+ * No one constructs this class.
+ */
+ private Options() {
+ }
+
+ public static void reset() {
+ pairs = new HashMap();
+ values = new ArrayList();
+ }
+
+ /**
+ * Initialises the options based on the args passed to main
+ */
+ public static void set(String args[]) {
+ for (int i = 0; i < args.length; i++) {
+ if (args[i].startsWith("-")) {
+ if ((i + 1 <= args.length - 1) && // next one is testable
+ !args[i + 1].startsWith("-") // and it starts with a "-"
+ ) {
+ String key = args[i];
+ Object pairValue = pairs.get(key);
+ if (null == pairValue) {
+ pairs.put(args[i], args[i + 1]);
+ } else if (pairValue instanceof String) {
+ List l = new ArrayList();
+ l.add(pairValue);
+ l.add(args[i + 1]);
+ pairs.put(key, l);
+ } else if (pairValue instanceof List) {
+ ((List) pairValue).add(args[i + 1]);
+ }
+ i++; // Step over value for this key
+ } else
+ values.add(args[i]);
+ }
+ }
+ }
+
+ public static Object getOption(String key) {
+ return pairs.get(key);
+ }
+
+ static boolean isOptionSet(String key) {
+ return values.contains(key) || null!=pairs.get(key);
+ }
+
+ /**
+ * This option will cause scagen to print out messages
+ * about the artefacts it is processing
+ * @return
+ */
+ public static boolean verbose() {
+ return isOptionSet("-verbose");
+ }
+
+ /**
+ * This option will cause scagen to print out some
+ * basic internal log type messages
+ * @return
+ */
+ public static boolean debug() {
+ return isOptionSet("-debug");
+ }
+
+ /**
+ * This option will cause scagen to print out some
+ * text that can be used or pasted into a command
+ * file to copy all the relevant artefacts from
+ * where they are found or generated to a specific
+ * deployment location
+ *
+ * @return
+ */
+ public static boolean deploy() {
+ return isOptionSet("-deploy");
+ }
+
+ /**
+ * This option will prevent scagen from actually writing out
+ * the generated files. It is useful if used in conjunction
+ * with the "-deploy" option.
+ * @return
+ */
+ public static boolean noGenerate() {
+ return isOptionSet("-nogenerate");
+ }
+
+ /**
+ * This option is useful only when used in conjunction with
+ * the "-deploy" option. It changes the output to be more like the
+ * source code of a command script to copy the files to a
+ * specific place.
+ * @return
+ */
+ public static boolean outputCommand() {
+ return isOptionSet("-outputCommand");
+ }
+
+ /**
+ * This option is useful only when used in conjunction with
+ * the "-deploy" option. It changes the output to be a simple
+ * list of artefacts. It has no effect if the "-outputCommand"
+ * option is set.
+ *
+ * @return
+ */
+ public static boolean list() {
+ return isOptionSet("-list");
+ }
+
+ /**
+ * This option is maintained for compatibility with the
+ * original package source. It is not used by new scagen code.
+ *
+ * @return
+ */
+ public static boolean quiet() {
+ return isOptionSet("-quiet");
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Parameter.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Parameter.java
new file mode 100644
index 0000000000..3f4b3e971e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Parameter.java
@@ -0,0 +1,211 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ *
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * A parameter from a method signature. The parameter is the datatype plus its
+ * name but not its value.
+ */
+public class Parameter {
+ private ArrayList type = new ArrayList();
+
+ private String name = null;
+
+ private boolean failed = false;
+
+ /**
+ * Defaults to a parameter in a parameter list so it HAS a parameter name in
+ * it
+ */
+ Parameter(List parts) {
+ this(parts, false);
+ }
+
+ /**
+ * A parameter which is a return type does not have a parameter name.
+ * Parameters in a parameter list do have parameter names embedded in them
+ */
+ Parameter(List parts, boolean isRetType) {
+ if (parts == null || parts.size() == 0)
+ return;
+
+ // Tuscany: The original code below from apache axis blocks int
+ // getCustomer(long)
+ // i.e. no spaces in parameter list.
+ // We do not need to deal with "..." as parameters to SCS methods.
+ //
+ // if (!isRetType && parts.size() == 1) {
+ // if ("...".equals(parts.get(0))) {
+ // type.add("...");
+ // name = "";
+ // } else if (!"void".equals(parts.get(0)))
+ // failed = true; // Seems like bad C++ code here
+ // return;
+ // }
+
+ if (isRetType) {
+ Iterator it = parts.iterator();
+ while (it.hasNext())
+ type.add(it.next());
+
+ // Some methods return have void on their signature and others
+ // have nothing. So to make them both the same, if a method
+ // doesn't return anything make type null.
+ // TODO: This assumption is wrong - methods that return nothing
+ // default to returning an int!
+ if (1 == type.size() && "void".equals(type.get(0)))
+ type = new ArrayList();
+
+ } else {
+ // Cope with array subscripts [] after the name
+ int arrIdx = -1;
+ for (int i = 0; i < parts.size(); i++) {
+ String tok = (String) parts.get(i);
+ if ("[".equals(tok)) {
+ arrIdx = i;
+ break;
+ }
+ }
+
+ // Find the name
+ int nameIdx = parts.size() - 1;
+ if (-1 != arrIdx)
+ nameIdx = arrIdx - 1;
+
+ // Even in real method declarations, parameters may not have a name
+ boolean noName = false;
+ name = (String) parts.get(nameIdx);
+ // Tuscany: The original code below from apache axis
+ // was updated to work with signatures of
+ // the form fn(int) a non-named, no-space, parameter list.
+ // if (Utils.cPrimitives.contains(name) ||
+ // Utils.cTypeQualifiers.contains(name) )
+ //
+ if (Utils.cPrimitives.contains(name)
+ || Utils.cTypeQualifiers.contains(name)
+ || parts.size() == 1)
+ noName = true;
+
+ if (noName) {
+ name = null;
+ for (int i = 0; i < parts.size(); i++)
+ type.add(parts.get(i));
+ } else {
+ // Construct the type
+ for (int i = 0; i < nameIdx; i++)
+ type.add(parts.get(i));
+
+ if (-1 != arrIdx)
+ for (int i = arrIdx; i < parts.size(); i++)
+ type.add(parts.get(i));
+ }
+ }
+ }
+
+ public boolean failed() {
+ return failed;
+ }
+
+ public String getType() {
+ String s = null;
+ Iterator it = type.iterator();
+ while (it.hasNext()) {
+ String next = (String) it.next();
+ if (null == s)
+ s = next;
+ else if ("*".equals(next) || "&".equals(next))
+ s += next;
+ else
+ s += " " + next;
+ }
+ return s;
+ }
+
+ public String getTypeWithoutConst() {
+ String s = null;
+ Iterator it = type.iterator();
+ while (it.hasNext()) {
+ String next = (String) it.next();
+ if ("const".equals(next))
+ continue;
+ else if (null == s)
+ s = next;
+ else if ("*".equals(next) || "&".equals(next))
+ s += next;
+ else
+ s += " " + next;
+ }
+ return s;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public boolean isVoid() {
+ return 0 == type.size();
+ }
+
+ public boolean isDotDotDot() {
+ return 1 == type.size() && "...".equals(type.get(0));
+ }
+
+ /**
+ * For two parameters to match their types must match or both be null, but
+ * the parameters names don't have to match. Just because a parameter is
+ * called something different in a header file as in the the source file
+ * doesn't mean it's a different parameter.
+ */
+ public boolean equals(Object o) {
+ if (null == o || !(o instanceof Parameter))
+ return false;
+ Parameter that = (Parameter) o;
+ if (type.size() != that.type.size())
+ return false;
+ for (int i = 0; i < type.size(); i++) {
+ String s1 = (String) type.get(i);
+ String s2 = (String) that.type.get(i);
+ if (!Utils.safeEquals(s1, s2))
+ return false;
+ }
+ return true;
+ }
+
+ public String toString() {
+ if (0 == type.size())
+ return "void";
+ if (null == name)
+ return getType();
+ return getType() + " " + name;
+ }
+
+ public Iterator iterator() {
+ if (null == type)
+ return null;
+ return type.iterator();
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/ParsingException.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/ParsingException.java
new file mode 100644
index 0000000000..3f140c0f9f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/ParsingException.java
@@ -0,0 +1,42 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ *
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+public class ParsingException extends Exception {
+
+ public ParsingException() {
+ super();
+ }
+
+ public ParsingException(String message) {
+ super(message);
+ }
+
+ public ParsingException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public ParsingException(Throwable cause) {
+ super(cause);
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/PrototypePart.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/PrototypePart.java
new file mode 100644
index 0000000000..64ed2e9542
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/PrototypePart.java
@@ -0,0 +1,51 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ *
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+/**
+ * A function prototype in an include file and possibly in a class definition.
+ */
+public class PrototypePart extends FilePart {
+ private Signature signature;
+
+ public PrototypePart(String s, String className, String namespace) {
+ super(s, PROTOTYPE);
+ signature = new Signature(s);
+ if (null != className)
+ signature.setClassName(className);
+ if (null != namespace && namespace.length()>0)
+ signature.setNamespace(namespace);
+ }
+
+ String className() {
+ return signature.getClassName();
+ }
+
+ public Signature getSignature() {
+ return signature;
+ }
+
+ public void setScope(String scope) {
+ signature.setScope(scope);
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Signature.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Signature.java
new file mode 100644
index 0000000000..3650839cab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Signature.java
@@ -0,0 +1,501 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * Branched from the original class that was also contributed to the
+ * org.apache.axis.tools.common package.
+ *
+ */
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A C or C++ method signature with the ability to parse it. TODO: properly
+ * support variable length argument lists using "..." TODO: passing or returning
+ * function pointers (hopefully not needed) TODO: Cope with ~ <space>Classname()
+ */
+public class Signature {
+ private String originalText;
+
+ private String attributes;
+
+ private String className = null;
+
+ private String namespace = null;
+
+ private String methodName = null;
+
+ private Parameter returnType = null;
+
+ private Parameter[] params = null;
+
+ private String trailingAttributes;
+
+ private String scope = "public";
+
+ private boolean failed = false;
+
+ private boolean traceable = true;
+
+ private final static Set knownAttrs = new HashSet(Arrays
+ .asList(new Object[] { "public", "private", "extern", "\"C\"",
+ "virtual", "static", "inline" }));
+
+ private final static Set specialOperators = new HashSet(
+ Arrays.asList(new Object[] { "(", ")", "*", ",", "&", "]", "[",
+ "=", "~" }));
+
+ /**
+ * Takes an unparsed signature string and parses it.
+ *
+ * TODO: Should optionally pass in the className here in case it's an inline
+ * method implementation inside the class{}. Just so the className comes out
+ * in the trace.
+ */
+ Signature(String s) {
+ originalText = s;
+
+ try {
+ List tokens = tokenise(s);
+
+ ArrayList alAttrs = new ArrayList();
+ ArrayList alName = new ArrayList();
+ ArrayList alParms = new ArrayList();
+ ArrayList alTrailAttrs = new ArrayList();
+ ArrayList alInits = new ArrayList();
+ if (!splitUp(tokens, alAttrs, alName, alParms, alTrailAttrs,
+ alInits)) {
+ failed = true;
+ return;
+ }
+
+ parseAttributes(alAttrs);
+ parseNameAndRetType(alName);
+ parseParameters(alParms);
+ parseTrailingAttributes(alTrailAttrs);
+
+ // Ignore any tokens after the ) since these are (hopefully)
+ // constructor initialisers
+
+ traceable = !Configuration.methodExcluded(className, methodName);
+ } catch (NullPointerException npe) {
+ failed = true;
+ traceable = false;
+ }
+ }
+
+ /**
+ * Parse the signature into tokens. This removes whitespace and comments and
+ * separates out "*", ",", "(", ")", "&", "[" and "]".
+ */
+ private static List tokenise(String s) {
+ ArrayList tokens = new ArrayList();
+ String tok = null;
+ boolean space = true;
+ for (int i = 0; i < s.length(); i++) {
+ char c = s.charAt(i);
+ if (Character.isWhitespace(c)) {
+ space = true;
+ continue;
+ }
+ if (space) {
+ if (tok != null)
+ tokens.add(tok);
+ tok = "" + c;
+ } else
+ tok += c;
+ space = false;
+
+ if (tok.endsWith("/*")) {
+ String sub = s.substring(i);
+ int endcomm = sub.indexOf("*/");
+ if (endcomm == -1)
+ break;
+ i += endcomm + 1;
+ if (tok.equals("/*"))
+ tok = "";
+ else
+ tok = tok.substring(0, tok.length() - 2);
+ continue;
+ }
+
+ if (tok.endsWith("//")) {
+ String sub = s.substring(i);
+ int endcomm = sub.indexOf("\n");
+ if (endcomm == -1)
+ break;
+ i += endcomm;
+ if (tok.equals("//"))
+ tok = "";
+ else
+ tok = tok.substring(0, tok.length() - 1);
+ continue;
+ }
+
+ if (tok.endsWith("::"))
+ space = true;
+
+ String sc = "" + c;
+ if (specialOperators.contains(sc)) {
+ if (!tok.equals(sc)) {
+ tokens.add(tok.substring(0, tok.length() - 1));
+ tok = sc;
+ }
+ space = true;
+ }
+ }
+ tokens.add(tok);
+ return tokens;
+ }
+
+ /**
+ * Split up a tokenised method signature into a list of attributes, a list
+ * of name and return type tokens, a list of parameter tokens and a list of
+ * initialiser tokens.
+ */
+ private static boolean splitUp(List tokens, List attrs, List nameAndRet,
+ List parms, List trailAttrs, List inits) {
+
+ // nameStart points to the start of the return type if there is one
+ // else the start of the method name
+ int nameStart;
+ for (nameStart = 0; nameStart < tokens.size(); nameStart++) {
+ String tok = (String) (tokens.get(nameStart));
+ if (!knownAttrs.contains(tok) && !Configuration.isAttribute(tok))
+ break;
+ }
+ if (nameStart == tokens.size())
+ return false;
+
+ // initStart points to the initialisers, or thrown exceptions after
+ // the parameter list. throw is a keyword so we can safely search for
+ // it.
+ int initStart = tokens.size();
+ for (int i = nameStart; i < tokens.size(); i++) {
+ String tok = (String) tokens.get(i);
+ if ((tok.startsWith(":") && !tok.startsWith("::"))
+ || "throw".equals(tok))
+ initStart = i;
+ }
+
+ int parmEnd;
+ for (parmEnd = initStart - 1; parmEnd > nameStart; parmEnd--)
+ if (")".equals(tokens.get(parmEnd)))
+ break;
+ if (parmEnd == nameStart)
+ return false;
+
+ int parmStart = parmEnd;
+ for (parmStart = parmEnd; parmStart > nameStart; parmStart--)
+ if ("(".equals(tokens.get(parmStart)))
+ break;
+
+ for (int i = 0; i < tokens.size(); i++) {
+ Object tok = tokens.get(i);
+ if (i < nameStart || Configuration.isAttribute((String) tok))
+ attrs.add(tok);
+ else if (i < parmStart)
+ nameAndRet.add(tok);
+ else if (i <= parmEnd)
+ parms.add(tok);
+ else if (i < initStart)
+ trailAttrs.add(tok);
+ else
+ inits.add(tok);
+ }
+ return true;
+ }
+
+ private void parseAttributes(List list) {
+ attributes = new String();
+ Iterator it = list.iterator();
+ while (it.hasNext()) {
+ if (attributes.length() > 0)
+ attributes += " ";
+ String next = (String) it.next();
+
+ //Tuscancy
+ //the scope is not present in the attributes
+ //but is set later in the InputCppSource contructor
+ if ("public".equals(next) || "protected".equals(next)
+ || "private".equals(next))
+ scope = next;
+ attributes += next;
+ }
+ }
+
+ private void parseNameAndRetType(List list) {
+ int size = list.size();
+ int idx;
+ // "operator" is a key word so if it's present we know we're
+ // dealing with operator overloading. The operator that's been
+ // overloaded might have been split up into multiple tokens.
+ for (idx = 0; idx < size; idx++)
+ if ("operator".equals(list.get(idx)))
+ break;
+
+ if (idx < size) {
+ methodName = "";
+ for (int i = idx; i < size; i++)
+ methodName += (String) list.get(i);
+ } else { // No operator overloading
+ methodName = "" + list.get(size - 1);
+ idx = size - 1;
+ }
+
+ // If it's a destructor, the "~" will be split out into a separate
+ // token, so add it onto the methodName here.
+ if (idx > 0 && "~".equals(list.get(idx - 1))) {
+ methodName = "~" + methodName;
+ idx--;
+ }
+
+ // The class name comes before the method name
+ while (idx > 0 && ((String) list.get(idx - 1)).endsWith("::")) {
+ if (null == className)
+ className = (String) list.get(idx - 1);
+ else
+ className = (String) list.get(idx - 1) + className;
+ idx--;
+ }
+
+ // Whatever's left before the classname/methodname must be the
+ // return type
+ ArrayList retParm = new ArrayList();
+ for (int i = 0; i < idx; i++)
+ retParm.add(list.get(i));
+
+ returnType = new Parameter(retParm, true);
+ }
+
+ /**
+ * Constructs the parameter list
+ */
+ private void parseParameters(List list) {
+ ArrayList alParams = new ArrayList();
+ Iterator it = list.iterator();
+ String token = (String) it.next(); // step over the (
+ while (it.hasNext() && !")".equals(token)) {
+ token = (String) it.next();
+
+ int template = 0; // Depth of template scope
+ boolean foundEquals = false;
+ // Ignore default value for an optional parameter
+ ArrayList parm = new ArrayList();
+ while (!token.equals(")") && (!token.equals(",") || template > 0)) {
+ if (token.equals("="))
+ foundEquals = true;
+ if (!foundEquals)
+ parm.add(token);
+ if (contains(token, "<"))
+ template++;
+ if (contains(token, ">"))
+ template--;
+ token = (String) it.next();
+ }
+
+ // No parameters so break out
+ if (token.equals(")") && 0 == parm.size())
+ break;
+
+ Parameter p = new Parameter(parm);
+ if (p.failed()) {
+ failed = true;
+ return;
+ }
+
+ // Copes with void func(void)
+ if (!p.isVoid())
+ alParams.add(p);
+ }
+
+ int size = alParams.size();
+ if (size > 0) {
+ params = new Parameter[size];
+ System.arraycopy(alParams.toArray(), 0, params, 0, size);
+ }
+ }
+
+ private void parseTrailingAttributes(List list) {
+ trailingAttributes = new String();
+ Iterator it = list.iterator();
+ while (it.hasNext()) {
+ if (trailingAttributes.length() > 0)
+ trailingAttributes += " ";
+ trailingAttributes += (String) it.next();
+ }
+ }
+
+ public String getOriginal() {
+ return originalText;
+ }
+
+ public int originalLength() {
+ return originalText.length();
+ }
+
+ public boolean failed() {
+ return failed;
+ }
+
+ public String getAttributes() {
+ return attributes;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ /**
+ * @param namespace The namespace to set.
+ */
+ public void setNamespace(String namespace) {
+ this.namespace = namespace;
+ }
+
+ /**
+ * @return Returns the namespace.
+ */
+ public String getNamespace() {
+ return namespace;
+ }
+
+ public String getTrimClassName() {
+ return trimClassName(className);
+ }
+
+ public String getMethodName() {
+ return methodName;
+ }
+
+ public Parameter getReturnType() {
+ return returnType;
+ }
+
+ public Parameter[] getParameters() {
+ return params;
+ }
+
+ public boolean isConstructor() {
+ return className != null && methodName != null
+ && trimClassName(className).equals(methodName);
+ }
+
+ public boolean isDestructor() {
+ return className != null && methodName != null
+ && methodName.startsWith("~")
+ && methodName.endsWith(trimClassName(className));
+ }
+
+ private static String trimClassName(String name) {
+ if (name.endsWith("::"))
+ return name.substring(0, name.length() - 2);
+ return name;
+ }
+
+ void setClassName(String className) {
+ if (null == className)
+ return;
+ if (!className.endsWith("::"))
+ className += "::";
+ this.className = className;
+ }
+
+ public String getScope() {
+ return scope;
+ }
+
+ /**
+ * Sets the scope, but only if the scope is not set by an explicit attribute
+ * in the signature.
+ */
+ public void setScope(String scope) {
+ if (-1 == attributes.indexOf(this.scope))
+ this.scope = scope;
+ }
+
+ /**
+ * Should this method be traced?
+ */
+ public boolean traceable() {
+ return traceable;
+ }
+
+ private static boolean contains(String src, String tgt) {
+ if (src == null || tgt == null)
+ return false;
+ if (-1 == src.indexOf(tgt))
+ return false;
+ return true;
+ }
+
+ public boolean equals(Object obj) {
+ if (null == obj || !(obj instanceof Signature))
+ return false;
+ Signature that = (Signature) obj;
+ if (!Utils.safeEquals(className, that.className))
+ return false;
+ if (!Utils.safeEquals(methodName, that.methodName))
+ return false;
+ if (!Utils.safeEquals(returnType, that.returnType))
+ return false;
+ if (null == params && null == that.params)
+ return true;
+ if (null != params && null == that.params)
+ return false;
+ if (null == params && null != that.params)
+ return false;
+ if (params.length != that.params.length)
+ return false;
+ for (int i = 0; i < params.length; i++)
+ if (!Utils.safeEquals(params[i], that.params[i]))
+ return false;
+ return true;
+ }
+
+ public String toStringWithoutAttrs() {
+ String s = new String();
+ if (returnType != null)
+ s += returnType + " ";
+ if (className != null)
+ s += className;
+ s += methodName + "(";
+ for (int i = 0; params != null && i < params.length; i++) {
+ if (i > 0)
+ s += ", ";
+ s += params[i].toString();
+ }
+ s += ")";
+ return s;
+ }
+
+ public String toString() {
+ String s = attributes;
+ if (attributes.length() > 0)
+ s += " ";
+ s += toStringWithoutAttrs();
+ if (trailingAttributes.length() > 0)
+ s += " " + trailingAttributes;
+ return s;
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Utils.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Utils.java
new file mode 100644
index 0000000000..5bd80fc37a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/Utils.java
@@ -0,0 +1,543 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+/*
+* Branched from the original class that was also contributed to the
+* org.apache.axis.tools.common package.
+*
+*/
+package org.apache.tuscany.sca.cpp.tools.common;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+//Apache Common Logging
+//import org.apache.commons.logging.Log;
+//import org.apache.commons.logging.LogFactory;
+
+/**
+* Static utility methods. Some of these methods are similar to the methods on
+* java.lang.String except they are aware of C/C++ comments and string literals.
+*
+* TODO: Many of these methods would perform better using StringBuffer not
+* String
+*/
+public final class Utils {
+ // All the C primitive data types
+ public final static Set cPrimitives = new HashSet(Arrays
+ .asList(new Object[] { "void", "byte", "char", "unsigned",
+ "signed", "int", "short", "long", "double", "float",
+ "struct", "class", "enum", "union" }));
+
+ // All the qualifiers that can affect C types
+ public final static Set cTypeQualifiers = new HashSet(
+ Arrays.asList(new Object[] { "(", ")", "*", ",", "&", "]", "[",
+ "const" }));
+
+ public final static String whitespace = " \t\r\n";
+
+ //private static Log log = LogFactory.getLog(CLASS.class);
+
+ /**
+ * Never instantiate this class
+ */
+ private Utils() {
+ }
+
+ /**
+ * Is this string all whitespace?
+ */
+ static boolean isSpace(String s) {
+ for (int i = 0; i < s.length(); i++)
+ if (!Character.isWhitespace(s.charAt(i)))
+ return false;
+ return true;
+ }
+
+ // TODO look for other trailing chars like { (because of class{)
+ static boolean startsWith(String source, String target) {
+ if (source == null || target == null)
+ return false;
+ if (!source.startsWith(target))
+ return false;
+ if (source.length() == target.length())
+ return true;
+ if (Character.isWhitespace(source.charAt(target.length())))
+ return true;
+ return false;
+ }
+
+ /**
+ * Performs a C-aware version of String.indexOf(char) in that it skips
+ * characters in string literals and comments.
+ */
+ static int indexOf(String s, char c) throws ParsingException {
+ if ('"' == c)
+ rude("Utils.indexOf cannot be passed quotes");
+
+ for (int i = 0; i < s.length(); i++) {
+ if (s.charAt(i) == c)
+ return i;
+
+ i = skip(s.substring(i), i);
+ if (-1 == i)
+ return -1;
+ }
+ return -1;
+ }
+
+ /**
+ * Performs a C-aware version of String.indexOf(String) in that it skips
+ * characters in string literals and comments and makes sure that the target
+ * string is not embedded in a longer word.
+ */
+ static int indexOf(String s, String t) {
+ char t0 = t.charAt(0);
+ for (int i = 0; i < s.length(); i++) {
+ if (s.charAt(i) == t0
+ && s.substring(i).startsWith(t)
+ && (0 == i || !Character.isLetterOrDigit(s.charAt(i - 1)))
+ && (s.length() == (i + t.length()) || !Character
+ .isLetterOrDigit(s.charAt(i + t.length()))))
+ return i;
+
+ i = skip(s.substring(i), i);
+ if (-1 == i)
+ return -1;
+ }
+ return -1;
+ }
+
+ /**
+ * Matches braces or quotes and is C-aware. It skips characters in string
+ * literals and comments.
+ */
+ static int findMatching(String s, char c1, char c2) {
+ int depth = 0;
+ for (int i = 0; i < s.length(); i++) {
+ if (s.charAt(i) == c1)
+ depth++;
+ else if (s.charAt(i) == c2) {
+ depth--;
+ if (depth == 0)
+ return i;
+ } else {
+ i = skip(s.substring(i), i);
+ if (-1 == i)
+ return -1;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * Failed to parse the source code for some reason. This method prints out a
+ * suitably rude message, and then what? I haven't quite decided yet.
+ *
+ * TODO: Do something sensible here like throw an Exception which will give
+ * up on this file completely and tidy up the output file. It may be just
+ * too dangerous to try to carry on. But we need to fail in such a way that
+ * the build system knows that we've failed for this file and can build this
+ * file without trace.
+ */
+ public static void rude(String reason, String filename, int lineno,
+ String codefragment) throws ParsingException {
+
+ String text = "Bad C++ code!! ";
+ if (reason != null)
+ text += reason;
+ if (filename != null)
+ text += " " + filename + " lineno=" + lineno;
+ if (codefragment != null)
+ text += " <" + codefragment + ">";
+ System.err.println(text);
+ throw new ParsingException();
+ }
+
+ /**
+ * This method reports an error level problem
+ *
+ * @param reason
+ * why we have an error level problem
+ */
+ public static void rude(String reason) throws ParsingException {
+ // Apache commons logging
+ // log.error(Object line, null);
+ // or for now....
+ rude(reason, null, 0, null);
+ }
+
+ /**
+ * This method reports an error level problem
+ *
+ * @param reason
+ * why we have an error level problem
+ */
+ public static void screenMessage(String msg) {
+ // Apache commons logging
+ // log.error(Object line, null);
+ // or for now....
+ System.out.println(msg);
+ }
+
+ /**
+ * Escapes special characters like " so that they can be output in a C
+ * string literal. Also removes newlines, since C string literals can't be
+ * split over lines.
+ */
+ String pretty(String s) {
+ StringBuffer sb = new StringBuffer(s);
+ for (int i = 0; i < sb.length(); i++)
+ switch (sb.charAt(i)) {
+ case '"':
+ sb = sb.insert(i, '\\');
+ i++;
+ break;
+ case '\n':
+ sb = sb.deleteCharAt(i);
+ i--;
+ break;
+ }
+ return sb.toString();
+ }
+
+ private static boolean startsWithComment(String s) {
+ if (null == s || s.length() < 2)
+ return false;
+ if (s.startsWith("//"))
+ return true;
+ if (s.startsWith("/*"))
+ return true;
+ return false;
+ }
+
+ private static int endOfComment(String s) {
+ int idx;
+ if (s.startsWith("//"))
+ idx = s.indexOf("\n");
+ else {
+ idx = s.indexOf("*/");
+ if (-1 != idx)
+ idx++; // Step over */
+ }
+ return idx;
+ }
+
+ private static boolean startsWithStringLiteral(String s) {
+ if (null == s || s.length() < 1)
+ return false;
+ if (s.startsWith("\"") || s.startsWith("'"))
+ return true;
+ return false;
+ }
+
+ private static int endOfStringLiteral(String s) {
+ boolean escape = false;
+ char c0 = s.charAt(0);
+ for (int i = 1; i < s.length(); i++) {
+ if (!escape && s.charAt(i) == c0)
+ return i;
+
+ // \" or \' does not end the literal
+ if ('\\' == s.charAt(i))
+ // Escaping a \ should switch escape off so \\' does end
+ // the literal
+ escape = !escape;
+ else
+ escape = false;
+ }
+ return -1;
+ }
+
+ /**
+ * If the String s starts with a string literal or a comment, return i plus
+ * the index of the end of the literal or comment. String literals are
+ * enclosed in " or ' and comments start with /* or //.
+ */
+ private static int skip(String s, int i) {
+ int j = 0;
+ if (startsWithStringLiteral(s)) {
+ j = endOfStringLiteral(s);
+ if (-1 == j)
+ return -1;
+ } else if (startsWithComment(s)) {
+ j = endOfComment(s);
+ if (-1 == j)
+ return -1;
+ }
+ return i + j;
+ }
+
+ /**
+ * A better method than .equals() because it doesn't NullPointerException
+ * when one of the parameters is null.
+ */
+ public static boolean safeEquals(Object o1, Object o2) {
+ if (null == o1 && null == o2)
+ return true;
+ if (null == o1 && null != o2)
+ return false;
+ if (null != o1 && null == o2)
+ return false;
+ return o1.equals(o2);
+ }
+
+ public static void outputDebugString(String line) {
+ if (!Options.quiet()) {
+ if (Options.debug())
+ // Apache commons logging
+ // log.debug(Object line, null);
+ // or for now
+ System.out.println(line);
+ }
+ }
+
+ /**
+ * This static method allows different parts of the code to inform about
+ * significant events. Code interested in specific types of event can
+ * register a listener against that type (not written yet)
+ *
+ * @param eventType
+ * An int type enum indicating the type of event.
+ * @param message
+ * A message that can be output to the user.
+ */
+ public static final int EVENT_TYPE_XML_ITEM_PARSED = 1;
+
+ public static final int EVENT_TYPE_FILE_PARSED = 2;
+
+ public static final int EVENT_TYPE_FILE_CREATE = 3;
+
+ public static final int VERBOSE_LIMIT = 1024;
+
+ public static final int DEPLOYMENT_ARTEFACT = VERBOSE_LIMIT;
+
+ public static final int DEPLOYMENT_ARTEFACT_ENCOUNTERED = DEPLOYMENT_ARTEFACT + 1;
+
+ public static final int DEPLOYMENT_ARTEFACT_GENERATED = DEPLOYMENT_ARTEFACT + 2;
+
+ public static final int DEPLOYMENT_INPUT_DIRECTORY = DEPLOYMENT_ARTEFACT + 3;
+
+ public static final int DEPLOYMENT_OUTPUT_DIRECTORY = DEPLOYMENT_ARTEFACT + 4;
+
+ private static boolean reportArtefacts = false;
+
+ /**
+ * An easily callable method to allow tracking/reposting of events in scagen
+ * and other tools.
+ *
+ * @param eventType
+ * used for classifying event
+ * @param message
+ * a user readable message
+ */
+ public static void postEvent(int eventType, String message) {
+ if (Options.verbose() && eventType < VERBOSE_LIMIT) {
+ screenMessage(message);
+ }
+
+ if ((eventType & DEPLOYMENT_ARTEFACT) > 0) {
+ reportArtefact(message, eventType);
+ }
+
+ }
+
+ /**
+ * @param message
+ * The user message
+ * @param eventType
+ * The type of event (input or output). This is used to determine
+ * if the path name of the file starts with the MODULE_ROOT
+ * directory or the given output directory as the one of these
+ * prefixes is removed from the path name in order to give the
+ * new (destination) path relative to the new module root
+ *
+ *
+ */
+
+ static String scagenInputDir = "MODULE_ROOT";
+
+ static String scagenOutputDir = "SCAGEN_OUTPUT";
+
+ static String newModuleRoot = "NEW_MODULE_ROOT";
+
+ static String generatedDirName = "$sourceDir1";
+
+ private static void reportArtefact(String message, int eventType) {
+
+ if (Utils.isReportArtefacts()) {
+
+ // Changing the value of the variable below will alter the output of
+ // the
+ // deploy assist strings:
+ // true will result in a "copy source NEW_MODULE_ROOT\dest" output
+ // and
+ // false will result in a "inputDir c:\fred"
+ // "outputDir c:\bob"
+ // "input c:\fred\sca.module"
+ // "output c:\bob\proxy.h" type output
+ String command = null;
+
+ try {
+ newModuleRoot = (String) Options.getOption("-deploy");
+ command = (String) Options.getOption("-command");
+ } catch (Exception e) {
+ // let it default
+ }
+
+ if (null == newModuleRoot) {
+ newModuleRoot = "DEPLOY_MODULE_ROOT";
+ }
+
+ if (null == command) {
+ command = "copy";
+ }
+
+ if (Options.outputCommand()) {
+
+ String tail = message;
+ switch (eventType) {
+ case DEPLOYMENT_ARTEFACT_ENCOUNTERED:
+ if (message.startsWith(scagenInputDir)) {
+ tail = message.substring(scagenInputDir.length());
+ }
+
+ String dest = joinPathElements(newModuleRoot, tail);
+
+ System.out.println(command + " " + platformSlashes(message)
+ + " " + platformSlashes(dest));
+ break;
+
+ case DEPLOYMENT_ARTEFACT_GENERATED:
+ if (message.startsWith(scagenOutputDir)) {
+ tail = message.substring(scagenOutputDir.length());
+ }
+
+ dest = joinPathElements(newModuleRoot, tail);
+ System.out.println(command + " " + platformSlashes(message)
+ + " " + platformSlashes(dest));
+ break;
+ case DEPLOYMENT_INPUT_DIRECTORY:
+ scagenInputDir = message;
+ //System.out.println("inputDir " + message);
+ break;
+ case DEPLOYMENT_OUTPUT_DIRECTORY:
+ scagenOutputDir = message;
+ //System.out.println("outputDir " + message);
+ break;
+ default:
+ break;
+ }
+
+ } else {
+
+ if (Options.list()) {
+ switch (eventType) {
+ case DEPLOYMENT_ARTEFACT_ENCOUNTERED:
+ case DEPLOYMENT_ARTEFACT_GENERATED:
+ System.out.println(platformSlashes(message));
+ break;
+ case DEPLOYMENT_INPUT_DIRECTORY:
+ case DEPLOYMENT_OUTPUT_DIRECTORY:
+ default:
+ break;
+ }
+ } else {
+ switch (eventType) {
+ case DEPLOYMENT_ARTEFACT_ENCOUNTERED:
+ //TODO make efficient
+ System.out.println("$sourceDir1"
+ + platformSlashes(message.substring(scagenInputDir.length())));
+ break;
+ case DEPLOYMENT_ARTEFACT_GENERATED:
+ //TODO make efficient
+ System.out.println(generatedDirName
+ + platformSlashes(message.substring(scagenOutputDir.length())));
+ break;
+ case DEPLOYMENT_INPUT_DIRECTORY:
+ scagenInputDir = platformSlashes(message);
+ System.out.println("sourceDir1=" + scagenInputDir);
+ break;
+ case DEPLOYMENT_OUTPUT_DIRECTORY:
+ scagenOutputDir = platformSlashes(message);
+ if (!scagenInputDir.equals(scagenOutputDir)) {
+ generatedDirName = "$sourceDir2";
+ System.out.println("sourceDir2=" + scagenOutputDir);
+ } else {
+ //generatedDirName = "sourceDir1";
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * @param tail
+ * @param tail
+ * @return
+ */
+ public static String joinPathElements(String root, String tail) {
+ String separator;
+ // Stick in a "/" (File.separator) if required.
+ if ((tail.substring(0, 1).equals("/") || newModuleRoot.substring(
+ root.length() - 1, root.length()).equals("/"))
+ || (tail.substring(0, 1).equals("\\") || root.substring(
+ root.length() - 1, root.length()).equals("\\"))
+
+ ) {
+ separator = "";
+ } else {
+ separator = File.separator;
+ }
+ String dest = newModuleRoot + separator + tail;
+ return dest;
+ }
+
+ /**
+ * @param reportArtefacts
+ * The reportArtefacts to set.
+ */
+ public static void setReportArtefacts(boolean reportArtefacts) {
+ Utils.reportArtefacts = reportArtefacts;
+ }
+
+ /**
+ * @return Returns the reportArtefacts.
+ */
+ private static boolean isReportArtefacts() {
+ return reportArtefacts;
+ }
+
+ private static String platformSlashes(String path) {
+ if (null == path) {
+ return path;
+ }
+ // We need a double level of \\ escapes if the slashes are
+ // this way round.
+ String separatorForRegex = File.separator
+ .replaceAll("\\\\", "\\\\\\\\");
+ return path.replaceAll("[/\\\\]+", separatorForRegex);
+
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/package.html b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/package.html
new file mode 100644
index 0000000000..c86184f441
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/common/package.html
@@ -0,0 +1,39 @@
+<html>
+
+<head>
+<title>Design documentation for org\apache\tuscany\sca\cpp\tools\common</title>
+</head>
+
+<body lang=EN-GB>
+
+<div class=Section1>
+
+<h1>Overview</h1>
+
+This package can be used to reflect across C++ source code. It can produce
+a network of descriptive objects describing C++ Headers, Signatures, Parameters and so
+on that it finds in a given location of the file system.
+Each of the descriptive objects has a set of getters that return either
+the descriptive child objects, or for primitives, the string that represents the actual
+value such as "int" or "myFunction".
+<p>
+There are also various utility methods that help with navigating the information, for example the Signature
+class has an isConstructor method. The API Javadoc contains further details of these.
+<p>
+The package can scan a directory using a file mask to identify what types
+of files are to be scanned. In this application we are interested only
+in the function prototypes in the C++ header files.
+<p>
+The implementation was originated using some java code that was also
+contributed to the Apache org.apache.axis.tools.common package. Care
+has been taken that the original code was not sourced via Apache. If
+this project is adopted by Apache then it is very possible that this
+package could be merged with or made obsolete by org.apache.axis.tools.common
+and because of this the design and interfaces have been preserved from
+the original code as much as possible.
+
+<p>
+</div>
+</body>
+
+</html>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentDomNodeHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentDomNodeHandler.java
new file mode 100644
index 0000000000..60bc8395e1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentDomNodeHandler.java
@@ -0,0 +1,360 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.tuscany.sca.cpp.tools.common.Headers;
+import org.apache.tuscany.sca.cpp.tools.common.Signature;
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+import org.w3c.dom.Node;
+
+/**
+ * This class will do the required processing for the <component>element of a
+ * sca module or fragment file.
+ */
+public class ComponentDomNodeHandler extends GenericDomNodeHandler {
+
+ /**
+ * This method will do the "normal" processing and then trigger a call to
+ * processComponentNode.
+ *
+ * @param node
+ * the node being processed
+ * @param contextXPath
+ * the XPath to the node
+ * @param handlers
+ * the map pf element names to DomNodeHandlers
+ * @param parameters
+ * a map of XPaths to parameters values found so far
+ */
+
+ public void handleNode(Node node, String contextXPath, Map handlers,
+ Map parameters) {
+
+ // Pick up attrs and the interface.cpp child elements
+ super.handleNode(node, contextXPath, handlers, parameters);
+
+ try {
+ //OK now go and create the wrapper and proxy for the service
+ processComponentNode(contextXPath, parameters);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+ /**
+ * This method basically moved from the text names of things to operating on
+ * the actual Files. It will also verify or work out the correct class name
+ * for the implmentation and complain if this does match at least one
+ * potential service method in the class.
+ *
+ * @param contextXPath
+ * used to pull the correct values from the parameters map (as
+ * there can be multiple implementation.cpp elelements in there).
+ * @param parameters
+ * a map of XPath keys to attribute values
+ * @throws Exception
+ */
+ private void processComponentNode(String contextXPath, Map parameters)
+ throws Exception {
+
+ String implHeader = (String) parameters.get(contextXPath
+ + "/implementation.cpp/@header");
+ String implClass = (String) parameters.get(contextXPath
+ + "/implementation.cpp/@class");
+
+ File moduleOrFragmentFile = (File) parameters
+ .get("moduleOrFragmentFile");
+ File implHeaderFile = null;
+ if (null != moduleOrFragmentFile) {
+ File dir = moduleOrFragmentFile.getParentFile();
+ implHeaderFile = new File(dir, implHeader);
+ } else {
+ throw new InternalError(
+ "Internal error: sca.module or fragment file not present in interal parameters");
+ }
+
+ try {
+ String resolvedImplClassName = getClassName(implHeaderFile,
+ implClass);
+
+ // Check or retrieve the impl Class name.
+ if (null == resolvedImplClassName) {
+ try {
+ //A class attribute was set but there were no methods of
+ // the
+ // class in the header
+ System.out
+ .println("Classname given ("
+ + implClass
+ + ") does not match any header file method's classes in file: "
+ + implHeaderFile.getCanonicalPath());
+ } catch (IOException e) {
+ System.out
+ .println("Classname given ("
+ + implClass
+ + ") does not match any header file method's classes in file: "
+ + implHeaderFile.getAbsolutePath());
+ }
+ return;
+ } else {
+ File target = (File) parameters.get("targetFile");
+ // go into the .componentType file and generate the cpp
+ processComponentTypeFile(implHeaderFile, target,
+ resolvedImplClassName);
+
+ }
+ } catch (Exception e) {
+ String compName = (String) parameters
+ .get("/moduleFragment/component/@name");
+ Utils
+ .screenMessage("Problem interpreting header or class attributes in "
+ + compName
+ + " component, in "
+ + moduleOrFragmentFile.getPath() + " file");
+ System.exit(-2);
+ }
+
+ }
+
+ /**
+ * The purpose of this method is to move from the DOM parameters to dealing
+ * with the actual Files involved. It is from this method that we kick off
+ * the processing of the componentType file.
+ *
+ * @param header
+ * the implementation header
+ * @param target
+ * the directory for the output
+ * @param implClass
+ * @throws Exception
+ */
+ private void processComponentTypeFile(File header, File target,
+ String implClass) throws Exception {
+
+ // The componentType files should be in the same dir as the Impl
+ // header...
+ if (header == null || target == null) {
+ return;
+ }
+
+ File componentTypeDirectory = header.getParentFile();
+ String headerFileName = header.getName();
+ String componentTypeName = headerFileName.substring(0, headerFileName
+ .lastIndexOf("."));
+
+ File componentTypeFile = new File(componentTypeDirectory,
+ componentTypeName + ".componentType");
+
+ ComponentTypeFileHandler ctParser = new ComponentTypeFileHandler();
+
+ // The implClass is used in the generated wrapper code so we need to
+ // store
+ // it so we can tunnel through the standard actOnFile signature.
+
+ int namespaceEnd = -1;
+ if (null != implClass) {
+ namespaceEnd = implClass.lastIndexOf("::");
+ }
+
+ String namespace = null;
+
+ if (-1 != namespaceEnd) {
+ namespace = implClass.substring(0, namespaceEnd);
+ ctParser.setParameter("implNamespace", namespace);
+ implClass = implClass.substring(namespaceEnd + 2);
+ }
+
+ if (implClass != null) {
+ ctParser.setParameter("implClass", implClass);
+ }
+
+ try {
+ ctParser.handleComponentTypeFile(componentTypeFile, target);
+ } catch (Exception e) {
+ Utils
+ .screenMessage("There has been a problem parsing the componentType file: "
+ + componentTypeFile.getCanonicalPath());
+ Utils.screenMessage(" the reported errors is "
+ + e.getLocalizedMessage());
+ Utils.screenMessage(" and the java exception stack is below.");
+ e.printStackTrace();
+ throw e;
+ }
+ }
+
+ /**
+ * The resolve and check the classname of the service. If we have an
+ * implementation class name we have to check that there is: at least one
+ * (non-private, non constructor or finalizer) method of that class in the
+ * header If there is no implementation class then we will return the class
+ * of the first non-private/constructor/finalizer method we find.
+ *
+ * @param header
+ * @param implementationCppClass
+ * @return
+ * @throws Exception
+ */
+ private String getClassName(File header, String implementationCppClass)
+ throws Exception {
+ String methodClassName = null;
+ List methods = null;
+
+ if (null == header) {
+ return null;
+ }
+
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_ENCOUNTERED, header
+ .getAbsolutePath());
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_PARSED,
+ "Scagen processing C++ implementation header "
+ + header.getAbsolutePath());
+
+ try {
+ Headers headers = new Headers();
+
+ headers.actOnFile(header, null, 1);
+
+ methods = headers.getAllMethods();
+
+ } catch (FileNotFoundException fnfe) {
+ String path;
+ try {
+ path = header.getCanonicalPath();
+ } catch (IOException e1) {
+ path = header.getPath();
+ }
+ Utils.screenMessage("The header file: " + path
+ + " referenced cannot be found.");
+ throw fnfe;
+ } catch (Exception e) {
+ String path = header.getPath();
+ Utils.screenMessage("The header file: " + path
+ + " referenced is not valid. Reason given is "
+ + e.getLocalizedMessage());
+ throw e;
+ }
+
+ // We need at least some methods
+ if (null == methods) {
+ return null;
+ }
+
+ // We need at least one service method of to do anything
+ methods = trimMethodsOfPrivatesConstructorsAndDestrutors(methods);
+ if (null == methods || methods.size() == 0) {
+ return null;
+ }
+
+ // If the user specifies an implementation class then we need at
+ // least one service method of that class
+ if (implementationCppClass != null) {
+ methods = filterMethodsToOneClass(methods, implementationCppClass);
+
+ if (null == methods || methods.size() == 0) {
+ return null;
+ } else {
+ // There was at least one method of the correct type
+ return implementationCppClass;
+ }
+ } else {
+ // Implementation class is null so we return the fully qualified classname of the
+ // first service method
+ Signature s = (Signature) methods.get(0);
+ String className = s.getTrimClassName();
+ String namespace = s.getNamespace();
+ if( namespace != null && namespace.length() > 0)
+ {
+ className = namespace + "::" + className;
+ }
+
+ return className;
+ }
+ }
+
+ /**
+ * Filter the mthods supplied to only ones fo the supplied class.
+ *
+ * @param methods
+ * the list of methods
+ * @param implementationCppClass
+ * the class we wish
+ * @return a list of methods of the correct class
+ */
+ private List filterMethodsToOneClass(List methods,
+ String implementationCppClass) {
+
+ if (null == methods) {
+ return null;
+ }
+
+ if (null == implementationCppClass
+ || implementationCppClass.length() == 0) {
+ return null;
+ }
+
+ for (Iterator iter = methods.listIterator(); iter.hasNext();) {
+ Signature method = (Signature) iter.next();
+
+ String className = method.getTrimClassName();
+ String namespace = method.getNamespace();
+
+ if (namespace != null && namespace.length() > 0) {
+ className = namespace + "::" + className;
+ }
+
+ if (!implementationCppClass.equals(className)) {
+ iter.remove();
+ }
+ }
+
+ return methods;
+
+ }
+
+ /**
+ * This method removes contructor and destructor methods from the list.
+ *
+ * @param methods
+ * the list of methods
+ * @return
+ */
+ private List trimMethodsOfPrivatesConstructorsAndDestrutors(List methods) {
+
+ if (null == methods) {
+ return null;
+ }
+
+ for (Iterator iter = methods.listIterator(); iter.hasNext();) {
+ Signature method = (Signature) iter.next();
+
+ if (method.isConstructor() || method.isDestructor()) {
+ iter.remove();
+ }
+ }
+
+ return methods;
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentTypeFileHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentTypeFileHandler.java
new file mode 100644
index 0000000000..0ee9b97138
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ComponentTypeFileHandler.java
@@ -0,0 +1,124 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+
+import org.apache.tuscany.sca.cpp.tools.common.FileActor;
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+
+/**
+ * The purpose of this class is to specialise the map of XML element handlers
+ * for a XXX.componentType file that is used by the XMLFileActor
+ */
+public class ComponentTypeFileHandler extends XMLFileActor {
+
+ static {
+ // We set up a map for each element type we wish to handle
+ // this alows the XML handling code to be generic and type free
+ // while the handlers don't have to do mcuh XML handling.
+
+ GenericDomNodeHandler gdnh = new GenericDomNodeHandler();
+ handlers.put("componentType", gdnh);
+ handlers.put("interface.cpp", gdnh);
+
+ ServiceDomNodeHandler sdnh = new ServiceDomNodeHandler();
+ handlers.put("service", sdnh);
+
+ ReferenceDomNodeHandler rdnh = new ReferenceDomNodeHandler();
+ handlers.put("reference", rdnh);
+ }
+
+ /**
+ * This method just exists to add the default starting depth of 1 to the
+ * underlying actOnFile interface
+ *
+ * @param componentTypeXML
+ * @param target
+ * @throws Exception
+ */
+ public void handleComponentTypeFile(File componentTypeXML, File target)
+ throws Exception {
+ // We have already set up the XML element handlers.
+ actOnFile(componentTypeXML, target, 1);
+ // We need do no more, the service and reference handlers
+ // ServiceDomNodeHandler and ReferenceDomNodeHandler
+ // will take appropriate action.
+ }
+
+ /**
+ * This method is the main FileActor method
+ *
+ * @see FileActor#actOnFile(File, File, int) Here we create an initial DOM
+ * and kick off the processing (using the handler map that has been set
+ * up by the concrete subclass).
+ *
+ * @param moduleXML
+ * the sca.module or fragment file
+ * @param target
+ * the target directory
+ * @param depth
+ * not uesed here but in the
+ * @see FileActor#actOnFile(File, File, int) interface to allow for
+ * recursive diving into a directory structure.
+ */
+ public void actOnFile(File fileXML, File target, int depth)
+ throws Exception {
+
+ if (null == fileXML || null == target) {
+ return;
+ }
+
+ parameters.put("componentTypeFile", fileXML);
+
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_ENCOUNTERED, fileXML.getAbsolutePath());
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_PARSED, "Scagen processing SCA componentType file " + fileXML.getAbsolutePath());
+
+ super.actOnFile(fileXML, target, depth);
+
+ }
+
+ /**
+ * @return an error message - usually over-ridden.
+ */
+ protected String getContextMessage() {
+
+ String module = ((File) parameters.get("moduleOrFragmentFile")).getPath();
+ if (null == module) {
+ module = "unknown";
+ }
+
+ String component = (String) parameters.get("/module/component/@name");
+ if (null == component) {
+ component = (String) parameters
+ .get("/moduleFragment/component/@name");
+ }
+ if (null == component) {
+ module = "unknown";
+ }
+
+ String msg = "when processing module " + module;
+
+ msg = msg
+ + "\nin this module file, the component \""
+ + component
+ + "\" has an implementation.cpp element with a header attribute \nwhere the C++ header can be found but it has no matching .componentType file present in\nthe same directory as the header.";
+
+ return msg;
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DirectoryScanner.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DirectoryScanner.java
new file mode 100644
index 0000000000..1ff4504fff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DirectoryScanner.java
@@ -0,0 +1,87 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+import java.util.Set;
+
+import org.apache.tuscany.sca.cpp.tools.common.FileActor;
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+
+public class DirectoryScanner {
+ private FileActor actor;
+
+ private Set actOnTheseFileExtensions;
+
+ public DirectoryScanner(FileActor actor, Set extensions) {
+ this.actor = actor;
+ this.actOnTheseFileExtensions = extensions;
+ }
+
+ /**
+ *
+ * @param source
+ * The module root directory
+ * @param target
+ * The directory that will hold the generated output
+ * @param depth
+ * The depth from the initial starting point, not significant for
+ * the Scagen tool as we are only interested in the module root
+ * directory but present due to the FileActor actOnFile interface
+ * method. This code is pulled from the code in the CParsingTool
+ * class and further work is needed to remove the duplication.
+ * Tnterface has been left unchanged as we hope to reconverge the
+ * parser here with the original one once the changes are fed
+ * back into the original code.
+ * @throws Exception
+ */
+ public void walkTree(File source, File target, int depth) throws Exception {
+ depth++;
+ boolean noTarget = (null == target);
+
+ if (!source.canRead())
+ Utils.rude("Cannot read from source directory " + source);
+ if (!noTarget && !target.canWrite())
+ Utils.rude("Cannot write to target directory " + target);
+
+ if (source.isDirectory()) {
+ File[] filesInDirectory = source.listFiles();
+ for (int i = 0; i < filesInDirectory.length; i++) {
+ File file = filesInDirectory[i];
+ String name = file.getName();
+ int dot = name.lastIndexOf('.');
+ String ext = null;
+ if (-1 != dot) {
+ ext = name.substring(dot + 1);
+ }
+
+ if (file.isFile()
+ && (actOnTheseFileExtensions == null || (!file
+ .isHidden() && actOnTheseFileExtensions
+ .contains(ext)))) {
+ // this is a file we need to act on!
+ actor.actOnFile(file, target, depth);
+ }
+ }
+ } else {
+ return; // Do not act on single files for now we expect a module
+ // root directory
+ // and the "main" class checks its parameters to ensure this is so.
+ }
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomHandler.java
new file mode 100644
index 0000000000..2ca4c7c881
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomHandler.java
@@ -0,0 +1,77 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.util.Map;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ * The purpose of this class it to provide a generic class that can handle both
+ * a DOM and a DOM node.
+ *
+ */
+public class DomHandler extends GenericDomNodeHandler {
+ /**
+ * This method will run through the initial level of the DOM using the
+ * handlers map
+ *
+ * @param dom
+ * the document being consumed
+ * @param handlers
+ * the map from element name to node handler
+ * @param parameters
+ * a map of parameters - this is often used by a handler to place
+ * a name-value pair, the name is often an Xpath representation
+ * of the location of the data in the DOM but handlers are free
+ * to use whatever they like - the contextXpath is generated as
+ * an Xpath prefix for those handlers that wish to use it.
+ */
+ public static void handleDom(Document dom, Map handlers, Map parameters) {
+ if (dom != null) {
+ NodeList childNodes = dom.getChildNodes();
+ for (int i = 0; i < childNodes.getLength(); i++) {
+ Node childNode = childNodes.item(i);
+ mapNodeToHandlerAndHandle(childNode, "/"
+ + childNode.getNodeName(), handlers, parameters);
+ }
+ }
+ }
+
+ /**
+ *
+ * @param node
+ * The DOM node being consumed
+ * @param contextXPath
+ * The XPath to this node
+ * @param handlers
+ * The map from element name to node handler
+ * @param parameters
+ * A map of parameters - this is often used by a handler to place
+ * a name-value pair, the name is often an Xpath representation
+ * of the location of the data in the DOM but handlers are free
+ * to use whatever they like - the contextXpath is generated as
+ * an Xpath prefix for those handlers that wish to use it.
+ */
+ public void handleNode(Node node, String contextXPath, Map handlers,
+ Map parameters) {
+ mapNodeToHandlerAndHandle(node, contextXPath, handlers, parameters);
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomNodeHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomNodeHandler.java
new file mode 100644
index 0000000000..00942bd9ca
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/DomNodeHandler.java
@@ -0,0 +1,40 @@
+/*
+*
+* Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.util.Map;
+
+import org.w3c.dom.Node;
+
+public interface DomNodeHandler {
+
+ public static int ELEMENT = 1;
+ /**
+ * An interface for classes that can process DOM nodes.
+ *
+ * @param node the DOM node being consumed
+ * @param contextXPath the XPath to this node
+ * @param handlers The map from element name to node handler
+ * @param parameters A map of parameters - this is often used by a handler to place
+ * a name-value pair, the name is often an Xpath like representation of the
+ * location of the data in the DOM but handlers are free to use whatever
+ * they like - the contextXpath is generated as an Xpath prefix for those
+ * handlers that wish to use it.
+ */
+ void handleNode( Node node, String contextXPath, Map handlers, Map parameters );
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/GenericDomNodeHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/GenericDomNodeHandler.java
new file mode 100644
index 0000000000..3f9fb359f5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/GenericDomNodeHandler.java
@@ -0,0 +1,214 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+/**
+ *
+ *
+ *
+ *
+ */
+public class GenericDomNodeHandler implements DomNodeHandler {
+ /**
+ * This method parses the DOM attributes into name value pairs in the
+ * parameter map each valued keyed by its XPath.
+ *
+ * @param node
+ * the DOM node being processed
+ * @param contextPath
+ * the XPath to the DOM node being processed
+ * @param parameters
+ * a scratchpad map of name value pairs
+ */
+ public void transferAttrsToParameters(Node node, String contextPath,
+ Map parameters) {
+
+ if (node == null || contextPath == null || parameters == null)
+ return;
+
+ NamedNodeMap attrs = node.getAttributes();
+ if (attrs != null) {
+ for (int i = 0; i < attrs.getLength(); i++) {
+ Node attr = attrs.item(i);
+ parameters.put(contextPath + "/" + "@" + attr.getNodeName(),
+ attr.getNodeValue());
+
+ // Report the dll name to the deployment tool if required.
+ if ("dll".equals(attr.getNodeName())) {
+ //This is a path relative to the module root.
+ //so we need to add it in.
+ File mod = (File) parameters.get("moduleOrFragmentFile");
+ if (null != mod) {
+ String separatorForRegex = File.separator.replaceAll(
+ "\\\\", "\\\\\\\\");
+
+ String end = attr.getNodeValue().replaceAll("[/\\\\]+",
+ separatorForRegex);
+
+ if (!end.startsWith(File.separator)) {
+ end = File.separator + end;
+ }
+
+ String fullPath = mod.getParentFile().getAbsolutePath()
+ + end;
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_ENCOUNTERED,
+ fullPath);
+ }
+
+ }
+
+ }
+ }
+ return;
+ }
+
+ /**
+ * This method will iterate through the DOM node's children and call the
+ * appropriate handler for each one.
+ *
+ * @param node
+ * the DOM node being processed
+ * @param contextPath
+ * the XPath to the DOM node being processed
+ * @param handlers
+ * a map of element name to handler objects
+ * @param parameters
+ * a scratchpad map of name value pairs
+ */
+ public void handleChildElements(Node node, String contextPath,
+ Map handlers, Map parameters) {
+
+ if (node == null || contextPath == null)
+ return;
+
+ NodeList children = node.getChildNodes();
+ if (children != null) {
+ for (int i = 0; i < children.getLength(); i++) {
+ Node child = children.item(i);
+ mapNodeToHandlerAndHandle(child, contextPath + "/"
+ + child.getNodeName(), handlers, parameters);
+ }
+ }
+ return;
+ }
+
+ /**
+ * This method will resolve any registered handler for a particular DOM
+ * element and call the handleNode method on it. If the handlers map has a
+ * mapping from "entity" to an instance of EntityHandler which implements
+ * the DomNodeHandler interface then any node that looks like <entity>
+ * <any_other/><stuff/></entity>
+ *
+ * Will be passed to the EntityHandler to process.
+ *
+ * @param node
+ * the DOM node being processed
+ * @param contextPath
+ * the XPath to the DOM node being processed
+ * @param handlers
+ * a map of element name to handler objects
+ * @param parameters
+ * a scratchpad map of name value pairs
+ */
+ public static void mapNodeToHandlerAndHandle(Node node, String contextPath,
+ Map handlers, Map parameters) {
+ if (node != null && node.getNodeType() == DomNodeHandler.ELEMENT) {
+ String nodeName = node.getNodeName();
+ if (nodeName != null && nodeName.length() > 0) {
+ DomNodeHandler handler = (DomNodeHandler) handlers
+ .get(nodeName);
+ if (handler != null) {
+ handler.handleNode(node, contextPath, handlers, parameters);
+ }
+ }
+ }
+ }
+
+ /**
+ * This method will place the attributes in this node into the parameter map
+ * keyed by the XPath and recursively continue processing for any
+ * sub-elements of the node.
+ *
+ * @param node
+ * The DOM node being consumed
+ * @param contextXPath
+ * The XPath to this node
+ * @param handlers
+ * The map from element name to node handler
+ * @param parameters
+ * A map of parameters - this is often used by a handler to place
+ * a name-value pair, the name is often an Xpath representation
+ * of the location of the data in the DOM but handlers are free
+ * to use whatever they like - the contextXpath is generated as
+ * an Xpath prefix for those handlers that wish to use it.
+ */
+ public void handleNode(Node node, String contextXPath, Map handlers,
+ Map parameters) {
+
+ clearParametersAtThisXPath(contextXPath, parameters);
+ transferAttrsToParameters(node, contextXPath, parameters);
+ handleChildElements(node, contextXPath, handlers, parameters);
+ }
+
+ /**
+ * @param contextXPath
+ * @param parameters
+ */
+ private void clearParametersAtThisXPath(String contextXPath, Map parameters) {
+
+ // TODO: Slow but works, improve parameters mechanism overall
+ // to make this unecessary
+ if (contextXPath == null || parameters == null) {
+ return;
+ }
+
+ // We want to clear both /moduleFragment and /module
+ // subtrees when we come across the root of either..
+ if (contextXPath.equals("/moduleFragment")) {
+ //clear both this and "module"
+ contextXPath = "/module";
+ }
+
+ Set parms = parameters.entrySet();
+ if (null != parms) {
+ Iterator iter = parms.iterator();
+ Map.Entry item = null;
+ String thisKey;
+
+ while (iter.hasNext()) {
+ item = (Entry) iter.next();
+ thisKey = (String) item.getKey();
+ if (thisKey.startsWith(contextXPath)) {
+ //System.out.println(" removing " + thisKey + " for " +
+ // item.getValue().toString() + " against " + contextXPath);
+ iter.remove();
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/LittleClass.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/LittleClass.java
new file mode 100644
index 0000000000..699abf7a08
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/LittleClass.java
@@ -0,0 +1,27 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+/**
+ * This class is just a convenient application class that is loaded in order to
+ * get the application class loader. We are interested in the application class
+ * loader as we use its getResource method to resolve XML files independantly of
+ * where they are.
+ */
+public class LittleClass {
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ModuleOrFragmentFileHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ModuleOrFragmentFileHandler.java
new file mode 100644
index 0000000000..3bd8129401
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ModuleOrFragmentFileHandler.java
@@ -0,0 +1,85 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+
+import org.apache.tuscany.sca.cpp.tools.common.FileActor;
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+
+/**
+ * The purpose of this class is purely to specialise the handler map to one with
+ * a specific ComponentDomNodeHandler.
+ */
+public class ModuleOrFragmentFileHandler extends XMLFileActor {
+
+ static {
+
+ GenericDomNodeHandler gdnh = new GenericDomNodeHandler();
+
+ /*
+ * We use a specific Component node handler in order to be able to
+ * process multiple components in the same XML file
+ */
+ ComponentDomNodeHandler componentdnh = new ComponentDomNodeHandler();
+ handlers.put("component", componentdnh);
+
+ /*
+ * We are interested inthe elements below but they only need standard
+ * processing
+ */
+ handlers.put("module", gdnh);
+ handlers.put("moduleFragment", gdnh);
+ handlers.put("implementation.cpp", gdnh);
+ }
+
+ /**
+ * This method is the main FileActor method
+ *
+ * @see FileActor#actOnFile(File, File, int) Here we create an initial DOM
+ * and kick off the processing (using the handler map that has been set
+ * up by the concrete subclass).
+ *
+ * @param moduleXML
+ * the sca.module or fragment file
+ * @param target
+ * the target directory
+ * @param depth
+ * not uesed here but in the
+ * @see FileActor#actOnFile(File, File, int) interface to allow for
+ * recursive diving into a directory structure.
+ */
+ public void actOnFile(File moduleXML, File target, int depth)
+ throws Exception {
+
+ if (null == moduleXML || null == target) {
+ return;
+ }
+
+ parameters.put("moduleOrFragmentFile", moduleXML);
+
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_ENCOUNTERED, moduleXML
+ .getAbsolutePath());
+
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_PARSED,
+ "Scagen processing SCA module file "
+ + moduleXML.getAbsolutePath());
+
+ super.actOnFile(moduleXML, target, depth);
+
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ReferenceDomNodeHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ReferenceDomNodeHandler.java
new file mode 100644
index 0000000000..a490d184d1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ReferenceDomNodeHandler.java
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.util.Map;
+
+import org.apache.tuscany.sca.cpp.tools.common.Options;
+import org.w3c.dom.Node;
+
+/**
+ * The purpose of this class is to process a <reference>element in a
+ * componentType file and then trigger a call to the method in ServicesGenerator
+ * to process the interface header file
+ */
+public class ReferenceDomNodeHandler extends GenericDomNodeHandler {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.sca.cpp.services.DomNodeHandler#handleNode(org.w3c.dom.Node,
+ * java.lang.String, java.util.Map, java.util.Map)
+ */
+ public void handleNode(Node node, String contextXPath, Map handlers,
+ Map parameters) {
+
+ // Pick up attrs and children
+ super.handleNode(node, contextXPath, handlers, parameters);
+
+ //OK we know we are handling a reference
+ //now go and create the wrapper and proxy for it
+ createProxyForReference(parameters);
+
+ }
+
+ /**
+ * This method is really just an adapter that adapts the -dir Option to a
+ * value int he parameters map for "module_root"
+ *
+ * @param parameters
+ * the map of name-value parameters.
+ */
+ private void createProxyForReference(Map parameters) {
+ try {
+ String mr = (String) Options.getOption("-dir");
+ parameters.put("module_root", mr);
+ ServicesGenerator.handleInterfaceHeader(parameters, true);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/Scagen.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/Scagen.java
new file mode 100644
index 0000000000..a6f6f58644
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/Scagen.java
@@ -0,0 +1,170 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.tuscany.sca.cpp.tools.common.CParsingTool;
+import org.apache.tuscany.sca.cpp.tools.common.Options;
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+
+/**
+ * This is the main top level class. Its purpose is to create a
+ * Module/FragmentFile handler visitor and pass it to a DirectoryScanner for
+ * processing.
+ */
+public class Scagen extends CParsingTool {
+
+ public static Set MODULE_EXTENSIONS = new HashSet(Arrays
+ .asList(new Object[] { "module", "fragment" }));
+
+ /**
+ * @throws Exception
+ *
+ */
+ public Scagen(String[] args) throws Exception {
+ super(args);
+ }
+
+ /**
+ * Take a directory scanning class and create a vistor that knows how to
+ * handle any sca.module or .fragment that the scanner comes across.
+ *
+ * @param args
+ * standard main args. THe values we expect in this class are
+ * scagen -dir input_dir -output output_dir
+ *
+ */
+ public static void main(String[] args) {
+ boolean failed = false;
+ try {
+ Scagen env = new Scagen(args);
+ ModuleOrFragmentFileHandler module_handler = new ModuleOrFragmentFileHandler();
+
+ // Check and access the input SCA module directory
+ String name = (String) Options.getOption("-dir");
+ if (null == name) {
+ Utils
+ .screenMessage("Please provide a SCA module directory name as a \"-dir\" option.");
+ env.printUsage();
+ System.exit(-1);
+ }
+ File source = new File(name);
+ if (!source.isFile() && !source.isDirectory()) {
+ Utils
+ .screenMessage("The SCA module directory provided as the \"-dir\" option cannot be accessed,");
+ Utils.screenMessage("the option given was: " + source);
+ env.printUsage();
+ System.exit(-1);
+ }
+
+ String deployDir = null;
+ try {
+ deployDir = (String) Options.getOption("-deploy");
+ if (null != deployDir || Options.deploy()) {
+ Utils.setReportArtefacts(true);
+ }
+ } catch (Exception e) {
+ // let it default to null
+ }
+
+ Utils.postEvent(Utils.DEPLOYMENT_INPUT_DIRECTORY, source
+ .getAbsolutePath());
+
+ // We check the -output option here as we wish to
+ // reuse the env.maybeCreateDirectory method
+ // unchanged from the original that went into axis and it will do a
+ // System.exit if there is no matching Option
+ String outputDirName = (String) Options.getOption("-output");
+ if (null == outputDirName) {
+ Utils
+ .screenMessage("Please provide an output directory name for the generated files as a \"-output\" option.");
+ env.printUsage();
+ System.exit(-1);
+ }
+
+ File outputDir = new File(outputDirName);
+
+ // Check we can create the output directory
+ if (outputDir == null || !outputDir.exists() && !outputDir.mkdir()) {
+ Utils.screenMessage("Failed to create output directory: "
+ + outputDirName);
+ env.printUsage();
+ System.exit(-1);
+ }
+
+ Utils.postEvent(Utils.DEPLOYMENT_OUTPUT_DIRECTORY, outputDir
+ .getAbsolutePath());
+
+ DirectoryScanner scanner = new DirectoryScanner(module_handler,
+ MODULE_EXTENSIONS);
+ scanner.walkTree(source, outputDir, 1);
+
+ if (0 == module_handler.getFilesActedOn()) {
+ Utils
+ .screenMessage("No SCA module or fragment files were found in: "
+ + source);
+ }
+
+ failed = module_handler.failed;
+
+ } catch (Exception exception) {
+ Utils
+ .screenMessage("Unexpected error occurred while runnning the Scagen tool. The Java exception is below.");
+ exception.printStackTrace();
+ failed = true;
+ }
+
+ if (failed) {
+ Utils
+ .outputDebugString("Finished! (but encountered problems parsing modules)");
+ System.exit(-2);
+ }
+
+ Utils.outputDebugString("Finished!");
+ }
+
+ /**
+ * Provide a hint to the user on how to call this class
+ */
+ protected void printUsage() {
+ System.out
+ .println("usage: Java Scagen -dir <input_directory> -output <output_directory> [-verbose] [-deploy <deploy_dir>] [-nogenerate] [-outputCommand] [-command <copy_cmd>]");
+ System.out
+ .println(" -dir <input_directory>: the SCA module root directory");
+ System.out
+ .println(" -output <output_directory>: a directory to put the generated output into");
+ System.out.println(" [-verbose]: report on what scagen is doing");
+ System.out
+ .println(" [-deploy <deploy_dir>]: output text to help in deploying the module's artefacts");
+ System.out
+ .println(" [-command <copy_cmd>]: a string that is injected into the deploy text");
+ System.out
+ .println(" [-list]: change the deploy output text to a simple list of artefacts");
+ System.out
+ .println(" [-outputCommand]: change the deploy output text to command text format");
+ System.out
+ .println(" output is of form \"copy_cmd <dir>file1 <deploy_dir>file1\"");
+ System.out
+ .println(" [-nogenerate]: do not generate proxies and wrappers");
+
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServiceDomNodeHandler.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServiceDomNodeHandler.java
new file mode 100644
index 0000000000..79b74c0450
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServiceDomNodeHandler.java
@@ -0,0 +1,62 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.util.Map;
+
+import org.apache.tuscany.sca.cpp.tools.common.Options;
+import org.w3c.dom.Node;
+
+public class ServiceDomNodeHandler extends GenericDomNodeHandler {
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.tuscany.sca.cpp.services.DomNodeHandler#handleNode(org.w3c.dom.Node,
+ * java.lang.String, java.util.Map, java.util.Map)
+ */
+ public void handleNode(Node node, String contextXPath, Map handlers,
+ Map parameters) {
+
+ // Pick up attrs and the interface.cpp child elements
+ super.handleNode(node, contextXPath, handlers, parameters);
+
+ //OK now go and create the wrapper and proxy for the service
+ createWrapperAndProxyForService(parameters);
+
+ }
+
+ /**
+ * This method will generate the wrapper and proxy C++ and header files for
+ * the service.
+ *
+ * @param parameters
+ * a map of name-value parameters
+ */
+ private void createWrapperAndProxyForService(Map parameters) {
+
+ try {
+ String mr = (String) Options.getOption("-dir");
+ parameters.put("module_root", mr);
+ ServicesGenerator.handleInterfaceHeader(parameters, false);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServicesGenerator.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServicesGenerator.java
new file mode 100644
index 0000000000..465762050b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/ServicesGenerator.java
@@ -0,0 +1,825 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.tuscany.sca.cpp.tools.common.CParsingTool;
+import org.apache.tuscany.sca.cpp.tools.common.Headers;
+import org.apache.tuscany.sca.cpp.tools.common.Options;
+import org.apache.tuscany.sca.cpp.tools.common.Parameter;
+import org.apache.tuscany.sca.cpp.tools.common.Signature;
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
+/**
+ * This class is the main class that handles the function that parses a C++
+ * interface header file into a DOM that holds all the semantic information
+ * about the interface - method names, parameters and return values. It then
+ * uses XSLT to generate different "views" of this data plus the parameter map
+ * from other sources that are the C++ programs for the proxy and wrapper
+ * implementations and headers.
+ */
+public class ServicesGenerator extends CParsingTool {
+
+ private static final String OPERATION_NAME_ATTR = "operationNameAttr";
+
+ private static final String HEADER_NAME_ATTR = "headerNameAttr";
+
+ private static final String SCA_OPERATION = "scaOperation";
+
+ private static final String SCA_SERVICE = "scaService";
+
+ private static final String SCA_OPERATION_RETURN_TYPE = "scaOperationReturnType";
+
+ private static final String SCA_OPERATION_PARAMETER = "scaOperationParameter";
+
+ private static final String SCA_OPERATION_PARAMETER_NAME_ATTR = "scaOperationParameterNameAttr";
+
+ private static final String SCA_OPERATION_PARAMETER_CONST_ATTR = "scaOperationParameterConstAttr";
+
+ private static final String SCA_INTERFACE_NAME_ATTR = "scaInterfaceNameAttr";
+
+ private static final String CPP_HEADER = "cppHeader";
+
+ private static boolean TESTING = true;
+
+ private static TransformerFactory txmf = null;
+
+ private static ServicesGenerator instance = null;
+
+ public ServicesGenerator(String[] args) throws Exception {
+ super(args);
+ txmf = TransformerFactory.newInstance();
+ }
+
+ /**
+ *
+ * @param parameters
+ * @param forReference
+ * true if we are creating a proxy for a reference (rather than
+ * for a service)
+ * @throws Exception
+ *
+ * The design is
+ * <ul>
+ * <li>handleInterfaceHeader
+ * <li>createDOMofMethods
+ * <li>createProxyCPPFromDom(outputDir, dom);
+ * <li>createProxyHeaderFromDom(outputDir, dom);
+ * </ul>
+ *
+ * plus if we are not generating for a reference element
+ * <ul>
+ * <li>createWrapperCPPFromDom(outputDir, dom);
+ * <li>createWrapperHeaderFromDom(outputDir, dom);
+ * <ul>
+ * Each of the create.... methods calls createOutputFromDom with a different
+ * style sheet.
+ *
+ */
+ public static void handleInterfaceHeader(Map parameters,
+ boolean forReference) throws Exception {
+ boolean failed = false;
+
+ String type = null;
+ if (forReference) {
+ type = "reference";
+ } else {
+ type = "service";
+ }
+ String interfaceHeaderFilename = (String) parameters
+ .get("/componentType/" + type + "/interface.cpp/@header");
+
+ String componentTypeFileHeaderName = interfaceHeaderFilename;
+
+ String sca_module_root = (String) Options.getOption("-dir");
+ parameters.put("module_root", sca_module_root);
+
+ if (sca_module_root != null && interfaceHeaderFilename != null
+ && interfaceHeaderFilename.length() > 0) {
+ String separator;
+ // Stick in a "/" (File.separator) if required.
+ if ((interfaceHeaderFilename.substring(0, 1).equals("/") || sca_module_root
+ .substring(sca_module_root.length() - 1,
+ sca_module_root.length()).equals("/"))
+ || (interfaceHeaderFilename.substring(0, 1).equals("\\") || sca_module_root
+ .substring(sca_module_root.length() - 1,
+ sca_module_root.length()).equals("\\"))
+
+ ) {
+ separator = "";
+ } else {
+ separator = File.separator;
+ }
+ interfaceHeaderFilename = sca_module_root + separator
+ + interfaceHeaderFilename;
+ }
+
+ File outputDir = (File) parameters.get("targetDirectoryFile");
+
+ String[] args = new String[] { "-source", interfaceHeaderFilename,
+ "-target", outputDir.getPath() };
+ ServicesGenerator gen = new ServicesGenerator(args);
+ File file;
+ try {
+ if (null == interfaceHeaderFilename) {
+ gen.printUsage();
+ System.exit(-1);
+ }
+
+ file = new File(interfaceHeaderFilename);
+ if (!file.isFile()) {
+ if (file.isDirectory()) {
+ Utils
+ .rude("This tool works at the header file level and not for directories like "
+ + file);
+ }
+ Utils.rude("Bad file or directory " + file);
+ }
+ File source = file;
+ if (!outputDir.exists() && !outputDir.mkdir())
+ Utils.rude("Failed to create directory " + outputDir);
+
+ // The class below is the one that will go through the header
+ // file(s)
+ Headers headers = new Headers();
+
+ if (null != interfaceHeaderFilename) {
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_ENCOUNTERED, file
+ .getAbsolutePath());
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_PARSED,
+ "Scagen processing C++ interface header "
+ + file.getAbsolutePath());
+ headers.actOnFile(file, outputDir, 1);
+ Utils.outputDebugString("Parsing files...");
+ }
+
+ String nameOfSorR = null;
+ String referenceName = null;
+ String serviceName = null;
+
+ if (forReference) {
+
+ Object rn = parameters.get("/componentType/reference/@name");
+
+ if (rn instanceof String) {
+ referenceName = (String) rn;
+ nameOfSorR = referenceName;
+ }
+ } else {
+
+ Object sn = parameters.get("/componentType/service/@name");
+
+ if (sn instanceof String) {
+ serviceName = (String) sn;
+ nameOfSorR = serviceName;
+ }
+ }
+
+ String moduleXmlFileHeader = null;
+ String moduleXmlFileHeaderNoExt = null;
+ Object moduleh = parameters
+ .get("/module/component/implementation.cpp/@header");
+
+ if (moduleh == null) {
+ moduleh = parameters
+ .get("/moduleFragment/component/implementation.cpp/@header");
+ }
+
+ if (moduleh instanceof String) {
+ File f = new File((String) moduleh);
+ moduleXmlFileHeader = (String) moduleh;
+
+ String fname = f.getName();
+ moduleXmlFileHeaderNoExt = fname.substring(0, fname
+ .lastIndexOf('.'));
+
+ }
+
+ String implClassNameAttrFromModuleFile = (String) parameters
+ .get("implClass");
+ String implClassNamespaceAttrFromModuleFile = (String) parameters
+ .get("implNamespace");
+
+ if(implClassNamespaceAttrFromModuleFile == null || implClassNamespaceAttrFromModuleFile.length() == 0)
+ {
+ implClassNamespaceAttrFromModuleFile = "";
+ }
+ else
+ {
+ implClassNamespaceAttrFromModuleFile += "::";
+ }
+
+ String interfaceClassNameAttrFromComponentTypeFile;
+ if (forReference) {
+ interfaceClassNameAttrFromComponentTypeFile = (String) parameters
+ .get("/componentType/reference/interface.cpp/@class");
+ } else {
+ interfaceClassNameAttrFromComponentTypeFile = (String) parameters
+ .get("/componentType/service/interface.cpp/@class");
+ }
+
+ List methods = headers.getAllMethods();
+
+ // Pull out one of the methods' namespace attributes.
+ String intfNamespace = null;
+ if (methods.size() > 0) {
+ Signature method = (Signature) methods.get(0);
+ intfNamespace = method.getNamespace();
+ }
+
+ if (interfaceClassNameAttrFromComponentTypeFile != null) {
+ methods = filterToPublicMethodsOfGivenClass(methods,
+ interfaceClassNameAttrFromComponentTypeFile, true);
+ } else {
+ //We want to filter to methods of the class whose
+ //name matches the header file name.
+ // String intfClassName = (String) parameters.get("intfClass");
+ //
+ String headerFileBase = file.getName().replaceAll(
+ "\\.h|\\.hpp|\\.h++", "");
+
+ methods = filterToPublicMethodsOfGivenClass(methods,
+ headerFileBase, false);
+ }
+
+ Document dom = createDOMofMethods(methods, source, serviceName,
+ referenceName, nameOfSorR, null,
+ componentTypeFileHeaderName, moduleXmlFileHeader,
+ moduleXmlFileHeaderNoExt, intfNamespace,
+ interfaceClassNameAttrFromComponentTypeFile,
+ implClassNameAttrFromModuleFile, implClassNamespaceAttrFromModuleFile);
+
+// // Print out the generated DOM
+// StringWriter sw = new StringWriter();
+// OutputFormat outputFormat = new OutputFormat("xml", "UTF-8", true);
+// XMLSerializer serializer = new XMLSerializer(sw, outputFormat);
+// serializer.serialize(dom);
+// System.out.println("DOM:\n"+sw.toString());
+
+
+ createProxyCPPFromDom(outputDir, dom);
+ createProxyHeaderFromDom(outputDir, dom);
+
+ if (!forReference) {
+ createWrapperCPPFromDom(outputDir, dom);
+ createWrapperHeaderFromDom(outputDir, dom);
+ }
+
+ } catch (Exception exception) {
+ exception.printStackTrace();
+ failed = true;
+ }
+
+ if (failed) {
+ Utils.outputDebugString("Finished! (but encountered problems)");
+ System.exit(-2);
+ }
+ }
+
+ /**
+ * This methods takes a list of methods and filters them to only contain the
+ * public methods of the given class
+ *
+ * @param methods
+ * a list of methods
+ * @param className
+ * we will return a list of only this classes methods from the
+ * methods parameter
+ * @param attrSpecified
+ * if the user does not specify one we ignore namespaces
+ * @return
+ */
+ private static List filterToPublicMethodsOfGivenClass(List methods,
+ String className, boolean useNamespace) {
+ if (methods != null && className != null && className.length() > 0) {
+ for (Iterator iter = methods.listIterator(); iter.hasNext();) {
+ Signature method = (Signature) iter.next();
+ String scope = method.getScope();
+ String sig = method.getOriginal();
+ String namespace = method.getNamespace();
+
+ String qualifiedClassName;
+ if (useNamespace && null != namespace && 0 < namespace.length()) {
+ qualifiedClassName = namespace + "::"
+ + method.getTrimClassName();
+ } else {
+ qualifiedClassName = method.getTrimClassName();
+ }
+
+ // If we are not public or the classname does not match
+ // remove...
+ if (!qualifiedClassName.equals(className)
+ || -1 == scope.indexOf("public")) {
+ iter.remove();
+ }
+ }
+ }
+ return methods;
+ }
+
+ /**
+ * Use an XSLT transformation to create a Proxy "view" of the DOM
+ * information
+ *
+ * @param outputDir
+ * where to put the C++
+ * @param dom
+ * the DOM of semantic method information
+ * @throws TransformerException
+ */
+ private static void createProxyCPPFromDom(File outputDir, Document dom)
+ throws TransformerException {
+
+ //Create the Filename from the Service Name in the DOM
+ if (dom == null) {
+ return;
+ }
+
+ String serviceOrReferenceName = "noSorRNameDefined";
+
+ String implClass = "nomoduleXmlFileHeaderDefined";
+
+ Element topNode = dom.getDocumentElement();
+ if (null != topNode) {
+ Attr attr = topNode.getAttributeNode("nameOfSorR");
+ if (attr != null) {
+ serviceOrReferenceName = attr.getNodeValue();
+ }
+
+ attr = topNode.getAttributeNode("implClass");
+ if (attr != null) {
+ implClass = attr.getNodeValue();
+ }
+ }
+
+ File proxyCPP = new File(outputDir, implClass + "_"
+ + serviceOrReferenceName + "_Proxy.cpp");
+ if (null != proxyCPP) {
+
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_GENERATED, proxyCPP
+ .getAbsolutePath());
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_CREATE,
+ "Scagen creating SCA for C++ proxy implementation "
+ + proxyCPP.getAbsolutePath());
+ }
+
+ createOutputFromDom(dom, proxyCPP,
+ "org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl");
+
+ }
+
+ /**
+ * Use an XSLT transformation to create a Wrapper "view" of the DOM
+ * information
+ *
+ * @param outputDir
+ * where to put the C++
+ * @param dom
+ * the DOM of semantic method information
+ * @throws TransformerException
+ */
+ private static void createWrapperCPPFromDom(File outputDir, Document dom)
+ throws TransformerException {
+
+ //Create the Filename from the Service Name in the DOM
+ if (dom == null) {
+ return;
+ }
+
+ String serviceName = "noServiceDefined";
+
+ String implClass = "nomoduleXmlFileHeaderDefined";
+
+ Element topNode = dom.getDocumentElement();
+ if (null != topNode) {
+ Attr attr = topNode.getAttributeNode("serviceName");
+ if (attr != null) {
+ serviceName = attr.getNodeValue();
+ }
+
+ attr = topNode.getAttributeNode("implClass");
+ if (attr != null) {
+ implClass = attr.getNodeValue();
+ }
+ }
+
+ File wrapperCPP = new File(outputDir, implClass + "_" + serviceName
+ + "_Wrapper.cpp");
+ if (null != wrapperCPP) {
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_GENERATED, wrapperCPP
+ .getAbsolutePath());
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_CREATE,
+ "Scagen creating SCA for C++ wrapper implementation "
+ + wrapperCPP.getAbsolutePath());
+ }
+ createOutputFromDom(dom, wrapperCPP,
+ "org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperCPP.xsl");
+
+ }
+
+ /**
+ * Use an XSLT transformation to create a Proxy header "view" of the DOM
+ * information
+ *
+ * @param outputDir
+ * where to put the C++
+ * @param dom
+ * the DOM of sematic method information
+ * @throws TransformerException
+ */
+ private static void createProxyHeaderFromDom(File outputDir, Document dom)
+ throws TransformerException {
+
+ //Create the Filename from the Service Name in the DOM
+ if (dom == null) {
+ return;
+ }
+
+ String serviceOrReferenceName = "noServiceDefined";
+ String intfClass = "noInterfaceClassNameOrDefaultDefined";
+ String implClass = "noImplementationClassOrDefaultDefined";
+
+ Element topNode = dom.getDocumentElement();
+ if (null != topNode) {
+ Attr attr = topNode.getAttributeNode("nameOfSorR");
+ if (attr != null) {
+ serviceOrReferenceName = attr.getNodeValue();
+ }
+ attr = topNode.getAttributeNode("intfClass");
+ if (attr != null) {
+ intfClass = attr.getNodeValue();
+ }
+ attr = topNode.getAttributeNode("implClass");
+ if (attr != null) {
+ implClass = attr.getNodeValue();
+ }
+ }
+
+ File proxyHeader = new File(outputDir, implClass + "_"
+ + serviceOrReferenceName + "_Proxy.h");
+ if (null != proxyHeader) {
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_GENERATED, proxyHeader
+ .getAbsolutePath());
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_CREATE,
+ "Scagen creating SCA for C++ proxy header "
+ + proxyHeader.getAbsolutePath());
+ }
+
+ createOutputFromDom(dom, proxyHeader,
+ "org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyHeader.xsl");
+
+ }
+
+ /**
+ * Use an XSLT transformation to create a Wrapper header "view" of the DOM
+ * information
+ *
+ * @param outputDir
+ * where to put the C++
+ * @param dom
+ * the DOM of sematic method information
+ * @throws TransformerException
+ */
+ private static void createWrapperHeaderFromDom(File outputDir, Document dom)
+ throws TransformerException {
+
+ //Create the Filename from the Service Name in the DOM
+ if (dom == null) {
+ return;
+ }
+
+ String serviceName = "noServiceDefined";
+
+ String implClass = "nomoduleXmlFileHeaderDefined";
+
+ Element topNode = dom.getDocumentElement();
+ if (null != topNode) {
+ Attr attr = topNode.getAttributeNode("serviceName");
+ if (attr != null) {
+ serviceName = attr.getNodeValue();
+ }
+
+ attr = topNode.getAttributeNode("implClass");
+ if (attr != null) {
+ implClass = attr.getNodeValue();
+ }
+ }
+
+ File wrapperHeader = new File(outputDir, implClass + "_" + serviceName
+ + "_Wrapper.h");
+
+ if (null != wrapperHeader) {
+ Utils.postEvent(Utils.DEPLOYMENT_ARTEFACT_GENERATED, wrapperHeader
+ .getAbsolutePath());
+ Utils.postEvent(Utils.EVENT_TYPE_FILE_CREATE,
+ "Scagen creating SCA for C++ wrapper header "
+ + wrapperHeader.getAbsolutePath());
+ }
+ createOutputFromDom(dom, wrapperHeader,
+ "org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperHeader.xsl");
+
+ }
+
+ /**
+ * This method will return a class loader that can see the resources that
+ * are parts of "this" package.
+ */
+ private static ClassLoader getALoader() {
+
+ LittleClass lc;
+ try {
+ lc = new LittleClass();
+ return lc.getClass().getClassLoader();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ /**
+ * This method will generically process the DOM using a stylesheet passed
+ * in.
+ *
+ * @param dom
+ * the source of data (the model)
+ * @param outputFile
+ * where to put the result
+ * @param xslTransformationFileName
+ * the xsl file containing the "view"
+ * @throws TransformerException
+ */
+ private static void createOutputFromDom(Document dom, File outputFile,
+ String xslTransformationFileName) throws TransformerException {
+
+ if(Options.noGenerate()){
+ return;
+ }
+
+ InputStream stream = getALoader().getResourceAsStream(
+ xslTransformationFileName);
+ StreamSource ss = new StreamSource(stream);
+ StreamResult out = new StreamResult(outputFile);
+ try {
+ Transformer xslt = txmf.newTransformer(ss);
+
+ // Unless a width is set, there will be only line breaks but no
+ // indentation.
+ // The IBM JDK and the Sun JDK don't agree on the property name,
+ // so we set them both.
+ //
+ try {
+ xslt.setOutputProperty(
+ "{http://xml.apache.org/xalan}indent-amount", "2");
+ } catch (Throwable t) {
+ //OK to ignore this, depends on XSLT engine and one will fail
+ }
+ try {
+ xslt.setOutputProperty(
+ "{http://xml.apache.org/xslt}indent-amount", "2");
+ } catch (Throwable t) {
+ //OK to ignore this, depends on XSLT engine and one will fail
+ }
+
+ DOMSource from = new DOMSource(dom);
+
+ xslt.transform(from, out);
+
+ } catch (TransformerConfigurationException e) {
+ e.printStackTrace();
+ throw (e);
+ } catch (TransformerException e) {
+ e.printStackTrace();
+ throw (e);
+ } finally {
+ try {
+ stream.close();
+ } catch (IOException e1) {
+ // unlikely but if
+ // we can't close it, we can't close it
+ }
+ }
+
+ }
+
+ //TODO clear up the parameter list below to make it smaller if
+ // possible
+ /**
+ * This method will create A DOM containing all the semantic information
+ * that it can extract from a C++ header file.
+ *
+ * @param methods
+ * a list of methods that are going into the DOM
+ * @param source
+ * the header file the methods came from
+ * @param serviceName
+ * the name of the service
+ * @referenceName the name of the reference
+ * @nameOfSorR the non null one of the two parameters above
+ * @headerClassName the name of the header class
+ * @param moduleXmlFileImplHeaderNameWithPathAndExt
+ * the source filename
+ * @param moduleXmlFileHeaderNoExtorPath
+ * the shortname of the source file
+ * @param implClass
+ * the implementation class
+ * @param intfClass
+ * the interface we are turning into a service
+ * @return
+ */
+ private static Document createDOMofMethods(List methods, File source,
+ String serviceName, String referenceName, String nameOfSorR,
+ String headerClassName,
+ String componentTypeXmlFileIntfHeaderNameWithPathAndExt,
+ String moduleXmlFileImplHeaderNameWithPathAndExt,
+ String moduleXmlFileHeaderNoExtorPath, String intfNamespace,
+ String intfClass, String implClass, String implNamespace) {
+
+ if (methods == null) {
+ return null;
+ }
+
+ // Create a DOM of the methods
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ Document document = null;
+ try {
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ document = builder.newDocument();
+
+ Element root = (Element) document.createElement(CPP_HEADER);
+
+ root.setAttribute(HEADER_NAME_ATTR, source.getPath());
+
+ document.appendChild(root);
+
+ Element intf = (Element) document.createElement(SCA_SERVICE);
+ root.appendChild(intf);
+
+ // Go through all the signatures we have collected...
+ Signature s = null;
+ for (Iterator iter = methods.iterator(); iter.hasNext();) {
+ s = (Signature) iter.next();
+
+ // Each signature is an operation
+ Element op = document.createElement(SCA_OPERATION);
+ op.setAttribute(OPERATION_NAME_ATTR, s.getMethodName());
+ intf.appendChild(op);
+
+ Parameter[] parms = s.getParameters();
+ if (parms != null) {
+
+ for (int i = 0; i < parms.length; i++) {
+ Element parm = (Element) document
+ .createElement(SCA_OPERATION_PARAMETER);
+ String type_string = parms[i].getTypeWithoutConst()
+ .toString();
+
+ type_string = type_string.replaceAll(":: ", "::");
+
+ Text text = document.createTextNode(type_string);
+ parm.appendChild(text);
+ parm.setAttribute(SCA_OPERATION_PARAMETER_NAME_ATTR,
+ parms[i].getName());
+
+ if (parms[i].getTypeWithoutConst().intern() != parms[i]
+ .getType().intern()) {
+ parm.setAttribute(
+ SCA_OPERATION_PARAMETER_CONST_ATTR, "true");
+ }
+
+ op.appendChild(parm);
+ // TO DO only really stores the value
+ // unsafely/temporarily
+ // which is fine while we handle everything at the
+ // end of parsing the "leaf" that represents that actual
+ // interface/service but the below will cause the second
+ // service
+ // processed to overwite the first one in the DOM. I we
+ // wish
+ // to do some overall processing at the end we will have
+ // to
+ // use a better more XPath like key that varies by
+ // instance
+ // of the service.
+ intf.setAttribute(SCA_INTERFACE_NAME_ATTR, s
+ .getTrimClassName());
+ }
+ }
+
+ Element rc = document.createElement(SCA_OPERATION_RETURN_TYPE);
+ rc.appendChild(document.createTextNode(s.getReturnType()
+ .toString().replaceAll(":: ", "::")));
+ op.appendChild(rc);
+
+ root.appendChild(intf);
+ }
+
+ // Set the name of the Service
+ // here, if we are not passed one we use
+ // the classname from the last header function signature...
+ if (serviceName == null && s != null) {
+ serviceName = s.getTrimClassName();
+ }
+
+ // this is used for the proxy file name but we need to
+ // use the reference name if this is pulled in due to it
+ // being a reference!!!
+ if (serviceName != null)
+ root.setAttribute("serviceName", serviceName);
+ if (referenceName != null)
+ root.setAttribute("referenceName", referenceName);
+ if (nameOfSorR != null)
+ root.setAttribute("nameOfSorR", nameOfSorR);
+
+ if (implClass != null) {
+ root.setAttribute("implClass", implClass);
+ } else {
+ root.setAttribute("implClass", moduleXmlFileHeaderNoExtorPath);
+ }
+
+ if (implClass != null) {
+ root.setAttribute("implNamespace", implNamespace);
+ }
+
+ // default class name to the name of the header...
+ if (headerClassName == null && source != null) {
+ headerClassName = source.getName().replaceAll(
+ "\\.h|\\.hpp|\\.h++", "");
+ }
+ root.setAttribute("headerClassName", headerClassName);
+
+ if (null == intfClass) {
+ intfClass = headerClassName;
+ }
+
+ if (null != intfNamespace) {
+ root.setAttribute("namespace", intfNamespace);
+ if (null != intfClass && !intfClass.startsWith(intfNamespace)) {
+ intfClass = intfNamespace + "::" + intfClass;
+ }
+ }
+
+ root.setAttribute("intfClass", intfClass);
+
+ if (componentTypeXmlFileIntfHeaderNameWithPathAndExt == null) {
+ componentTypeXmlFileIntfHeaderNameWithPathAndExt = "componentTypeHeader";
+ }
+ root.setAttribute("componentTypeHeader",
+ componentTypeXmlFileIntfHeaderNameWithPathAndExt);
+
+ if (moduleXmlFileImplHeaderNameWithPathAndExt == null) {
+ moduleXmlFileImplHeaderNameWithPathAndExt = "moduleXmlFileImplHeader";
+ }
+ root.setAttribute("moduleXmlFileHeader",
+ moduleXmlFileImplHeaderNameWithPathAndExt);
+
+ if (moduleXmlFileHeaderNoExtorPath == null) {
+ moduleXmlFileHeaderNoExtorPath = "moduleXmlFileHeaderNoExt";
+ }
+ root.setAttribute("moduleXmlFileHeaderNoExt",
+ moduleXmlFileHeaderNoExtorPath);
+
+ } catch (ParserConfigurationException pce) {
+ // Parser with specified options can't be built
+ pce.printStackTrace();
+ }
+
+ return document;
+
+ }
+
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/XMLFileActor.java b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/XMLFileActor.java
new file mode 100644
index 0000000000..047e1ab3f1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/XMLFileActor.java
@@ -0,0 +1,202 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tuscany.sca.cpp.tools.services;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMResult;
+import javax.xml.transform.dom.DOMSource;
+
+import org.apache.tuscany.sca.cpp.tools.common.FileActor;
+import org.apache.tuscany.sca.cpp.tools.common.Utils;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+/**
+ * The purpose of this abstract class is to provide a home for the standard
+ * processing that is involved in turning a XML file into an internal DOM.
+ */
+public abstract class XMLFileActor implements FileActor {
+
+ protected static Map handlers = new HashMap();
+
+ protected static Map parameters = new HashMap();
+
+ public boolean failed;
+
+ private int filesActedOn=0;
+
+ protected static TransformerFactory transformerFactory = TransformerFactory
+ .newInstance();
+
+ /**
+ * This method is the main FileActor method
+ *
+ * @see FileActor#actOnFile(File, File, int) Here we create an initial DOM
+ * and kick off the processing (using the handler map that has been set
+ * up by the concrete subclass).
+ *
+ * @param moduleXML
+ * the sca.module or fragment file
+ * @param target
+ * the target directory
+ * @param depth
+ * not uesed here but in the
+ * @see FileActor#actOnFile(File, File, int) interface to allow for
+ * recursive diving into a directory structure.
+ */
+ public void actOnFile(File moduleXML, File target, int depth)
+ throws Exception {
+
+ if (null == moduleXML || null == target) {
+ return;
+ }
+
+ filesActedOn++;
+
+ parameters.put("sourceFile", moduleXML);
+ parameters.put("targetFile", target);
+
+ if (transformerFactory.getFeature(DOMSource.FEATURE)
+ && transformerFactory.getFeature(DOMResult.FEATURE)) {
+ Document dom = createDomFromXMLFile(moduleXML);
+ if (dom != null) {
+ parameters.put("targetDirectoryFile", target);
+ DomHandler.handleDom(dom, handlers, parameters);
+ }
+ }
+ }
+
+ /**
+ * This method builds an in memory DOM from an XML file
+ *
+ * @param xmlSourceFile
+ * the XML file we are handling
+ * @return the resulting document
+ */
+ protected Document createDomFromXMLFile(File xmlSourceFile) {
+ Document dom = null;
+ DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
+ //We do not validate via f.setValidating(true);
+ f.setNamespaceAware(true);
+
+ try {
+ DocumentBuilder parser = f.newDocumentBuilder();
+ dom = parser.parse(xmlSourceFile);
+ } catch (SAXException sxe) {
+ String path;
+ try {
+ path = xmlSourceFile.getCanonicalPath();
+ } catch (IOException e) {
+ path = xmlSourceFile.getPath();
+ }
+ Utils.screenMessage("There has been a SAXException of type "
+ + sxe.getLocalizedMessage());
+ if (null != xmlSourceFile) {
+ Utils.screenMessage(" when processing file " + path);
+ } else {
+ Utils.screenMessage(" as the input file is null.");
+ }
+
+// Leave for possible future debug option
+// Utils.screenMessage(" The returned Java exception is below.");
+// if (sxe.getException() != null)
+// sxe.getException().printStackTrace();
+// else
+// sxe.printStackTrace();
+ } catch (ParserConfigurationException pce) {
+ String path;
+ try {
+ path = xmlSourceFile.getCanonicalPath();
+ } catch (IOException e) {
+ path = xmlSourceFile.getPath();
+ }
+ Utils
+ .screenMessage("There has been a ParserConfigurationException of type "
+ + pce.getLocalizedMessage());
+ if (null != xmlSourceFile) {
+ Utils.screenMessage(" when processing file " + path);
+ } else {
+ Utils.screenMessage(" as the input file is null.");
+ }
+
+// Leave for possible future debug option
+// Utils.screenMessage(" The returned Java exception is below.");
+// pce.printStackTrace();
+
+ } catch (IOException ioe) {
+ String path;
+ try {
+ path = xmlSourceFile.getCanonicalPath();
+ } catch (IOException e) {
+ path = xmlSourceFile.getPath();
+ }
+
+ Utils.screenMessage("Unable to open file " + path);
+ Utils.screenMessage(this.getContextMessage());
+
+
+
+ }
+
+ return dom;
+ }
+
+ /**
+ * @return an error message - usually over-ridden.
+ */
+ private String getContextMessage() {
+ return "Check the file exists and can be read.";
+ }
+
+ /**
+ * Set a parameter
+ *
+ * @param name
+ * @param value
+ */
+ public void setParameter(String name, Object value) {
+ parameters.put(name, value);
+ }
+
+ /**
+ * Get a parameter
+ *
+ * @param name
+ * @param value
+ * @return the value of the parameter
+ */
+ public Object getParameter(String name, Object value) {
+ return parameters.get(name);
+ }
+
+
+
+ /**
+ * @return Returns the filesActedOn.
+ */
+ public int getFilesActedOn() {
+ return filesActedOn;
+ }
+} \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/package.html b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/package.html
new file mode 100644
index 0000000000..316e4cd56e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/package.html
@@ -0,0 +1,140 @@
+<html>
+
+<head>
+<title>Design documentation for org\apache\tuscany\sca\cpp\tools\services</title>
+</head>
+
+<body lang=EN-GB>
+
+<div class=Section1>
+
+<h1>Overview</h1>
+
+
+
+<p>This package contains classes that generate C++ wrappers and
+proxies for C++ implementations of SCA services. </p>
+
+<h2>What the package does</h2>
+
+<p>The Scagen class main method will take in an input and
+output directory name. The input directory is taken to be the SCA module root
+directory.  The tool will generate the wrapper and proxy headers and methods
+bodies in the output directory. </p>
+
+<p>These proxies and wrappers enable the SCA for C++ runtime to
+act as a conduit for SCA C++ calls in a type free manner. Client code can call
+the type specific functions that are in the generated proxy classes. The call
+is marshalled into a generic format and a SCA for C++ runtime function with a
+standard signature is invoked. The details of the call are passed as data. </p>
+
+<p>On the other end of the runtime, a generated function with a
+standard signature is called, this function will inspect the data that
+represents the call’s method name and call the appropriate type specific
+function in the C++ implementation. </p>
+
+<h2>The Input Data Used</h2>
+
+<p>The input directory passed to the Scagen method is taken to
+be the SCA module root directory. All the sca.module and .fragment files in
+that directory are inspected to resolve all the &lt;component/&gt; elements
+within them. </p>
+
+<p>Each &lt;component/&gt; element found is inspected to see if
+it has a &lt;implementation.cpp/&gt; element within it. </p>
+
+<p>Each &lt;implementation.cpp/&gt; element should have a
+header attribute that represents a C++ header file that contains function
+prototypes for the C++ implementation of the service. An optional class
+attribute can be used to select one class if more than one that is present in
+the header file. The default class is the one with the same name as the header
+file. The tool will verify that the implementation header contains an
+appropriate class prototype. </p>
+
+
+
+<p>The directory that contains the implementation header should
+also contain a matching .componentType file for the equivalent SCA component. So
+for example, a MyServiceImpl.h file would have a corresponding MyServiceImpl.componentType
+file in the same directory. </p>
+
+
+
+<p>Each componentType file is inspected for &lt;service/&gt;
+and &lt;reference/&gt; elements. For each &lt;service/&gt; element that is
+found that contains a &lt;interface.cpp/&gt; element within it,</p>
+
+<p>the header attribute of the &lt;interface.cpp/&gt; is taken
+as the filename of the C++ interface header for the SCA service.  This C++
+header file is opened and used as a means for specifying the SCA service
+resulting in an appropriate wrapper and proxy being generated for this service
+interface. Both method bodies and headers are generated in the given output
+directory. The processing of a &lt;reference/&gt; element is the same except
+that only a proxy header and implementation are generated. </p>
+
+
+
+
+
+<h2>Outline Design: How it Works</h2>
+
+
+
+<p>The basic approach is to scan in the XML files by first
+creating a DOM document tree of them and then recursively rifling through the DOM 
+with some generic code in the XMLFileActorClass by default this processing will
+build up a map which maps the XPath location of attributes to their values.
+Additionally subclasses can add to a “handlers map” which maps from the name of
+a particular element to an object that implements the DomNodeHandler interface.
+If the XMLFileActor code comes across any element that has an equivalent handler
+in the handler map the objects handleNode method will be called. </p>
+
+<p>Typically the DomNodeHandler’s handle node interface will
+use XPath to pull out the parameters that it is interested in from the
+parameters map that is being built up by the generic code. </p>
+
+<p>This design was chosen as the Java level specified for the
+original implementation did not have direct XPath query of XML data but it was
+known that this would be available in Java 1.5 onwards. The design allows the
+DOM and parameters map handling to be replaced in the future with JRE 1.5 code
+with less impact on the rest of the code.</p>
+
+
+
+<p>The processing leads to the parsing of the C++ interface
+files using the org\apache\tuscany\sca\cpp\tools\common package. This results
+in a Headers object</p>
+
+<p>that contains a List of Signature objects, each one
+representing a function prototype found in the header. </p>
+
+
+
+<p>We are aiming to get all the semantic data we want to use
+into a DOM document (this represents the model of our input data) and then use
+XSLT to create the 4 different views of this data:</p>
+
+<p>Proxy C++ header</p>
+
+<p>Proxy C++  body</p>
+
+<p>Wrapper C++ header</p>
+
+<p>Wrapper C++ body</p>
+
+
+
+<p>So we prepopulate the DOM with parameter data that comes
+from the XML files and then iterate through the Signatures that are returned
+from the C++ header parser transferring the useful data into the DOM. </p>
+
+
+
+<p>We than use 4 XSLT stylesheets to generate the C++ output
+files as required. </p>
+
+</div>
+
+</body>
+
+</html>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl
new file mode 100644
index 0000000000..d6e564599a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyCPP.xsl
@@ -0,0 +1,274 @@
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTY
+ */
+
+ TODO There is duplication in the "..no_parms" templates with
+ the equivalent templates they are based on - that it would be
+ fairly easy to factor out.
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<!-- Part of the org.apache.tuscany.sca.cpp.tools.services packages
+
+ This stylesheet creates the CPP implementation of the
+ proxy body for a given SCA service
+ -->
+<xsl:output method="text"/>
+
+<!-- We do not generate output sourced from cppScopes -->
+<xsl:template match="cppScope"></xsl:template>
+
+<!-- We do not generate output sourced from private scaOperations -->
+<xsl:template match="scaOperation[@cppScope='private']">
+</xsl:template>
+
+<!-- We do not generate output sourced from the operation return types -->
+<xsl:template match="scaOperationReturnType">
+</xsl:template>
+
+
+<!--
+ CPP Header/Root
+-->
+<xsl:template match="cppHeader">/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+<xsl:apply-templates select="scaService" mode="include_header"/>
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;<!-- thats the prologue over nad done with
+ now continue with the scaServiceElement -->
+<xsl:apply-templates/> <!-- should go on to generic scaService below -->
+</xsl:template>
+
+<!-- -->
+<!-- Service -->
+<!-- -->
+<xsl:template match="scaService">
+<xsl:variable name="clazz">
+ <xsl:value-of select="../@implClass"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="../@nameOfSorR"/>
+ <xsl:text>_Proxy</xsl:text>
+</xsl:variable>
+<xsl:text>
+extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ </xsl:text><xsl:value-of select="$clazz"/>
+<xsl:text>* </xsl:text>
+<xsl:value-of select="$clazz"/>
+<xsl:text>_Factory(ServiceWrapper* target)
+ {
+ return new </xsl:text><xsl:value-of select="$clazz"/><xsl:text>(target);
+ }
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ void </xsl:text>
+<xsl:value-of select="$clazz"/>
+<xsl:text>_Destructor(void* proxy)
+ {
+ delete (</xsl:text><xsl:value-of select="$clazz"/><xsl:text>*)proxy;
+ }
+}
+
+</xsl:text>
+<xsl:value-of select="$clazz"/><xsl:text>::</xsl:text><xsl:value-of select="$clazz"/>(ServiceWrapper* targ) : target(targ)
+{
+}
+
+<xsl:value-of select="$clazz"/><xsl:text>::~</xsl:text><xsl:value-of select="$clazz"/>()
+{
+ if (target)
+ delete target;
+}<!--
+OK we have done the stuff that is not specific to any function in the service
+now we can do another apply-templates to pick up on the 0, 1 or more scaOperation
+DOM nodes that each relate to a function in the service
+ -->
+<xsl:apply-templates/>
+<!-- Always make sure we have a (visible) final newline -->
+<xsl:text>
+
+</xsl:text>
+</xsl:template>
+
+<!-- This template is just a small function that will generate the
+ #include that pulls in the correct C++ header
+ -->
+<xsl:template match="scaService" mode="include_header">
+<xsl:variable name="clazz">
+ <xsl:value-of select="../@implClass"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="../@nameOfSorR"/>
+ <xsl:text>_Proxy</xsl:text>
+</xsl:variable>
+<xsl:text>#include "</xsl:text>
+<xsl:value-of select="$clazz"/>
+<xsl:text>.h"</xsl:text>
+</xsl:template>
+
+
+
+<!-- -->
+<!-- Operation -->
+<!-- -->
+<xsl:template match="scaOperation">
+<xsl:variable name="clazz">
+ <xsl:value-of select="../../@implClass"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="../../@nameOfSorR"/>
+ <xsl:text>_Proxy</xsl:text>
+</xsl:variable>
+
+<!-- ignore the constructor and destructor -->
+<xsl:if test="@operationNameAttr != $clazz
+ and @operationNameAttr != concat('~', $clazz)" >
+<xsl:text>
+</xsl:text>
+<xsl:value-of select="scaOperationReturnType"/>
+<xsl:text> </xsl:text>
+<xsl:value-of select="$clazz"/><xsl:text>::</xsl:text>
+<xsl:value-of select="@operationNameAttr"/><xsl:text>(</xsl:text>
+<xsl:for-each select="scaOperationParameter">
+<xsl:if test=".!='void'">
+ <xsl:variable name="scaOperationParameterNameAttr">
+ <xsl:value-of select="concat('arg', position()-1 )"/>
+ </xsl:variable>
+ <xsl:variable name="isConst">
+ <xsl:value-of select="@scaOperationParameterConstAttr"/>
+ </xsl:variable>
+ <xsl:if test="contains($isConst,'true')">const</xsl:if><xsl:text> </xsl:text>
+ <xsl:value-of select="."/> <!-- get the actual type -->
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="$scaOperationParameterNameAttr"/>
+ <xsl:choose>
+ <xsl:when test="position()=last()">
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>, </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:if> <!-- test=".!='void'" -->
+
+</xsl:for-each>
+<xsl:text>)
+{</xsl:text>
+<xsl:call-template name="proxy_method_body"/>
+<xsl:text>
+}
+</xsl:text>
+</xsl:if>
+</xsl:template>
+
+
+<xsl:template name="proxy_method_body">
+ <xsl:variable name="noOfParms">
+ <xsl:choose>
+ <xsl:when test=".='void'">
+<xsl:text>0</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="last()"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+<xsl:text>
+ Operation operation("</xsl:text>
+ <xsl:value-of select="@operationNameAttr"/>
+ <xsl:text>");</xsl:text>
+ <xsl:if test="$noOfParms!=0">
+ <xsl:for-each select="scaOperationParameter">
+ <xsl:call-template name="proxy_method_body_set_parameter"/>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:call-template name="proxy_method_body_prepare_return_var"/>
+ <xsl:text>
+ target-&gt;invoke(operation);</xsl:text>
+ <xsl:call-template name="proxy_method_body_return"/>
+</xsl:template>
+
+
+<xsl:template name="proxy_method_body_return">
+ <xsl:variable name="type">
+ <xsl:value-of select="scaOperationReturnType/text()"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$type='void'"><!-- nothing -->
+ <xsl:text>
+ return;</xsl:text>
+ </xsl:when>
+ <xsl:when test="contains($type, '&amp;')"><!-- reference -->
+ <xsl:variable name="type_no_amp">
+ <xsl:value-of select="substring-before($type, '&amp;')"/>
+ </xsl:variable>
+ <xsl:text>
+ return *(</xsl:text><xsl:value-of select="$type_no_amp"/><xsl:text>*)operation.getReturnValue();</xsl:text>
+ </xsl:when>
+ <xsl:otherwise><!-- simple type -->
+ <xsl:text>
+ return ret;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="proxy_method_body_prepare_return_var">
+ <xsl:variable name="type">
+ <xsl:value-of select="scaOperationReturnType/text()"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$type='void'"><!-- nothing -->
+ <!-- nothing -->
+ </xsl:when>
+ <xsl:when test="contains($type, '&amp;')"><!-- reference -->
+ </xsl:when>
+ <xsl:otherwise>
+<xsl:text>
+ </xsl:text> <xsl:value-of select="$type"/><xsl:text> ret;
+ operation.setReturnValue(&amp;ret);</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+
+</xsl:template>
+
+
+<xsl:template name="proxy_method_body_set_parameter">
+ <xsl:variable name="scaOperationParameterNameAttrInner">
+ <xsl:value-of select="concat('arg', position()-1 )"/>
+ </xsl:variable>
+ <xsl:variable name="type">
+ <xsl:value-of select="."/>
+ </xsl:variable>
+ operation.addParameter(&amp;<xsl:value-of select="$scaOperationParameterNameAttrInner"/><xsl:text>);</xsl:text>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyHeader.xsl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyHeader.xsl
new file mode 100644
index 0000000000..8c19b20727
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfProxyHeader.xsl
@@ -0,0 +1,222 @@
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTY
+ */
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<!-- Part of the org.apache.tuscany.sca.cpp.tools.services packages
+ -
+ - This stylesheet creates the CPP implementation of the
+ - proxy header for a given SCA service
+ -->
+
+ <xsl:output method="text" />
+
+ <!-- Delete cppScopes -->
+ <xsl:template match="cppScope"></xsl:template>
+
+ <!-- Delete private methods cppScopes -->
+ <xsl:template match="scaOperation[@cppScope='private']">
+ </xsl:template>
+
+ <!-- Delete private methods cppScopes -->
+ <xsl:template match="scaOperationReturnType"></xsl:template>
+
+
+ <!-- -->
+ <!-- CPP Header/Root -->
+ <!-- -->
+ <xsl:template match="cppHeader">
+ <xsl:variable name="class">
+ <xsl:value-of select="concat(@implClass, '_', @nameOfSorR, '_Proxy')"/>
+ </xsl:variable>
+<xsl:text>/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+</xsl:text>
+ <xsl:call-template name="ifndef_start">
+ <xsl:with-param name="class"
+ select="$class"/>
+ </xsl:call-template>
+
+
+ <xsl:call-template name="include_headers">
+ <xsl:with-param name="componentTypeHeader"
+ select="@componentTypeHeader"/>
+ </xsl:call-template>
+
+ <xsl:apply-templates select="scaService" mode="class_body"/>
+
+ <xsl:call-template name="ifndef_end">
+ <xsl:with-param name="class"
+ select="$class"/>
+ </xsl:call-template>
+<!-- Always make sure we have a (visible) final newline -->
+<xsl:text>
+
+</xsl:text>
+</xsl:template>
+
+
+<!-- Here are the subroutine templates in order -->
+
+ <xsl:template name="ifndef_start">
+ <!--For example,
+ #ifndef CustomerInfoImpl_CustomerInfoService_Proxy_h
+ #define CustomerInfoImpl_CustomerInfoService_Proxy_h
+ -->
+ <xsl:param name="class"/>
+ <xsl:text>#ifndef </xsl:text><xsl:value-of select="$class"/><xsl:text>_h</xsl:text>
+<!-- newline -->
+<xsl:text>
+</xsl:text>
+ <xsl:text>#define </xsl:text><xsl:value-of select="$class"/><xsl:text>_h</xsl:text>
+<!-- newline -->
+<xsl:text>
+
+</xsl:text>
+ <xsl:text>#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif </xsl:text>
+<!-- newline -->
+<xsl:text>
+
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="include_headers">
+ <!--For example,
+ #include "CustomerInfo.h"
+ #include "tuscany/sca/core/ServiceWrapper.h"
+ -->
+ <xsl:param name="componentTypeHeader"/>
+ <xsl:text>#include "</xsl:text><xsl:value-of select="translate($componentTypeHeader,'\','/')"/><xsl:text>"</xsl:text>
+<!-- newline -->
+<xsl:text>
+</xsl:text>
+ <xsl:text>#include "tuscany/sca/core/ServiceWrapper.h"</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="scaService" mode="class_body">
+ <!--For example
+ class proxyclassname : public interface_class
+ {
+ constructor
+ destructor
+ then apply operation templates for operations
+ };
+
+ E.g. Specifically
+
+ class CustomerInfoImpl_CustomerInfoService_Proxy : public CustomerInfo
+ {
+ public:
+ CustomerInfoImpl_CustomerInfoService_Proxy(tuscany::sca::ServiceWrapper*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Proxy();
+ virtual const char* getCustomerInformation(const char* customerID);
+ private:
+ tuscany::sca::ServiceWrapper* target;
+ };
+ -->
+ <!-- TODO second definition, remove? -->
+ <xsl:variable name="class">
+ <xsl:value-of select="concat(../@implClass, '_', ../@nameOfSorR, '_Proxy')"/>
+ </xsl:variable>
+<xsl:text>
+
+class </xsl:text>
+<xsl:value-of select="$class"/>
+<xsl:text> : public </xsl:text><xsl:value-of select="../@intfClass"/>
+<xsl:text>
+{
+public:
+ </xsl:text><xsl:value-of select="$class"/><xsl:text>(tuscany::sca::ServiceWrapper*);</xsl:text>
+ <xsl:text>
+ virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>();
+</xsl:text>
+ <!-- operations -->
+ <xsl:apply-templates/>
+<xsl:text>private:
+ tuscany::sca::ServiceWrapper* target;
+};
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="ifndef_end">
+ <!--For example,
+ #endif // CustomerInfoImpl_CustomerInfoService_Proxy_h
+ -->
+ <xsl:param name="class"/>
+ <xsl:text>
+#endif // </xsl:text><xsl:value-of select="$class"/><xsl:text>_h</xsl:text>
+ </xsl:template>
+
+
+
+
+
+
+<!-- Operation -->
+<!--For example
+ virtual const char* getCustomerInformation(const char* customerID);
+-->
+<xsl:template match="scaOperation">
+<xsl:variable name="class">
+ <xsl:value-of select="concat(../../@implClass, '_', ../../@nameOfSorR, '_Proxy')"/>
+</xsl:variable>
+<xsl:if test="@operationNameAttr != $class
+ and @operationNameAttr != concat('~', $class)" >
+<xsl:text> virtual </xsl:text>
+<xsl:value-of select="scaOperationReturnType"/>
+<xsl:text> </xsl:text>
+<xsl:value-of select="@operationNameAttr"/><xsl:text>(</xsl:text>
+<xsl:for-each select="scaOperationParameter">
+ <xsl:variable name="isConst">
+ <xsl:value-of select="@scaOperationParameterConstAttr"/>
+ </xsl:variable>
+ <xsl:variable name="noOfParms">
+ <xsl:value-of select="last()"/>
+ </xsl:variable>
+ <xsl:if test="contains($isConst,'true')">const</xsl:if><xsl:text> </xsl:text>
+ <xsl:value-of select="."/> <!-- get the actual type -->
+ <xsl:text> </xsl:text>
+ <xsl:value-of select="@scaOperationParameterNameAttr"/>
+ <xsl:choose>
+ <xsl:when test="position()=last()"></xsl:when>
+ <xsl:otherwise>
+ <xsl:text>, </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+<xsl:text>);
+</xsl:text>
+</xsl:if>
+</xsl:template>
+</xsl:stylesheet>
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperCPP.xsl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperCPP.xsl
new file mode 100644
index 0000000000..303ce9921d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperCPP.xsl
@@ -0,0 +1,276 @@
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTY
+ */
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<!-- Part of the org.apache.tuscany.sca.cpp.tools.services packages
+ -
+ - This stylesheet creates the CPP implementation of the
+ - wrapper body for a given SCA service
+ -->
+<xsl:output method="text"/>
+
+<!-- Delete cppScopes -->
+<xsl:template match="cppScope"></xsl:template>
+
+<!-- Delete private methods cppScopes -->
+<xsl:template match="scaOperation[@cppScope='private']">
+</xsl:template>
+
+<!-- Don't act on return types -->
+<xsl:template match="scaOperationReturnType">
+</xsl:template>
+
+
+<!-- -->
+<!-- CPP Header/Root -->
+<!-- -->
+<xsl:template match="cppHeader">/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+<xsl:apply-templates select="scaService" mode="include_header"/>
+
+#include "osoa/sca/sca.h"
+using namespace osoa::sca;
+using namespace tuscany::sca;
+
+<xsl:if test="not(@implNamespace = '')">using <xsl:value-of select="@implNamespace"/><xsl:value-of select="@implClass"/>;</xsl:if>
+<xsl:text><!-- newline -->
+
+</xsl:text>
+<!-- thats the prologue over and done with
+ now continue with the scaServiceElement -->
+<xsl:apply-templates/> <!-- will be applied to scaService -->
+<!-- Always make sure we have a final newline -->
+<xsl:text>
+
+</xsl:text>
+</xsl:template>
+
+<!-- -->
+<!-- Service -->
+<!-- -->
+<xsl:template match="scaService">
+<xsl:variable name="class">
+ <xsl:value-of select="../@implClass"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="../@serviceName"/>
+ <xsl:text>_Wrapper</xsl:text>
+</xsl:variable>
+<xsl:text>extern "C"
+{
+
+ #if defined(WIN32) || defined(_WINDOWS)
+ __declspec(dllexport)
+ #endif
+ </xsl:text><xsl:value-of select="$class"/>
+<xsl:text>* </xsl:text>
+<xsl:value-of select="$class"/>
+<xsl:text>_Factory(tuscany::sca::model::Service* target)
+ {
+ return new </xsl:text><xsl:value-of select="$class"/><xsl:text>(target);
+ }
+}
+
+</xsl:text>
+<xsl:value-of select="$class"/><xsl:text>::</xsl:text><xsl:value-of select="$class"/><xsl:text>(Service* target) : ComponentServiceWrapper(target)
+{
+ impl = (</xsl:text><xsl:value-of select="../@implClass"/><xsl:text>*)getImplementation();
+}
+
+</xsl:text>
+<xsl:value-of select="$class"/><xsl:text>::~</xsl:text><xsl:value-of select="$class"/><xsl:text>()
+{
+ releaseImplementation();
+}
+
+void* </xsl:text>
+<xsl:value-of select="$class"/><xsl:text>::newImplementation()
+{
+ return new </xsl:text><xsl:value-of select="../@implClass"/><xsl:text>;
+}
+
+void </xsl:text>
+<xsl:value-of select="$class"/><xsl:text>::deleteImplementation()
+{
+ delete impl;
+}
+
+void </xsl:text><xsl:value-of select="$class"/><xsl:text>::invokeService(Operation&amp; operation)
+{
+ const string&amp; operationName = operation.getName();
+
+</xsl:text>
+<xsl:apply-templates/><!-- an if statment for each operation -->
+<xsl:text>
+
+ throw ServiceRuntimeException("Invalid operation");
+
+}</xsl:text>
+</xsl:template>
+
+<xsl:template match="scaService" mode="include_header">
+<xsl:variable name="class">
+ <xsl:value-of select="../@implClass"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="../@serviceName"/>
+ <xsl:text>_Wrapper</xsl:text>
+</xsl:variable>
+<xsl:text>#include "</xsl:text>
+<xsl:value-of select="$class"/>
+<xsl:text>.h"</xsl:text>
+</xsl:template>
+
+<!-- -->
+<!-- Operation -->
+<!-- -->
+<xsl:template match="scaOperation">
+<!--For example
+ if (operationName == "getCustomerInformation")
+ {
+ operation.setReturnValue(impl->getCustomerInformation((const char*)parms[0]));
+ return;
+ }
+-->
+<xsl:if test="@operationNameAttr != ../../@intfClass
+ and @operationNameAttr != concat('~', ../../@intfClass)" >
+<xsl:text> if (operationName == "</xsl:text>
+<xsl:value-of select="@operationNameAttr"/>
+<xsl:text>")
+ {
+</xsl:text>
+ <xsl:call-template name="this_operation_body"/>
+<xsl:text>
+ }
+</xsl:text>
+
+</xsl:if>
+</xsl:template>
+
+<xsl:template name="this_operation_body">
+<xsl:if test="./scaOperationParameter/text() != 'void' ">
+ <xsl:if test="normalize-space(./scaOperationParameter/text()) != ' ' ">
+ <xsl:if test="./scaOperationParameter/text() != '' ">
+ <xsl:for-each select="scaOperationParameter">
+ <xsl:call-template name="prepare_parameter_n"/>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:if>
+</xsl:if>
+<xsl:call-template name="invoke_for_return_type"/>
+<xsl:text>
+ return;</xsl:text>
+</xsl:template>
+
+<xsl:template name="prepare_parameter_n">
+ <xsl:variable name="isConst">
+ <xsl:value-of select="@scaOperationParameterConstAttr"/>
+ </xsl:variable>
+ <xsl:variable name="type">
+ <xsl:value-of select="."/>
+ </xsl:variable>
+<xsl:text> </xsl:text>
+ <xsl:choose>
+ <xsl:when test="contains($type, '&amp;')"><!-- reference -->
+ <xsl:variable name="type_no_amp">
+ <xsl:value-of select="substring-before($type, '&amp;')"/>
+ </xsl:variable>
+ <xsl:value-of select="$type"/><xsl:text> p</xsl:text><xsl:value-of select="position()-1"/><xsl:text> = *(</xsl:text><xsl:value-of select="$type_no_amp"/>
+ <xsl:text>*)operation.getParameterValue(</xsl:text><xsl:value-of select="position()-1"/><xsl:text>);
+</xsl:text>
+ </xsl:when>
+ <xsl:when test="contains($type, '*')"><!-- pointer -->
+ <xsl:if test="contains($isConst,'true')">const </xsl:if>
+ <xsl:value-of select="."/><xsl:text> p</xsl:text><xsl:value-of select="position()-1"/><xsl:text> = *(</xsl:text>
+ <xsl:if test="contains($isConst,'true')">const</xsl:if><xsl:text> </xsl:text>
+ <xsl:value-of select="$type"/>
+ <xsl:text>*)operation.getParameterValue(</xsl:text><xsl:value-of select="position()-1"/><xsl:text>);
+</xsl:text>
+ </xsl:when>
+ <xsl:when test="contains($type, 'DataObjectPtr')"><!-- DataObjectPtr -->
+ <xsl:text>DataObjectPtr&amp; p</xsl:text><xsl:value-of select="position()-1"/><xsl:text> = *(DataObjectPtr*)operation.getParameterValue(</xsl:text><xsl:value-of select="position()-1"/><xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:otherwise><!-- simple type -->
+ <xsl:if test="contains($isConst,'true')">const </xsl:if><xsl:value-of select="$type"/><xsl:text>&amp; p</xsl:text><xsl:value-of select="position()-1"/><xsl:text> = *(</xsl:text>
+ <xsl:if test="contains($isConst,'true')">const</xsl:if><xsl:text> </xsl:text>
+ <xsl:value-of select="$type"/>
+ <xsl:text>*)operation.getParameterValue(</xsl:text><xsl:value-of select="position()-1"/><xsl:text>);
+</xsl:text>
+
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="invoke_for_return_type">
+ <xsl:variable name="type">
+ <xsl:value-of select="./scaOperationReturnType/text()"/>
+ </xsl:variable>
+ <xsl:choose>
+ <!-- VOID -->
+ <xsl:when test="$type='void'">
+<xsl:text> </xsl:text>
+ <xsl:call-template name="impl_arrow_op_brackets_and_parms"/><xsl:text>;</xsl:text>
+ </xsl:when>
+ <xsl:when test="contains($type, '&amp;')"><!-- reference -->
+ <xsl:text> </xsl:text><xsl:value-of select="$type"/><xsl:text> ret = </xsl:text><xsl:call-template name="impl_arrow_op_brackets_and_parms"/><xsl:text>;</xsl:text>
+ <xsl:text>
+ operation.setReturnValue(&amp;ret);</xsl:text>
+ </xsl:when>
+ <xsl:otherwise><!-- simple type -->
+ <xsl:text> *(</xsl:text><xsl:value-of select="$type"/><xsl:text>*)operation.getReturnValue() = </xsl:text><xsl:call-template name="impl_arrow_op_brackets_and_parms"/><xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="impl_arrow_op_brackets_and_parms"><!-- context is "scaOperation" -->
+ <xsl:text>impl-></xsl:text><xsl:value-of select="./@operationNameAttr"/><xsl:text>(</xsl:text>
+<xsl:if test="./scaOperationParameter/text() != 'void' ">
+ <xsl:if test="./scaOperationParameter/text() != '' ">
+ <xsl:if test="normalize-space(./scaOperationParameter/text()) != ' ' ">
+ <xsl:for-each select="scaOperationParameter">
+ <xsl:call-template name="parameter_for_parameter_list"/>
+ </xsl:for-each>
+</xsl:if>
+</xsl:if>
+</xsl:if>
+<xsl:text>)</xsl:text>
+</xsl:template>
+
+<xsl:template name="parameter_for_parameter_list">
+<xsl:text>p</xsl:text><xsl:value-of select="position()-1"/>
+ <xsl:choose>
+ <xsl:when test="position()=last()"></xsl:when>
+ <xsl:otherwise>
+ <xsl:text>, </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+
+
+</xsl:stylesheet>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperHeader.xsl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperHeader.xsl
new file mode 100644
index 0000000000..f2afc37a07
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/tools/scagen/src/org/apache/tuscany/sca/cpp/tools/services/xsl/SCA4CPPIntfWrapperHeader.xsl
@@ -0,0 +1,185 @@
+<!--
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTY
+ */
+-->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+<!-- Part of the org.apache.tuscany.sca.cpp.tools.services packages
+ -
+ - This stylesheet creates the CPP implementation of the
+ - wrapper header for a given SCA service
+ -->
+ <xsl:output method="text" />
+
+ <!-- Delete cppScopes -->
+ <xsl:template match="cppScope"></xsl:template>
+
+ <!-- Delete private methods cppScopes -->
+ <xsl:template match="scaOperation[@cppScope='private']">
+ </xsl:template>
+
+ <!-- Delete private methods cppScopes -->
+ <xsl:template match="scaOperationReturnType"></xsl:template>
+
+
+ <!-- -->
+ <!-- CPP Header/Root -->
+ <!-- -->
+ <xsl:template match="cppHeader">
+ <xsl:variable name="class">
+ <xsl:value-of select="concat(@implClass, '_', @serviceName, '_Wrapper')"/>
+ </xsl:variable>
+<xsl:text>/*
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+</xsl:text>
+ <xsl:call-template name="ifndef_start">
+ <xsl:with-param name="class"
+ select="$class"/>
+ </xsl:call-template>
+
+
+ <xsl:call-template name="include_headers">
+ <xsl:with-param name="header"
+ select="@moduleXmlFileHeader"/>
+ </xsl:call-template>
+
+ <xsl:apply-templates select="scaService" mode="class_body"/>
+
+ <xsl:call-template name="ifndef_end">
+ <xsl:with-param name="class"
+ select="$class"/>
+ </xsl:call-template>
+<!-- Always make sure we have a (visible) final return -->
+<xsl:text>
+
+</xsl:text>
+</xsl:template>
+
+
+<!-- Here are the subroutine templates in order -->
+
+ <xsl:template name="ifndef_start">
+ <!--For example,
+ #ifndef CustomerInfoImpl_CustomerInfoService_Wrapper_h
+ #define CustomerInfoImpl_CustomerInfoService_Wrapper_h
+ -->
+ <xsl:param name="class"/>
+ <xsl:text>#ifndef </xsl:text><xsl:value-of select="$class"/><xsl:text>_h</xsl:text>
+<!-- newline -->
+<xsl:text>
+</xsl:text>
+ <xsl:text>#define </xsl:text><xsl:value-of select="$class"/><xsl:text>_h</xsl:text>
+<!-- newline -->
+<xsl:text>
+
+</xsl:text>
+ <xsl:text>#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif </xsl:text>
+<!-- newline -->
+<xsl:text>
+
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="include_headers">
+ <!--For example,
+ #include "CustomerInfoImpl.h"
+ #include "tuscany/sca/core/ComponentServiceWrapper.h"
+ -->
+ <xsl:param name="header"/>
+ <xsl:text>#include "</xsl:text><xsl:value-of select="translate($header,'\','/')"/><xsl:text>"</xsl:text>
+<!-- newline -->
+<xsl:text>
+</xsl:text>
+ <xsl:text>#include "tuscany/sca/core/ComponentServiceWrapper.h"</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="scaService" mode="class_body">
+ <!--For example
+ class wrapperclassname : public tuscany::sca::ComponentServiceWrapper
+ {
+ constructor
+ destructor
+ then apply operation templates for operations
+ };
+
+ E.g. Specifically
+
+ class CustomerInfoImpl_CustomerInfoService_Wrapper : public tuscany::sca::ComponentServiceWrapper
+ {
+ public:
+ CustomerInfoImpl_CustomerInfoService_Wrapper(tuscany::sca::model::Component*);
+ virtual ~CustomerInfoImpl_CustomerInfoService_Wrapper();
+ virtual void invoke(tuscany::sca::Operation& operation);
+
+ private:
+ CustomerInfoImpl* impl;
+ };
+ -->
+ <!-- TODO second definition, remove? -->
+ <xsl:variable name="class">
+ <xsl:value-of select="concat(../@implClass, '_', ../@serviceName, '_Wrapper')"/>
+ </xsl:variable>
+<xsl:text>
+
+class </xsl:text>
+<xsl:value-of select="$class"/>
+<xsl:text> : public tuscany::sca::ComponentServiceWrapper
+{
+public:
+ </xsl:text><xsl:value-of select="$class"/><xsl:text>(tuscany::sca::model::Service* target);</xsl:text>
+ <xsl:text>
+ virtual ~</xsl:text><xsl:value-of select="$class"/><xsl:text>();
+ virtual void invokeService(tuscany::sca::Operation&amp; operation);
+ virtual void* newImplementation();
+ virtual void deleteImplementation();
+</xsl:text>
+<xsl:text>private:
+ </xsl:text>
+ <xsl:value-of select="../@implNamespace"/><xsl:value-of select="../@implClass"/><xsl:text>* impl;
+};
+</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="ifndef_end">
+ <!--For example,
+ #endif // CustomerInfoImpl_CustomerInfoService_Wrapper_h
+ -->
+ <xsl:param name="class"/>
+ <xsl:text>
+#endif // </xsl:text><xsl:value-of select="$class"/><xsl:text>_h</xsl:text>
+ </xsl:template>
+
+<xsl:template match="scaOperation">
+</xsl:template>
+
+</xsl:stylesheet>
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/readme.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/readme.txt
new file mode 100644
index 0000000000..7252f56a11
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/readme.txt
@@ -0,0 +1,2 @@
+The XSDs describing the SCA model
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-sca.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-sca.xsd
new file mode 100644
index 0000000000..293c63e83a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-sca.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.sca" type="sca:SCABinding" substitutionGroup="sca:binding" sdo:name="bindingSca"/>
+ <complexType name="SCABinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-webservice.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-webservice.xsd
new file mode 100644
index 0000000000..95052a52aa
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-binding-webservice.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+<element name="binding.ws" type="sca:WebServiceBinding" substitutionGroup="sca:binding" sdo:name="bindingWs"/>
+ <complexType name="WebServiceBinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="port" type="anyURI" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-core.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-core.xsd
new file mode 100644
index 0000000000..48fac92913
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-core.xsd
@@ -0,0 +1,240 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <element name="componentType" type="sca:ComponentType"/>
+ <complexType name="ComponentType">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="service" type="sca:Service"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="reference" type="sca:Reference"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="property" type="sca:Property"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="Service">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="interface" type="sca:Interface"/>
+ <complexType name="Interface"/>
+
+ <complexType name="Reference">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="multiplicity" type="sca:Multiplicity" use="optional" default="1..1"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="Property"> <!-- abstract="true"-->
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="type" type="QName" use="required"/>
+ <attribute name="many" type="boolean" default="false" use="optional"/>
+ <attribute name="required" type="boolean" default="false" use="optional"/>
+ <attribute name="default" type="string" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+ <element name="moduleFragment" type="sca:ModuleFragment"/>
+ <complexType name="ModuleFragment">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="entryPoint" type="sca:EntryPoint"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="component" type="sca:Component"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="externalService" type="sca:ExternalService"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="wire" type="sca:ModuleWire"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="module" type="sca:Module"/>
+ <complexType name="Module">
+ <complexContent>
+ <extension base="sca:ModuleFragment"/>
+ </complexContent>
+ </complexType>
+
+ <complexType name="EntryPoint">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <element minOccurs="1" maxOccurs="unbounded" ref="sca:binding"/>
+ <element minOccurs="1" maxOccurs="unbounded" name="reference" type="anyURI"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="multiplicity" type="sca:Multiplicity" use="optional" default="1..1"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+ <!-- a multiplicity 1..1 or 0..n sample
+ <reference>StockQuoteComponent</reference> - type must be URI
+ a multiplicity 1..n or 0..n sample
+ <reference>StockQuoteComponent1</reference> - type must be URI
+ <reference>StockQuoteComponent2</reference>
+ -->
+
+ <element name="binding" type="sca:Binding"/>
+ <complexType name="Binding">
+ <attribute name="uri" type="anyURI" use="optional"/>
+ </complexType>
+
+
+ <complexType name="Component">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:implementation"/>
+ <element minOccurs="0" maxOccurs="1" name="properties" type="sca:PropertyValues"/>
+ <element minOccurs="0" maxOccurs="1" name="references" type="sca:ReferenceValues"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+ <!-- a multiplicity 1..1 or 0..1 sample
+ <references>
+ <v:stockQuote>
+StockQuoteComponent
+</v:stockquote> - type must be URI
+ </references>
+ a multiplicity 1..n or 0..n sample
+ <references>
+ <v:stockQuote>StockQuoteComponent1</v:stockQuote>
+- type must be URI
+ <v:stockQuote>StockQuoteComponent2</v:stockQuote>
+ </references>
+ -->
+
+ <element name="implementation" type="sca:Implementation"/>
+ <complexType name="Implementation"/>
+
+ <complexType name="PropertyValues">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="ReferenceValues">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+ <complexType name="ExternalService">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <element minOccurs="0" maxOccurs="unbounded" ref="sca:binding"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="overridable" type="sca:OverrideOptions" default="may" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+
+ <complexType name="ModuleWire">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:source.uri" sdo:name="sourceUri"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:target.uri" sdo:name="targetUri"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="source" type="anyType"/>
+ <element name="target" type="anyType"/>
+
+
+ <element name="source.uri" type="anyURI" substitutionGroup="sca:source" sdo:name="sourceUri"/>
+ <element name="target.uri" type="anyURI" substitutionGroup="sca:target" sdo:name="targetUri"/>
+
+ <element name="subsystem" type="sca:Subsystem"/>
+ <complexType name="Subsystem">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="entryPoint" type="sca:EntryPoint"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="moduleComponent" type="sca:ModuleComponent"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="externalService" type="sca:ExternalService"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="wire" type="sca:SystemWire"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="uri" type="anyURI" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+ <complexType name="ModuleComponent">
+ <sequence>
+ <element minOccurs="0" maxOccurs="1" name="properties" type="sca:PropertyValues"/>
+ <element minOccurs="0" maxOccurs="1" name="references" type="sca:ReferenceValues"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="module" type="NCName" use="required"/>
+ <attribute name="uri" type="anyURI" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="SystemWire">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:source"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:target"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+ <element name="source.epr" type="anyType" substitutionGroup="sca:source"/>
+ <element name="target.epr" type="anyType" substitutionGroup="sca:target"/>
+
+ <simpleType name="Multiplicity">
+ <restriction base="string">
+ <enumeration value="0..1"/>
+ <enumeration value="1..1"/>
+ <enumeration value="0..n"/>
+ <enumeration value="1..n"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="OverrideOptions">
+ <restriction base="string">
+ <enumeration value="no"/>
+ <enumeration value="may"/>
+ <enumeration value="must"/>
+ </restriction>
+ </simpleType>
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-cpp.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-cpp.xsd
new file mode 100644
index 0000000000..970549176f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-cpp.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.cpp" type="sca:CPPImplementation" substitutionGroup="sca:implementation" sdo:name="implementationCpp"/>
+ <complexType name="CPPImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="dll" type="NCName" use="required"/>
+ <attribute name="header" type="NCName" use="required"/>
+ <attribute name="class" type="Name" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-java.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-java.xsd
new file mode 100644
index 0000000000..7745b4ffb7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-implementation-java.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.java" type="sca:JavaImplementation" substitutionGroup="sca:implementation" sdo:name="implementationJava"/>
+ <complexType name="JavaImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-cpp.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-cpp.xsd
new file mode 100644
index 0000000000..dd286afef6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-cpp.xsd
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.cpp" type="sca:CPPInterface" substitutionGroup="sca:interface"
+ sdo:name="interfaceCpp"/>
+ <complexType name="CPPInterface">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="header" type="NCName" use="required"/>
+ <attribute name="class" type="Name" use="required"/>
+ <attribute name="scope" type="sca:CPPScope" use="optional"/>
+ <attribute name="remotable" type="boolean" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <simpleType name="CPPScope">
+ <restriction base="string">
+ <enumeration value="stateless"/>
+ <enumeration value="module"/>
+ </restriction>
+ </simpleType>
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-java.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-java.xsd
new file mode 100644
index 0000000000..a1955a2795
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-java.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.java" type="sca:JavaInterface" substitutionGroup="sca:interface" sdo:name="interfaceJava"/>
+ <complexType name="JavaInterface">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="interface" type="NCName" use="required"/>
+ <attribute name="callbackInterface" type="NCName" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-wsdl.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-wsdl.xsd
new file mode 100644
index 0000000000..e857a77d84
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca-interface-wsdl.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.wsdl" type="sca:WSDLPortType" substitutionGroup="sca:interface" sdo:name="interfaceWsdl"/>
+ <complexType name="WSDLPortType">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="interface" type="anyURI" use="required"/>
+ <attribute name="callbackInterface" type="anyURI" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca.xsd
new file mode 100644
index 0000000000..619c38aaac
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/sca.xsd
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.osoa.org/xmlns/sca/0.9"
+ xmlns:sca="http://www.osoa.org/xmlns/sca/0.9">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <include schemaLocation="sca-interface-java.xsd"/>
+ <include schemaLocation="sca-interface-wsdl.xsd"/>
+ <include schemaLocation="sca-interface-cpp.xsd"/>
+
+ <include schemaLocation="sca-implementation-java.xsd"/>
+ <include schemaLocation="sca-implementation-cpp.xsd"/>
+
+ <include schemaLocation="sca-binding-webservice.xsd"/>
+ <include schemaLocation="sca-binding-sca.xsd"/>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/tuscany.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/tuscany.xsd
new file mode 100644
index 0000000000..335db42475
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sca/xsd/tuscany.xsd
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://org.apache.tuscany/xmlns/cpp/1.0"
+ xmlns:tuscany="http://org.apache.tuscany/xmlns/cpp/1.0"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <element name="tuscany-model" type="tuscany:ModelType"/>
+ <complexType name="ModelType">
+ <sequence>
+ <element minOccurs="0" maxOccurs="1" name="wsdl" type="tuscany:WSDLType"/>
+ <element minOccurs="0" maxOccurs="1" name="xsd" type="tuscany:XSDType"/>
+ </sequence>
+ </complexType>
+
+ <complexType name="WSDLType">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="file" type="tuscany:FileType"/>
+ </sequence>
+ </complexType>
+
+ <complexType name="XSDType">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="file" type="tuscany:FileType"/>
+ </sequence>
+ </complexType>
+
+ <complexType name="FileType">
+ <attribute name="name" type="NCName" use="required"/>
+ </complexType>
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/AUTHORS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/AUTHORS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/AUTHORS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/COPYING b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/COPYING
new file mode 100755
index 0000000000..6b0b1270ff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/COPYING
@@ -0,0 +1,203 @@
+
+ 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/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/ChangeLog b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/ChangeLog
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/ChangeLog
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Committers Guide.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Committers Guide.txt
new file mode 100644
index 0000000000..5f82e39c14
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Committers Guide.txt
@@ -0,0 +1,69 @@
+Tuscany SDO Committers Guide
+============================
+
+All classes should be in the commonj/sdo namespace.
+
+The Tuscany SDO codebase consists of a number of abstract classes representing the SDO API. These
+are accompanied by a set of classes whose names end in Impl, which are the implementations of the
+API. For example the DataObject API is represented by the DataObject class, and implemented by
+the DataObjectImpl class.
+
+When pointers to classes are handed out by the library, they are really pointing at instances of
+the Impl class, but the application must not make that assumption.
+
+DataObjects and DataFactories inherit from a base class which maintains a reference count on
+itself (RefCountingObject). The pointers handed out are really classes holding a pointer to
+the object, such that they can contribute to the reference count when copied. These RefCountingPointers
+must not be deleted, they dispose of the underlying object when the reference count drops to
+zero.
+
+There is trace commented out of RefCountingObject, which can count and report the references. It is
+particularly useful to check that all instances are cleared at the end of a program run.
+
+The API for metadata consists of the DataFactory, Property and Type classes. All Properties and Types
+handed out to the client are const, so setting up the modifying the types is done using APIS of the
+data factory.
+
+The process of creating types is usually done by loading them from XSD, but can also be performed
+by using the data factory. Properties and Types may both be defined, but the data factory 'locks'
+itself as soon as the first DataObject is created. It does this because at that point it needs to
+resolve the type hierarchy, and perform validation. For consistency a Type may not be modified once
+an instance has been created.
+
+A data object contains properties, which are of a particular Type, however the API allows access to
+all properties using any of the methods. getString() may be called on a Boolean property etc. The
+conversion is attempted by the Type class, and either throws an exception or passes back a converted
+value according to the tables in the specification.
+
+The get/set APIs of DataObject are supplied by a set of macros in DataObjectImpl.cpp. These are
+duplicated for string and non-string, and also make it hard to debug effectively. They will be
+removed and replaced by methods in the future. For now, the easiest way to debug them is to be
+aware that each eventually calls the private no-params method, so for example all the getString(...)
+methods eventually call getString().
+
+The internal string handling is partially working with the SDOXMLString class, and partially still uses
+allocated char* buffers, these will be replaced by SDOXMLStrings in the future.
+
+The parsers for XML are absed on the SAX2Parser class, but the bulk of the processing is done by the
+startElementNS and similar methods in the SDOSchemaSAX2parser and SDOSAX2Parser classes. These are called
+back by the libxml2 library, and build a picture of the information which it then decoded by the XSDhelper
+or XMLHelper class into metadata or data.
+
+There are easy targets for improvements of performance, particularly in DataObject and parsing of XSD
+input, here is a list of a few that I can think of:
+
+DataObject frequently maps from Property to index, and this could be re-organized to avoid most of these.
+
+The allocation of space for property values could in most cases be dropped - its usually s fixed size
+element.
+
+The use of DataObject as a means of storing lists of primitives is not optimal, and should be replaced.
+
+The ChangeSummary class holds the previous value of any property when it is changed. At present, for many-
+valued properties, it holds the entire list as it was before an addition. This could just keep a record of
+the changes, and only save the old list when serializing.
+
+Parsing the XSD loops though types checking that all substitutes are covered, it would be good to
+replace this.
+
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/GettingStarted.html b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/GettingStarted.html
new file mode 100644
index 0000000000..00003b37fc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/GettingStarted.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+ <META CONTENT="text/html; charset=iso-8859-1" HTTP-EQUIV="Content-Type">
+ <META CONTENT="text/css" HTTP-EQUIV="Content-Style-Type">
+ <STYLE MEDIA="all" TYPE="text/css">
+@import url("doc/css/maven-base.css");
+@import url("doc/css/maven-theme.css");
+ </STYLE>
+
+ <LINK HREF="doc/css/maven-theme.css" MEDIA="print" REL="stylesheet"
+ TYPE="text/css">
+ <TITLE>Tuscany - Getting Started</TITLE>
+</HEAD>
+
+<BODY>
+<DIV ID="bodyColumn">
+ <DIV ID="contentBox">
+ <DIV CLASS="section">
+ <H2>Tuscany - Getting Started - SDO C++ Milestone release 1</H2>
+
+ <P>Tuscany SDO C++ is an implementation of the Service Data Objects 2.0 specification for C++ developers.
+ This page describes what is needed to install Tuscany SDO for C++.<BR/>If you haven't already done so, the first
+ step is to download the SDO C++ Milestone release 1 of Apache Tuscany from our
+ <A HREF="http://incubator.apache.org/tuscany/download.html" target='_blank'>download page</A>.<BR/>
+ </P>
+ </DIV>
+ <DIV CLASS="section">
+ <H2>Contents</H2>
+ <OL>
+ <LI><A HREF="#requirements">System Requirements</A></LI>
+ <LI><A HREF="#install">Installing Tuscany SDO..</A>
+ <UL>
+ <LI><A HREF="#linuxbin">..from the binary release on Linux</A></LI>
+ <LI><A HREF="#linuxsrc">..from the source release on Linux</A></LI>
+ <LI><A HREF="#winbin">..from the binary release on Windows</A></LI>
+ <LI><A HREF="#winsrc">..from the source release on Windows</A></LI>
+ </UL></LI>
+ <LI><A HREF="#samples">Samples</A></LI>
+ <LI><A HREF="#help">Getting Help</A></LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="requirements"><H2>System Requirements</H2></A>
+
+ <P>In order to use Tuscany SDO there are some minimum requirements:</P>
+ <TABLE CLASS="bodyTable">
+
+ <TBODY>
+ <TR CLASS="a">
+ <TD><B>Software</B></TD>
+ <TD><B>Download Link</B></TD>
+ </TR>
+ <TR CLASS="b">
+ <TD>Operating systems:
+ <UL>
+ <LI>Windows XP SP2</LI>
+ <LI>Linux</LI>
+ </UL>
+ </TD>
+ <TD>
+ </TD>
+ </TR>
+ <TR CLASS="a">
+ <TD>Axis2C Release 0.92</TD>
+
+ <TD>
+ <A HREF="http://ws.apache.org/axis2/c/download.cgi"
+ TARGET="_blank">http://ws.apache.org/axis2/c/download.cgi</A><BR/>
+ Please download and follow the installation instructions. Ensure you can run the Axis2C samples
+ </TD>
+ </TR>
+ <TR CLASS="b">
+ <TD>libxml2 version 2.6.20</TD>
+
+ <TD>
+ <A HREF="http://xmlsoft.org/downloads.html"
+ TARGET="_blank">http://xmlsoft.org/downloads.html</A><BR/>
+ Most Linux systems have libxml2 by default. On Windows you need to download and install libxml2 from <A HREF="http://www.zlatkovic.com/libxml.en.html" TARGET="_blank">http://www.zlatkovic.com/libxml.en.html</A><BR/>
+ Please read the installation notes for libxml2 particularly regarding it's pre-req's iconv and zlib on Windows. <BR/>
+ These libraries will need to be on the PATH in order to run Tuscany SDO.
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+ </DIV>
+ <DIV CLASS="section">
+ <A NAME="install"><H2>Installing Tuscany SDO for C++</H2></A>
+ <A NAME="linuxbin"><H3>Getting Tuscany SDO for C++ working with the binary release on Linux</H3></A>
+ <OL>
+ <LI>Extract the binary tar package to a folder</LI>
+ <LI>Add the *install_dir*/lib directory to the LD_LIBRARY_PATH environment variable</LI>
+ </OL>
+ <A NAME="linuxsrc"><H3>Getting Tuscany SDO for C++ working with the source release on Linux</H3></A>
+ <OL>
+ <LI>Extract the source tar package to a folder &lt;tuscany_sdo&gt;</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>LIBXML2_INCLUDE=&lt;path to libxml2 includes&gt;
+ <LI>LIBXML2_LIB=&lt;path to libxml2 lib&gt;<BR/>
+ Note: If you are using the default installation of libxml2 these are usually:<BR/>
+ LIBXML2_LIB=/usr/lib<BR/>
+ LIBXML2_INCLUDE=/usr/include/libxml2<BR/></LI>
+
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ <LI>Build the source with the following command sequence:
+ <UL>
+ <LI>./configure</LI>
+ <LI>make</LI>
+ <LI>make install</LI>
+ </UL>
+ NOTE: If you don't provide a --prefix configure option, it will by default install into
+ /usr/local/tuscany/sdo</LI>
+ <LI>Run the test:
+ <UL>
+ <LI>cd to &lt;tuscany_sdo&gt;/runtime/core/test</LI>
+ <LI>./tuscany_sdo_test</LI>
+ </UL></LI>
+ </OL>
+
+ <A NAME="winbin"><H3>Getting Tuscany SDO for C++ working with the binary release on Windows</H3></A>
+ <OL>
+ <LI>Unzip the supplied zip file to a folder</LI>
+ <LI>Add the *install_dir*\bin directory to the PATH environment variable</LI>
+ </OL>
+ <A NAME="winsrc"><H3>Getting Tuscany SDO for C++ working with the source release on Windows</H3></A>
+ <OL>
+ <LI>Unzip the supplied source zip file</LI>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>LIBXML2_HOME=&lt;path to installed libxml2&gt;<BR/>
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ <LI>You must have set up the environment for Microsoft Visual C++ tools. The build command
+ will call vcvars32 to set the environment. Ensure the directory containing this is on your path.
+ This will be where you installed the compiler.</LI>
+ <LI>Build the source:
+ <UL>
+ <LI>cd &lt;to where you unzipped the source&gt;</LI>
+ <LI>build</LI>
+ </UL>
+ This will build all the projects and put the required output into the 'deploy' directory<BR/><BR/>
+ Alternatively, open the workspace tuscany_sdo.dsw in Visual Studio 6 - you can build projects individually
+ or build the test project to build all its dependencies. Running the test project should give a list of
+ tests passed - this is currently 108 tests, no failures.</LI>
+ <LI>Add the 'deploy'\bin directory PATH environment variable</LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="samples"><H2>Samples</H2></A>
+ <TABLE CLASS="bodyTable">
+ <TBODY>
+ <TR CLASS="a">
+ <TD STYLE="vertical-align: top; white-space: nowrap;">SDO Technology samples
+ </TD>
+ <TD>Simple samples that emphasize how to to use SDO technology. Follow the
+ instructions on the samples <A HREF="samples/GettingStarted.html">Getting Started</A>
+ page to build and run the Tuscany SDO samples
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+ </DIV>
+ <DIV CLASS="section">
+ <A NAME="help"><H2>Getting Help</H2></A>
+
+ <P>First place to look is at the Tuscany FAQ at
+ <A HREF="http://incubator.apache.org/tuscany/faq.html"
+ TARGET="_blank">http://incubator.apache.org/tuscany/faq.html</A> </P>
+
+ <P>Any problem with this release can be reported to the Tuscany
+ <A HREF="http://incubator.apache.org/tuscany/mail-lists.html"
+ TARGET="_blank">mailing lists</A> or create a JIRA issue at&nbsp;<A HREF="http://issues.apache.org/jira/browse/Tuscany"
+ TARGET="_blank">http://issues.apache.org/jira/browse/Tuscany</A>.</P>
+
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+ <TABLE CLASS="bodyTable">
+ <TBODY>
+ <TR CLASS="a">
+ <TD>
+
+ <P>Thank you for your interest in Tuscany.</P> <STRONG><EM>-The
+ Tuscany Development Team</EM></STRONG>
+
+ <P></P>
+
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+
+ <P></P>
+ </DIV>
+ </DIV>
+</DIV>
+</BODY>
+
+</HTML>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/INSTALL b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/INSTALL
new file mode 100644
index 0000000000..07946d51f4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/INSTALL
@@ -0,0 +1,2 @@
+Please read the GettingStarted.html document for information on
+building and installing Tuscany SDO for C++
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/LICENSE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/LICENSE
new file mode 100755
index 0000000000..f433b1a53f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/LICENSE
@@ -0,0 +1,177 @@
+
+ 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
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Makefile.am
new file mode 100644
index 0000000000..56ffdec7e3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/Makefile.am
@@ -0,0 +1,33 @@
+SUBDIRS = runtime
+DIST_SUBDIRS = runtime samples
+datadir=$(prefix)
+
+data_DATA = INSTALL README LICENSE COPYING NOTICE GettingStarted.html
+EXTRA_DIST = LICENSE COPYING INSTALL README NOTICE sdotest.sh GettingStarted.html doc
+dist-hook:
+ rm -rf `find $(distdir)/ -type d -name .svn`
+ rm -rf `find $(distdir)/ -type d -name .deps`
+
+install-data-hook:
+ rm -rf $(prefix)/samples
+ cp -r samples $(prefix)
+ rm -rf `find $(prefix)/samples -type d -name .svn`
+ rm -rf `find $(prefix)/samples -type d -name .deps`
+ rm -rf $(prefix)/doc
+ cp -r doc $(prefix)
+ rm -rf `find $(prefix)/doc -type d -name .svn`
+ rm -rf `find $(prefix)/doc -type d -name .deps`
+
+bindist: dist
+ rm -rf ${PACKAGE}-${PACKAGE_VERSION}
+ rm -rf ${PACKAGE}-${PACKAGE_VERSION}-src
+ rm -rf ${PACKAGE}-${PACKAGE_VERSION}-bin
+ gunzip -f ${PACKAGE}-${PACKAGE_VERSION}.tar.gz
+ tar -xf ${PACKAGE}-${PACKAGE_VERSION}.tar
+ mv ${PACKAGE}-${PACKAGE_VERSION} ${PACKAGE}-${PACKAGE_VERSION}-src
+ tar -cf - ${PACKAGE}-${PACKAGE_VERSION}-src | gzip -c > ${PACKAGE}-${PACKAGE_VERSION}-src.tar.gz
+ cd ${PACKAGE}-${PACKAGE_VERSION}-src \
+ && sh ../makebindist.sh
+ mkdir ${PACKAGE}-${PACKAGE_VERSION}-bin
+ cp -r ${PACKAGE}-${PACKAGE_VERSION}-src/deploy/* ${PACKAGE}-${PACKAGE_VERSION}-bin
+ tar -cf - ${PACKAGE}-${PACKAGE_VERSION}-bin | gzip -c > ${PACKAGE}-${PACKAGE_VERSION}-bin.tar.gz
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NEWS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NEWS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NEWS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NOTICE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NOTICE
new file mode 100644
index 0000000000..bfb81409ad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/NOTICE
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/) \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/README b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/README
new file mode 100644
index 0000000000..99f88b1b4d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/README
@@ -0,0 +1,100 @@
+Apache Tuscany C++ M1 build (July, 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.
+
+
+Getting Started
+===============
+
+Documentation describing the system requirements and the steps to install
+Tuscany SDO C++ and run the samples can be found in the GettingStarted.html file.
+
+
+About Tuscany SDO for C++
+=========================
+
+Tuscany SDO is an implementation of the Service Data Objects 2.0 specification for C++ developers.
+
+The implementation adheres closely to the specification, but there are a number of features which
+did not make it into this release. These are documented below.
+
+
+Generic get/set
+---------------
+The C++ implementation defines a set of access methods directly appropriate to each Type. For example
+getString(), setString(), getBoolean(), setBoolean(). There is no generic get() method as there is no
+common base object to return - unlike the java implementation which can return an Object.
+
+
+Typesafe interface
+------------------
+There is no code generation in this version, so there is no interface such that a property called
+"Name" can be accessed via object->getName(). The name must be accessed via object->getString("Name");
+
+
+Change Summary Serialization
+----------------------------
+Change summaries contain creations, deletions and modifications to data graphs. The specification
+indicates that these will be serialized to XML such that creations and deletions will become attributes
+of the change summary element, whilst changes become elements within the change summary element.
+This implementation saves all creations, deletions and changes as elements within the chang summary
+element.
+
+
+Change Summary Undo
+-------------------
+The undo method of a change summary is not implemented.
+
+
+Read-Only
+---------
+Read-only data elements are not supported by this implementation. Properties may be set read-only, but
+the property may still be modified without an error.
+
+
+Opposites
+---------
+Opposites are not supported by this implementation.
+
+
+Date and Time
+-------------
+Date support is limited to using a time_t. There are no calendar or duration style objects, and no
+helpers for conversions.
+
+
+BigDecimal and BigInteger
+-------------------------
+The equivalent of the java BigDecimal and BigInteger objects are not implmented.
+
+
+NLS support
+-----------
+Data objects may contain multi-byte data in the form of an SDO string, but locale information is not
+stored with the data.
+
+The creation API only allows properties and types to have ascii names (taking a char* as the name).
+
+
+Inheritance
+-----------
+Type inheritance is single only.
+
+
+
+
+Thank you for using Tuscany!
+
+The Tuscany Team.
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/autogen.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/autogen.sh
new file mode 100755
index 0000000000..3cebb0a380
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/autogen.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+for i in "libtoolize --force" aclocal autoconf autoheader
+do
+ echo -n "Running $i..."
+ $i || exit 1
+ echo 'done.'
+done
+
+echo -n 'Running automake...'
+automake --add-missing
+echo 'done.'
+exit 0
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.bat b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.bat
new file mode 100644
index 0000000000..2ec0d9a22a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.bat
@@ -0,0 +1,25 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+
+
+@setlocal
+
+call vcvars32
+cd projects\tuscany_sdo
+build.cmd
+
+@endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.sh
new file mode 100755
index 0000000000..9bbb67c0b6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/build.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+if [ x$LIBXML2_INCLUDE = x ]; then
+echo "LIBXML2_INCLUDE not set"
+exit;
+fi
+if [ x$LIBXML2_LIB = x ]; then
+echo "LIBXML2_LIB not set"
+exit;
+fi
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+./autogen.sh
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+TUSCANY_SDOCPP=`pwd`/deploy
+fi
+
+./configure --prefix=${TUSCANY_SDOCPP} --enable-static=no
+make
+make install
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/configure.ac b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/configure.ac
new file mode 100644
index 0000000000..66895eb079
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/configure.ac
@@ -0,0 +1,45 @@
+dnl run autogen.sh to generate the configure script.
+
+AC_PREREQ(2.59)
+AC_INIT(tuscany_sdo_cpp, 0.1.incubating-M1)
+AC_CANONICAL_SYSTEM
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+AC_PREFIX_DEFAULT(/usr/local/tuscany/sdo)
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_LIBTOOL
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([inttypes.h stdlib.h string.h sys/time.h wchar.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_HEADER_STDBOOL
+AC_C_CONST
+AC_STRUCT_TM
+
+# Checks for library functions.
+AC_FUNC_ERROR_AT_LINE
+AC_FUNC_VPRINTF
+AC_CHECK_FUNCS([strchr strrchr])
+
+AC_CONFIG_FILES([Makefile
+ runtime/Makefile
+ runtime/core/Makefile
+ runtime/core/src/Makefile
+ runtime/core/src/commonj/Makefile
+ runtime/core/src/commonj/sdo/Makefile
+ runtime/core/test/Makefile
+ runtime/core/sdo_axiom/Makefile
+ runtime/core/sdo_axiom_test/Makefile])
+AC_OUTPUT
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-base.css b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-base.css
new file mode 100644
index 0000000000..314da3a272
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-base.css
@@ -0,0 +1,147 @@
+body {
+ margin: 0px;
+ padding: 0px;
+}
+img {
+ border:none;
+}
+table {
+ padding:0px;
+ width: 100%;
+ margin-left: -2px;
+ margin-right: -2px;
+}
+acronym {
+ cursor: help;
+ border-bottom: 1px dotted #feb;
+}
+table.bodyTable th, table.bodyTable td {
+ padding: 2px 4px 2px 4px;
+ vertical-align: top;
+}
+div.clear{
+ clear:both;
+ visibility: hidden;
+}
+div.clear hr{
+ display: none;
+}
+#bannerLeft, #bannerRight {
+ font-size: xx-large;
+ font-weight: bold;
+}
+#bannerLeft img, #bannerRight img {
+ margin: 0px;
+}
+.xleft, #bannerLeft img {
+ float:left;
+ text-shadow: #7CFC00;
+}
+.xright, #bannerRight img {
+ float:right;
+ text-shadow: #7CFC00;
+}
+#banner {
+ padding: 0px;
+}
+#banner img {
+ border: none;
+}
+#breadcrumbs {
+ padding: 3px 10px 3px 10px;
+}
+#leftColumn {
+ width: 150px;
+ float:left;
+}
+#bodyColumn {
+ margin-right: 1.5em;
+ margin-left: 177px;
+}
+#legend {
+ padding: 8px 0 8px 0;
+}
+#navcolumn {
+ padding: 8px 4px 0 8px;
+}
+#navcolumn h5 {
+ margin: 0;
+ padding: 0;
+ font-size: small;
+}
+#navcolumn ul {
+ margin: 0;
+ padding: 0;
+ font-size: small;
+}
+#navcolumn li {
+ list-style-type: none;
+ background-image: none;
+ background-repeat: no-repeat;
+ background-position: 0 0.4em;
+ padding-left: 16px;
+ list-style-position: ouside;
+ line-height: 1.2em;
+ font-size: smaller;
+}
+#navcolumn li.expanded {
+ background-image: url(../images/expanded.gif);
+}
+#navcolumn li.collapsed {
+ background-image: url(../images/collapsed.gif);
+}
+#poweredBy {
+ text-align: center;
+}
+#navcolumn img {
+ margin-top: 10px;
+ margin-bottom: 3px;
+}
+#poweredBy img {
+ display:block;
+ margin: 20px 0 20px 17px;
+ border: 1px solid black;
+ width: 90px;
+ height: 30px;
+}
+#search img {
+ margin: 0px;
+ display: block;
+}
+#search #q, #search #btnG {
+ border: 1px solid #999;
+ margin-bottom:10px;
+}
+#search form {
+ margin: 0px;
+}
+#lastPublished {
+ font-size: x-small;
+}
+.navSection {
+ margin-bottom: 2px;
+ padding: 8px;
+}
+.navSectionHead {
+ font-weight: bold;
+ font-size: x-small;
+}
+.section {
+ padding: 4px;
+}
+#footer {
+ padding: 3px 10px 3px 10px;
+ font-size: x-small;
+}
+#breadcrumbs {
+ font-size: x-small;
+ margin: 0pt;
+}
+.source {
+ padding: 12px;
+ margin: 1em 7px 1em 7px;
+}
+.source pre {
+ margin: 0px;
+ padding: 0px;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-theme.css b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-theme.css
new file mode 100644
index 0000000000..5c8e7b4abf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/doc/css/maven-theme.css
@@ -0,0 +1,125 @@
+body {
+ padding: 0px 0px 10px 0px;
+}
+body, td, select, input, li{
+ font-family: Verdana, Helvetica, Arial, sans-serif;
+ font-size: 13px;
+}
+code{
+ font-family: Courier, monospace;
+ font-size: 13px;
+}
+a {
+ text-decoration: none;
+}
+a:link {
+ color:#36a;
+}
+a:visited {
+ color:#47a;
+}
+a:active, a:hover {
+ color:#69c;
+}
+#legend li.externalLink {
+ background: url(../images/external.png) left top no-repeat;
+ padding-left: 18px;
+}
+a.externalLink, a.externalLink:link, a.externalLink:visited, a.externalLink:active, a.externalLink:hover {
+ background: url(../images/external.png) right center no-repeat;
+ padding-right: 18px;
+}
+#legend li.newWindow {
+ background: url(../images/newwindow.png) left top no-repeat;
+ padding-left: 18px;
+}
+a.newWindow, a.newWindow:link, a.newWindow:visited, a.newWindow:active, a.newWindow:hover {
+ background: url(../images/newwindow.png) right center no-repeat;
+ padding-right: 18px;
+}
+h2 {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #999;
+ color: #900;
+ background-color: #ddd;
+ font-weight:900;
+ font-size: x-large;
+}
+h3 {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #aaa;
+ color: #900;
+ background-color: #eee;
+ font-weight: normal;
+ font-size: large;
+}
+h4 {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #bbb;
+ color: #900;
+ background-color: #fff;
+ font-weight: normal;
+ font-size: large;
+}
+h5 {
+ padding: 4px 4px 4px 6px;
+ color: #900;
+ font-size: normal;
+}
+p {
+ line-height: 1.3em;
+ font-size: small;
+}
+#breadcrumbs {
+ border-top: 1px solid #aaa;
+ border-bottom: 1px solid #aaa;
+ background-color: #ccc;
+}
+#leftColumn {
+ margin: 10px 0 0 5px;
+ border: 1px solid #999;
+ background-color: #eee;
+}
+#navcolumn h5 {
+ font-size: smaller;
+ border-bottom: 1px solid #aaaaaa;
+ padding-top: 2px;
+ color: #000;
+}
+
+table.bodyTable th {
+ color: white;
+ background-color: #bbb;
+ text-align: left;
+ font-weight: bold;
+}
+
+table.bodyTable th, table.bodyTable td {
+ font-size: 1em;
+}
+
+table.bodyTable tr.a {
+ background-color: #ddd;
+}
+
+table.bodyTable tr.b {
+ background-color: #eee;
+}
+
+.source {
+ border: 1px solid #999;
+}
+dl {
+ padding: 4px 4px 4px 6px;
+ border: 1px solid #aaa;
+ background-color: #ffc;
+}
+dt {
+ color: #900;
+}
+#organizationLogo img, #projectLogo img, #projectLogo span{
+ margin: 8px;
+}
+#banner {
+ border-bottom: 1px solid #fff;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makebindist.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makebindist.sh
new file mode 100755
index 0000000000..ddb386787c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makebindist.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TUSCANY_SDOCPP_HOME=`pwd`
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+cd ${TUSCANY_SDOCPP_HOME}
+./configure --prefix=${TUSCANY_SDOCPP_HOME}/deploy --enable-static=no
+make
+make install
+
+cd ${TUSCANY_SDOCPP_HOME}/samples
+export TUSCANY_SDOCPP=${TUSCANY_SDOCPP_HOME}/deploy
+./configure --prefix=${TUSCANY_SDOCPP_HOME}/deploy --enable-static=no
+make
+make install
+
+cd ${TUSCANY_SDOCPP_HOME}/deploy
+for i in `find . -name "*.la"`
+do
+ rm $i
+done \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makedist.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makedist.sh
new file mode 100755
index 0000000000..8f22565b17
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/makedist.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+TUSCANY_SDOCPP_HOME=`pwd`
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+cd ${TUSCANY_SDOCPP_HOME}/samples
+./autogen.sh
+./configure --prefix=${TUSCANY_SDOCPP_HOME}/deploy --enable-static=no
+
+cd $TUSCANY_SDOCPP_HOME
+./autogen.sh
+./configure --prefix=${TUSCANY_SDOCPP_HOME}/deploy --enable-static=no
+
+make bindist
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build.cmd
new file mode 100644
index 0000000000..db38f34ce3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build.cmd
@@ -0,0 +1,20 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+setlocal
+cd sdo_axiom_test
+NMAKE /f "sdo_axiom_test.mak" CFG="sdo_axiom_test - Win32 Release"
+cd ..
+endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build_instructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build_instructions.txt
new file mode 100644
index 0000000000..2c1a98394c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/build_instructions.txt
@@ -0,0 +1,31 @@
+Tuscany SDO Build Instructions
+===============================
+
+The project is dependent on libxml
+(available here: http://www.zlatkovic.com/libxml.en.html)
+
+The versions required are these:
+ libxml2-2.6.20.win32
+ iconv-1.9.1.win32
+ zlib-1.2.2.win32
+
+By default, the projects are set up to look for these in directories located by the
+environment variables: LIBXML2_HOME, ICONV_HOME and ZLIB_HOME. These need to be set
+before launching Visual Studio.
+
+The two projects sdo_axiom and sdo_axiom_test are dependent on AXIS2C, and require that
+an environment variable AXIS2C_HOME be set to where axis2c is installed. Axis2c can be
+located at http://ws.apache.org/axis2/c/. Please read the axis2c documentation to ensure
+you have installed any pre-requisites.
+
+Open the build workspace tuscany\cpp\sdo\runtime\projects\tuscany_sdo\tuscany_sdo.dsw
+
+Build->Set Active Configuration->sdo_axiom_test - Win32 Release
+
+Build->Rebuild All
+
+The output of the build will be in runtime\core\Release.
+
+The executable, required headers and lib are copied to the deploy directory.
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.dsp
new file mode 100644
index 0000000000..23beda1539
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.dsp
@@ -0,0 +1,125 @@
+# Microsoft Developer Studio Project File - Name="sdo_axiom" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=sdo_axiom - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_axiom.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_axiom.mak" CFG="sdo_axiom - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_axiom - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "sdo_axiom - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "sdo_axiom - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_AXIOM_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_AXIOM_EXPORTS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 axis2_parser.lib axis2_util.lib axiom.lib tuscany_sdo.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 /out:"Release/tuscany_sdo_axiom.dll" /libpath:"..\..\..\deploy\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy Release\tuscany_sdo_axiom.dll ..\..\..\deploy\bin copy Release\tuscany_sdo_axiom.lib ..\..\..\deploy\lib copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom.h ..\..\..\deploy\include copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h ..\..\..\deploy\include
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "sdo_axiom - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_AXIOM_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_AXIOM_EXPORTS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 axis2_parser.lib axis2_util.lib axiom.lib tuscany_sdo.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /out:"Debug/tuscany_sdo_axiom.dll" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(AXIS2C_HOME)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy Debug\tuscany_sdo_axiom.dll ..\..\..\deploy\bin copy Debug\tuscany_sdo_axiom.pdb ..\..\..\deploy\bin copy Debug\tuscany_sdo_axiom.lib ..\..\..\deploy\lib copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom.h ..\..\..\deploy\include copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h ..\..\..\deploy\include
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "sdo_axiom - Win32 Release"
+# Name "sdo_axiom - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\sdo_axiom\sdo_axiom.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\sdo_axiom\sdo_axiom.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.mak
new file mode 100644
index 0000000000..64b4229ac5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom/sdo_axiom.mak
@@ -0,0 +1,277 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on sdo_axiom.dsp
+!IF "$(CFG)" == ""
+CFG=sdo_axiom - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to sdo_axiom - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "sdo_axiom - Win32 Release" && "$(CFG)" != "sdo_axiom - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_axiom.mak" CFG="sdo_axiom - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_axiom - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "sdo_axiom - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "sdo_axiom - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\tuscany_sdo_axiom.dll"
+
+!ELSE
+
+ALL : "sdo_runtime - Win32 Release" "$(OUTDIR)\tuscany_sdo_axiom.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"sdo_runtime - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\sdo_axiom.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.dll"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.exp"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_AXIOM_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_axiom.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=axis2_parser.lib axis2_util.lib axiom.lib tuscany_sdo.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\tuscany_sdo_axiom.pdb" /machine:I386 /out:"$(OUTDIR)\tuscany_sdo_axiom.dll" /implib:"$(OUTDIR)\tuscany_sdo_axiom.lib" /libpath:"..\..\..\deploy\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\sdo_axiom.obj" \
+ "..\sdo_runtime\Release\tuscany_sdo.lib"
+
+"$(OUTDIR)\tuscany_sdo_axiom.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "sdo_runtime - Win32 Release" "$(OUTDIR)\tuscany_sdo_axiom.dll"
+ copy Release\tuscany_sdo_axiom.dll ..\..\..\deploy\bin
+ copy Release\tuscany_sdo_axiom.lib ..\..\..\deploy\lib
+ copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom.h ..\..\..\deploy\include
+ copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h ..\..\..\deploy\include
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "sdo_axiom - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\tuscany_sdo_axiom.dll"
+
+!ELSE
+
+ALL : "sdo_runtime - Win32 Debug" "$(OUTDIR)\tuscany_sdo_axiom.dll"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"sdo_runtime - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\sdo_axiom.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.dll"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.exp"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.ilk"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.lib"
+ -@erase "$(OUTDIR)\tuscany_sdo_axiom.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_AXIOM_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_axiom.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=axis2_parser.lib axis2_util.lib axiom.lib tuscany_sdo.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\tuscany_sdo_axiom.pdb" /debug /machine:I386 /out:"$(OUTDIR)\tuscany_sdo_axiom.dll" /implib:"$(OUTDIR)\tuscany_sdo_axiom.lib" /pdbtype:sept /libpath:"..\..\..\deploy\lib" /libpath:"$(AXIS2C_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\sdo_axiom.obj" \
+ "..\sdo_runtime\Debug\tuscany_sdo.lib"
+
+"$(OUTDIR)\tuscany_sdo_axiom.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "sdo_runtime - Win32 Debug" "$(OUTDIR)\tuscany_sdo_axiom.dll"
+ copy Debug\tuscany_sdo_axiom.dll ..\..\..\deploy\bin
+ copy Debug\tuscany_sdo_axiom.pdb ..\..\..\deploy\bin
+ copy Debug\tuscany_sdo_axiom.lib ..\..\..\deploy\lib
+ copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom.h ..\..\..\deploy\include
+ copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h ..\..\..\deploy\include
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("sdo_axiom.dep")
+!INCLUDE "sdo_axiom.dep"
+!ELSE
+!MESSAGE Warning: cannot find "sdo_axiom.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "sdo_axiom - Win32 Release" || "$(CFG)" == "sdo_axiom - Win32 Debug"
+SOURCE=..\..\..\runtime\core\sdo_axiom\sdo_axiom.cpp
+
+"$(INTDIR)\sdo_axiom.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "sdo_axiom - Win32 Release"
+
+"sdo_runtime - Win32 Release" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Release"
+ cd "..\sdo_axiom"
+
+"sdo_runtime - Win32 ReleaseCLEAN" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Release" RECURSE=1 CLEAN
+ cd "..\sdo_axiom"
+
+!ELSEIF "$(CFG)" == "sdo_axiom - Win32 Debug"
+
+"sdo_runtime - Win32 Debug" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Debug"
+ cd "..\sdo_axiom"
+
+"sdo_runtime - Win32 DebugCLEAN" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\sdo_axiom"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.dsp
new file mode 100644
index 0000000000..2b75c42235
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.dsp
@@ -0,0 +1,116 @@
+# Microsoft Developer Studio Project File - Name="sdo_axiom_test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=sdo_axiom_test - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_axiom_test.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_axiom_test.mak" CFG="sdo_axiom_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_axiom_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "sdo_axiom_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "sdo_axiom_test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 tuscany_sdo.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\deploy\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\..\..\deploy\bin\*.dll Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "sdo_axiom_test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 tuscany_sdo.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\deploy\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\..\..\deploy\bin\*.dll Debug copy ..\..\..\deploy\bin\*.pdb Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "sdo_axiom_test - Win32 Release"
+# Name "sdo_axiom_test - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\sdo_axiom_test\sdo_axiom_test.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\sdo_axiom_test\sdo_axiom_test.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.mak
new file mode 100644
index 0000000000..6d01d2e09c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.mak
@@ -0,0 +1,317 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on sdo_axiom_test.dsp
+!IF "$(CFG)" == ""
+CFG=sdo_axiom_test - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to sdo_axiom_test - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "sdo_axiom_test - Win32 Release" && "$(CFG)" != "sdo_axiom_test - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_axiom_test.mak" CFG="sdo_axiom_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_axiom_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "sdo_axiom_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "sdo_axiom_test - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\sdo_axiom_test.exe"
+
+!ELSE
+
+ALL : "sdo_test - Win32 Release" "sdo_runtime - Win32 Release" "sdo_axiom - Win32 Release" "$(OUTDIR)\sdo_axiom_test.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"sdo_axiom - Win32 ReleaseCLEAN" "sdo_runtime - Win32 ReleaseCLEAN" "sdo_test - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\sdo_axiom_test.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\sdo_axiom_test.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_axiom_test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=tuscany_sdo.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\sdo_axiom_test.pdb" /machine:I386 /out:"$(OUTDIR)\sdo_axiom_test.exe" /libpath:"..\..\..\deploy\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\sdo_axiom_test.obj" \
+ "..\sdo_axiom\Release\tuscany_sdo_axiom.lib" \
+ "..\sdo_runtime\Release\tuscany_sdo.lib"
+
+"$(OUTDIR)\sdo_axiom_test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "sdo_test - Win32 Release" "sdo_runtime - Win32 Release" "sdo_axiom - Win32 Release" "$(OUTDIR)\sdo_axiom_test.exe"
+ copy ..\..\..\deploy\bin\*.dll Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "sdo_axiom_test - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\sdo_axiom_test.exe"
+
+!ELSE
+
+ALL : "sdo_test - Win32 Debug" "sdo_runtime - Win32 Debug" "sdo_axiom - Win32 Debug" "$(OUTDIR)\sdo_axiom_test.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"sdo_axiom - Win32 DebugCLEAN" "sdo_runtime - Win32 DebugCLEAN" "sdo_test - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\sdo_axiom_test.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\sdo_axiom_test.exe"
+ -@erase "$(OUTDIR)\sdo_axiom_test.ilk"
+ -@erase "$(OUTDIR)\sdo_axiom_test.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\deploy\include" /I "$(AXIS2C_HOME)\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_axiom_test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=tuscany_sdo.lib tuscany_sdo_axiom.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\sdo_axiom_test.pdb" /debug /machine:I386 /out:"$(OUTDIR)\sdo_axiom_test.exe" /pdbtype:sept /libpath:"..\..\..\deploy\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\sdo_axiom_test.obj" \
+ "..\sdo_axiom\Debug\tuscany_sdo_axiom.lib" \
+ "..\sdo_runtime\Debug\tuscany_sdo.lib"
+
+"$(OUTDIR)\sdo_axiom_test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "sdo_test - Win32 Debug" "sdo_runtime - Win32 Debug" "sdo_axiom - Win32 Debug" "$(OUTDIR)\sdo_axiom_test.exe"
+ copy ..\..\..\deploy\bin\*.dll Debug
+ copy ..\..\..\deploy\bin\*.pdb Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("sdo_axiom_test.dep")
+!INCLUDE "sdo_axiom_test.dep"
+!ELSE
+!MESSAGE Warning: cannot find "sdo_axiom_test.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "sdo_axiom_test - Win32 Release" || "$(CFG)" == "sdo_axiom_test - Win32 Debug"
+SOURCE=..\..\..\runtime\core\sdo_axiom_test\sdo_axiom_test.cpp
+
+"$(INTDIR)\sdo_axiom_test.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "sdo_axiom_test - Win32 Release"
+
+"sdo_axiom - Win32 Release" :
+ cd "..\sdo_axiom"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_axiom.mak CFG="sdo_axiom - Win32 Release"
+ cd "..\sdo_axiom_test"
+
+"sdo_axiom - Win32 ReleaseCLEAN" :
+ cd "..\sdo_axiom"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_axiom.mak CFG="sdo_axiom - Win32 Release" RECURSE=1 CLEAN
+ cd "..\sdo_axiom_test"
+
+!ELSEIF "$(CFG)" == "sdo_axiom_test - Win32 Debug"
+
+"sdo_axiom - Win32 Debug" :
+ cd "..\sdo_axiom"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_axiom.mak CFG="sdo_axiom - Win32 Debug"
+ cd "..\sdo_axiom_test"
+
+"sdo_axiom - Win32 DebugCLEAN" :
+ cd "..\sdo_axiom"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_axiom.mak CFG="sdo_axiom - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\sdo_axiom_test"
+
+!ENDIF
+
+!IF "$(CFG)" == "sdo_axiom_test - Win32 Release"
+
+"sdo_runtime - Win32 Release" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Release"
+ cd "..\sdo_axiom_test"
+
+"sdo_runtime - Win32 ReleaseCLEAN" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Release" RECURSE=1 CLEAN
+ cd "..\sdo_axiom_test"
+
+!ELSEIF "$(CFG)" == "sdo_axiom_test - Win32 Debug"
+
+"sdo_runtime - Win32 Debug" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Debug"
+ cd "..\sdo_axiom_test"
+
+"sdo_runtime - Win32 DebugCLEAN" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\sdo_axiom_test"
+
+!ENDIF
+
+!IF "$(CFG)" == "sdo_axiom_test - Win32 Release"
+
+"sdo_test - Win32 Release" :
+ cd "..\sdo_test"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_test.mak CFG="sdo_test - Win32 Release"
+ cd "..\sdo_axiom_test"
+
+"sdo_test - Win32 ReleaseCLEAN" :
+ cd "..\sdo_test"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_test.mak CFG="sdo_test - Win32 Release" RECURSE=1 CLEAN
+ cd "..\sdo_axiom_test"
+
+!ELSEIF "$(CFG)" == "sdo_axiom_test - Win32 Debug"
+
+"sdo_test - Win32 Debug" :
+ cd "..\sdo_test"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_test.mak CFG="sdo_test - Win32 Debug"
+ cd "..\sdo_axiom_test"
+
+"sdo_test - Win32 DebugCLEAN" :
+ cd "..\sdo_test"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_test.mak CFG="sdo_test - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\sdo_axiom_test"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.dsp
new file mode 100644
index 0000000000..a72ac008e8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.dsp
@@ -0,0 +1,763 @@
+# Microsoft Developer Studio Project File - Name="sdo_runtime" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=sdo_runtime - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_runtime.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_runtime.mak" CFG="sdo_runtime - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_runtime - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "sdo_runtime - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "sdo_runtime - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_RUNTIME_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "..\..\..\runtime\core\src" /I "$(LIBXML2_HOME)\include" /I "$(ICONV_HOME)\include" /I "$(ZLIB_HOME)\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_EXPORTS" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libxml2.lib /nologo /dll /machine:I386 /out:"Release\tuscany_sdo.dll" /libpath:"$(LIBXML2_HOME)\lib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copyout
+PostBuild_Cmds=copy Release\tuscany_sdo.dll ..\..\..\deploy\bin copy Release\tuscany_sdo.lib ..\..\..\deploy\lib copy ..\..\..\runtime\core\src\commonj\sdo\*.h ..\..\..\deploy\include\commonj\sdo
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "sdo_runtime - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_RUNTIME_EXPORTS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\runtime\core\src" /I "$(LIBXML2_HOME)\include" /I "$(ICONV_HOME)\include" /I "$(ZLIB_HOME)\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_EXPORTS" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libxml2.lib /nologo /dll /debug /machine:I386 /out:"Debug\tuscany_sdo.dll" /pdbtype:sept /libpath:"$(LIBXML2_HOME)\lib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copyout
+PostBuild_Cmds=copy Debug\tuscany_sdo.dll ..\..\..\deploy\bin copy Debug\tuscany_sdo.lib ..\..\..\deploy\lib copy ..\..\..\runtime\core\src\commonj\sdo\*.h ..\..\..\deploy\include\commonj\sdo copy Debug\tuscany_sdo.pdb ..\..\..\deploy\bin
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "sdo_runtime - Win32 Release"
+# Name "sdo_runtime - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangedDataObjectListImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummary.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryBuilder.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\CopyHelper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASProperty.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASType.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASValue.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASValues.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataFactory.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataFactoryImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataGraph.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataGraphImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectInstance.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectList.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectListImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DefaultLogWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\EqualityHelper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\GroupDefinition.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\GroupEvent.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\HelperProvider.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Logger.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\LogWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ParserErrorSetter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Property.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyDefinition.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyDefinitionImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyList.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertySetting.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\RefCountingObject.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\RefCountingPointer.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Attribute.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Attributes.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Namespaces.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Parser.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SchemaInfo.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SdoCheck.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDODate.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SdoRuntime.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDORuntimeException.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOSAX2Parser.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOSchemaSAX2Parser.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOUtils.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLBufferWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLFileWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLStreamWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLString.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDBufferWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDFileWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDStreamWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDWriter.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Sequence.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SequenceImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Setting.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SettingList.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Type.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinition.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitions.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionsImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeList.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLDocument.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLDocumentImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLHelper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLHelperImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLQName.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XpathHelper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDHelper.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDHelperImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDPropertyInfo.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDTypeInfo.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangedDataObjectList.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangedDataObjectListImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummary.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryBuilder.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\CopyHelper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASProperty.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASType.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASValue.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASValues.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataFactory.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataFactoryImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataGraph.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataGraphImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectInstance.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectList.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectListImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DefaultLogWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\disable_warn.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\EqualityHelper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\export.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\GroupDefinition.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\GroupEvent.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\HelperProvider.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Logger.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Logging.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\LogWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ParserErrorSetter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Property.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyDefinition.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyDefinitionImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyList.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertySetting.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\RefCountingObject.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\RefCountingPointer.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Attribute.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Attributes.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Namespaces.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Parser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SchemaInfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDO.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SdoCheck.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDODate.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SdoRuntime.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDORuntimeException.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOSAX2Parser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOSchemaSAX2Parser.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOSPI.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOUtils.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLBufferWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLFileWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLStreamWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLString.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDBufferWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDFileWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDStreamWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDWriter.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Sequence.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SequenceImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Setting.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SettingList.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Type.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinition.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitions.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionsImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeList.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLDocument.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLDocumentImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLHelper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLHelperImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLQName.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XpathHelper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDHelper.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDHelperImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDPropertyInfo.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDTypeInfo.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE="..\..\..\Committers Guide.txt"
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\readme.txt
+# End Source File
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.mak
new file mode 100644
index 0000000000..92d2e19dac
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/sdo_runtime.mak
@@ -0,0 +1,987 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on sdo_runtime.dsp
+!IF "$(CFG)" == ""
+CFG=sdo_runtime - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to sdo_runtime - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "sdo_runtime - Win32 Release" && "$(CFG)" != "sdo_runtime - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_runtime.mak" CFG="sdo_runtime - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_runtime - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "sdo_runtime - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "sdo_runtime - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\tuscany_sdo.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ChangedDataObjectListImpl.obj"
+ -@erase "$(INTDIR)\ChangeSummary.obj"
+ -@erase "$(INTDIR)\ChangeSummaryBuilder.obj"
+ -@erase "$(INTDIR)\ChangeSummaryImpl.obj"
+ -@erase "$(INTDIR)\CopyHelper.obj"
+ -@erase "$(INTDIR)\DASProperty.obj"
+ -@erase "$(INTDIR)\DASType.obj"
+ -@erase "$(INTDIR)\DASValue.obj"
+ -@erase "$(INTDIR)\DASValues.obj"
+ -@erase "$(INTDIR)\DataFactory.obj"
+ -@erase "$(INTDIR)\DataFactoryImpl.obj"
+ -@erase "$(INTDIR)\DataGraph.obj"
+ -@erase "$(INTDIR)\DataGraphImpl.obj"
+ -@erase "$(INTDIR)\DataObject.obj"
+ -@erase "$(INTDIR)\DataObjectImpl.obj"
+ -@erase "$(INTDIR)\DataObjectInstance.obj"
+ -@erase "$(INTDIR)\DataObjectList.obj"
+ -@erase "$(INTDIR)\DataObjectListImpl.obj"
+ -@erase "$(INTDIR)\DefaultLogWriter.obj"
+ -@erase "$(INTDIR)\EqualityHelper.obj"
+ -@erase "$(INTDIR)\GroupDefinition.obj"
+ -@erase "$(INTDIR)\GroupEvent.obj"
+ -@erase "$(INTDIR)\HelperProvider.obj"
+ -@erase "$(INTDIR)\Logger.obj"
+ -@erase "$(INTDIR)\LogWriter.obj"
+ -@erase "$(INTDIR)\ParserErrorSetter.obj"
+ -@erase "$(INTDIR)\Property.obj"
+ -@erase "$(INTDIR)\PropertyDefinition.obj"
+ -@erase "$(INTDIR)\PropertyDefinitionImpl.obj"
+ -@erase "$(INTDIR)\PropertyImpl.obj"
+ -@erase "$(INTDIR)\PropertyList.obj"
+ -@erase "$(INTDIR)\PropertySetting.obj"
+ -@erase "$(INTDIR)\RefCountingObject.obj"
+ -@erase "$(INTDIR)\RefCountingPointer.obj"
+ -@erase "$(INTDIR)\SAX2Attribute.obj"
+ -@erase "$(INTDIR)\SAX2Attributes.obj"
+ -@erase "$(INTDIR)\SAX2Namespaces.obj"
+ -@erase "$(INTDIR)\SAX2Parser.obj"
+ -@erase "$(INTDIR)\SchemaInfo.obj"
+ -@erase "$(INTDIR)\SdoCheck.obj"
+ -@erase "$(INTDIR)\SDODate.obj"
+ -@erase "$(INTDIR)\SdoRuntime.obj"
+ -@erase "$(INTDIR)\SDORuntimeException.obj"
+ -@erase "$(INTDIR)\SDOSAX2Parser.obj"
+ -@erase "$(INTDIR)\SDOSchemaSAX2Parser.obj"
+ -@erase "$(INTDIR)\SDOString.obj"
+ -@erase "$(INTDIR)\SDOUtils.obj"
+ -@erase "$(INTDIR)\SDOXMLBufferWriter.obj"
+ -@erase "$(INTDIR)\SDOXMLFileWriter.obj"
+ -@erase "$(INTDIR)\SDOXMLStreamWriter.obj"
+ -@erase "$(INTDIR)\SDOXMLString.obj"
+ -@erase "$(INTDIR)\SDOXMLWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDBufferWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDFileWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDStreamWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDWriter.obj"
+ -@erase "$(INTDIR)\Sequence.obj"
+ -@erase "$(INTDIR)\SequenceImpl.obj"
+ -@erase "$(INTDIR)\Setting.obj"
+ -@erase "$(INTDIR)\SettingList.obj"
+ -@erase "$(INTDIR)\Type.obj"
+ -@erase "$(INTDIR)\TypeDefinition.obj"
+ -@erase "$(INTDIR)\TypeDefinitionImpl.obj"
+ -@erase "$(INTDIR)\TypeDefinitions.obj"
+ -@erase "$(INTDIR)\TypeDefinitionsImpl.obj"
+ -@erase "$(INTDIR)\TypeImpl.obj"
+ -@erase "$(INTDIR)\TypeList.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\XMLDocument.obj"
+ -@erase "$(INTDIR)\XMLDocumentImpl.obj"
+ -@erase "$(INTDIR)\XMLHelper.obj"
+ -@erase "$(INTDIR)\XMLHelperImpl.obj"
+ -@erase "$(INTDIR)\XMLQName.obj"
+ -@erase "$(INTDIR)\XpathHelper.obj"
+ -@erase "$(INTDIR)\XSDHelper.obj"
+ -@erase "$(INTDIR)\XSDHelperImpl.obj"
+ -@erase "$(INTDIR)\XSDPropertyInfo.obj"
+ -@erase "$(INTDIR)\XSDTypeInfo.obj"
+ -@erase "$(OUTDIR)\tuscany_sdo.dll"
+ -@erase "$(OUTDIR)\tuscany_sdo.exp"
+ -@erase "$(OUTDIR)\tuscany_sdo.lib"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /O2 /I "..\..\..\runtime\core\src" /I "$(LIBXML2_HOME)\include" /I "$(ICONV_HOME)\include" /I "$(ZLIB_HOME)\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_runtime.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libxml2.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\tuscany_sdo.pdb" /machine:I386 /out:"$(OUTDIR)\tuscany_sdo.dll" /implib:"$(OUTDIR)\tuscany_sdo.lib" /libpath:"$(LIBXML2_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\ChangedDataObjectListImpl.obj" \
+ "$(INTDIR)\ChangeSummary.obj" \
+ "$(INTDIR)\ChangeSummaryBuilder.obj" \
+ "$(INTDIR)\ChangeSummaryImpl.obj" \
+ "$(INTDIR)\CopyHelper.obj" \
+ "$(INTDIR)\DASProperty.obj" \
+ "$(INTDIR)\DASType.obj" \
+ "$(INTDIR)\DASValue.obj" \
+ "$(INTDIR)\DASValues.obj" \
+ "$(INTDIR)\DataFactory.obj" \
+ "$(INTDIR)\DataFactoryImpl.obj" \
+ "$(INTDIR)\DataGraph.obj" \
+ "$(INTDIR)\DataGraphImpl.obj" \
+ "$(INTDIR)\DataObject.obj" \
+ "$(INTDIR)\DataObjectImpl.obj" \
+ "$(INTDIR)\DataObjectInstance.obj" \
+ "$(INTDIR)\DataObjectList.obj" \
+ "$(INTDIR)\DataObjectListImpl.obj" \
+ "$(INTDIR)\DefaultLogWriter.obj" \
+ "$(INTDIR)\EqualityHelper.obj" \
+ "$(INTDIR)\GroupDefinition.obj" \
+ "$(INTDIR)\GroupEvent.obj" \
+ "$(INTDIR)\HelperProvider.obj" \
+ "$(INTDIR)\Logger.obj" \
+ "$(INTDIR)\LogWriter.obj" \
+ "$(INTDIR)\ParserErrorSetter.obj" \
+ "$(INTDIR)\Property.obj" \
+ "$(INTDIR)\PropertyDefinition.obj" \
+ "$(INTDIR)\PropertyDefinitionImpl.obj" \
+ "$(INTDIR)\PropertyImpl.obj" \
+ "$(INTDIR)\PropertyList.obj" \
+ "$(INTDIR)\PropertySetting.obj" \
+ "$(INTDIR)\RefCountingObject.obj" \
+ "$(INTDIR)\RefCountingPointer.obj" \
+ "$(INTDIR)\SAX2Attribute.obj" \
+ "$(INTDIR)\SAX2Attributes.obj" \
+ "$(INTDIR)\SAX2Namespaces.obj" \
+ "$(INTDIR)\SAX2Parser.obj" \
+ "$(INTDIR)\SchemaInfo.obj" \
+ "$(INTDIR)\SdoCheck.obj" \
+ "$(INTDIR)\SDODate.obj" \
+ "$(INTDIR)\SdoRuntime.obj" \
+ "$(INTDIR)\SDORuntimeException.obj" \
+ "$(INTDIR)\SDOSAX2Parser.obj" \
+ "$(INTDIR)\SDOSchemaSAX2Parser.obj" \
+ "$(INTDIR)\SDOString.obj" \
+ "$(INTDIR)\SDOUtils.obj" \
+ "$(INTDIR)\SDOXMLBufferWriter.obj" \
+ "$(INTDIR)\SDOXMLFileWriter.obj" \
+ "$(INTDIR)\SDOXMLStreamWriter.obj" \
+ "$(INTDIR)\SDOXMLString.obj" \
+ "$(INTDIR)\SDOXMLWriter.obj" \
+ "$(INTDIR)\SDOXSDBufferWriter.obj" \
+ "$(INTDIR)\SDOXSDFileWriter.obj" \
+ "$(INTDIR)\SDOXSDStreamWriter.obj" \
+ "$(INTDIR)\SDOXSDWriter.obj" \
+ "$(INTDIR)\Sequence.obj" \
+ "$(INTDIR)\SequenceImpl.obj" \
+ "$(INTDIR)\Setting.obj" \
+ "$(INTDIR)\SettingList.obj" \
+ "$(INTDIR)\Type.obj" \
+ "$(INTDIR)\TypeDefinition.obj" \
+ "$(INTDIR)\TypeDefinitionImpl.obj" \
+ "$(INTDIR)\TypeDefinitions.obj" \
+ "$(INTDIR)\TypeDefinitionsImpl.obj" \
+ "$(INTDIR)\TypeImpl.obj" \
+ "$(INTDIR)\TypeList.obj" \
+ "$(INTDIR)\XMLDocument.obj" \
+ "$(INTDIR)\XMLDocumentImpl.obj" \
+ "$(INTDIR)\XMLHelper.obj" \
+ "$(INTDIR)\XMLHelperImpl.obj" \
+ "$(INTDIR)\XMLQName.obj" \
+ "$(INTDIR)\XpathHelper.obj" \
+ "$(INTDIR)\XSDHelper.obj" \
+ "$(INTDIR)\XSDHelperImpl.obj" \
+ "$(INTDIR)\XSDPropertyInfo.obj" \
+ "$(INTDIR)\XSDTypeInfo.obj"
+
+"$(OUTDIR)\tuscany_sdo.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copyout
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\tuscany_sdo.dll"
+ copy Release\tuscany_sdo.dll ..\..\..\deploy\bin
+ copy Release\tuscany_sdo.lib ..\..\..\deploy\lib
+ copy ..\..\..\runtime\core\src\commonj\sdo\*.h ..\..\..\deploy\include\commonj\sdo
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "sdo_runtime - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\tuscany_sdo.dll"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ChangedDataObjectListImpl.obj"
+ -@erase "$(INTDIR)\ChangeSummary.obj"
+ -@erase "$(INTDIR)\ChangeSummaryBuilder.obj"
+ -@erase "$(INTDIR)\ChangeSummaryImpl.obj"
+ -@erase "$(INTDIR)\CopyHelper.obj"
+ -@erase "$(INTDIR)\DASProperty.obj"
+ -@erase "$(INTDIR)\DASType.obj"
+ -@erase "$(INTDIR)\DASValue.obj"
+ -@erase "$(INTDIR)\DASValues.obj"
+ -@erase "$(INTDIR)\DataFactory.obj"
+ -@erase "$(INTDIR)\DataFactoryImpl.obj"
+ -@erase "$(INTDIR)\DataGraph.obj"
+ -@erase "$(INTDIR)\DataGraphImpl.obj"
+ -@erase "$(INTDIR)\DataObject.obj"
+ -@erase "$(INTDIR)\DataObjectImpl.obj"
+ -@erase "$(INTDIR)\DataObjectInstance.obj"
+ -@erase "$(INTDIR)\DataObjectList.obj"
+ -@erase "$(INTDIR)\DataObjectListImpl.obj"
+ -@erase "$(INTDIR)\DefaultLogWriter.obj"
+ -@erase "$(INTDIR)\EqualityHelper.obj"
+ -@erase "$(INTDIR)\GroupDefinition.obj"
+ -@erase "$(INTDIR)\GroupEvent.obj"
+ -@erase "$(INTDIR)\HelperProvider.obj"
+ -@erase "$(INTDIR)\Logger.obj"
+ -@erase "$(INTDIR)\LogWriter.obj"
+ -@erase "$(INTDIR)\ParserErrorSetter.obj"
+ -@erase "$(INTDIR)\Property.obj"
+ -@erase "$(INTDIR)\PropertyDefinition.obj"
+ -@erase "$(INTDIR)\PropertyDefinitionImpl.obj"
+ -@erase "$(INTDIR)\PropertyImpl.obj"
+ -@erase "$(INTDIR)\PropertyList.obj"
+ -@erase "$(INTDIR)\PropertySetting.obj"
+ -@erase "$(INTDIR)\RefCountingObject.obj"
+ -@erase "$(INTDIR)\RefCountingPointer.obj"
+ -@erase "$(INTDIR)\SAX2Attribute.obj"
+ -@erase "$(INTDIR)\SAX2Attributes.obj"
+ -@erase "$(INTDIR)\SAX2Namespaces.obj"
+ -@erase "$(INTDIR)\SAX2Parser.obj"
+ -@erase "$(INTDIR)\SchemaInfo.obj"
+ -@erase "$(INTDIR)\SdoCheck.obj"
+ -@erase "$(INTDIR)\SDODate.obj"
+ -@erase "$(INTDIR)\SdoRuntime.obj"
+ -@erase "$(INTDIR)\SDORuntimeException.obj"
+ -@erase "$(INTDIR)\SDOSAX2Parser.obj"
+ -@erase "$(INTDIR)\SDOSchemaSAX2Parser.obj"
+ -@erase "$(INTDIR)\SDOString.obj"
+ -@erase "$(INTDIR)\SDOUtils.obj"
+ -@erase "$(INTDIR)\SDOXMLBufferWriter.obj"
+ -@erase "$(INTDIR)\SDOXMLFileWriter.obj"
+ -@erase "$(INTDIR)\SDOXMLStreamWriter.obj"
+ -@erase "$(INTDIR)\SDOXMLString.obj"
+ -@erase "$(INTDIR)\SDOXMLWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDBufferWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDFileWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDStreamWriter.obj"
+ -@erase "$(INTDIR)\SDOXSDWriter.obj"
+ -@erase "$(INTDIR)\Sequence.obj"
+ -@erase "$(INTDIR)\SequenceImpl.obj"
+ -@erase "$(INTDIR)\Setting.obj"
+ -@erase "$(INTDIR)\SettingList.obj"
+ -@erase "$(INTDIR)\Type.obj"
+ -@erase "$(INTDIR)\TypeDefinition.obj"
+ -@erase "$(INTDIR)\TypeDefinitionImpl.obj"
+ -@erase "$(INTDIR)\TypeDefinitions.obj"
+ -@erase "$(INTDIR)\TypeDefinitionsImpl.obj"
+ -@erase "$(INTDIR)\TypeImpl.obj"
+ -@erase "$(INTDIR)\TypeList.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\XMLDocument.obj"
+ -@erase "$(INTDIR)\XMLDocumentImpl.obj"
+ -@erase "$(INTDIR)\XMLHelper.obj"
+ -@erase "$(INTDIR)\XMLHelperImpl.obj"
+ -@erase "$(INTDIR)\XMLQName.obj"
+ -@erase "$(INTDIR)\XpathHelper.obj"
+ -@erase "$(INTDIR)\XSDHelper.obj"
+ -@erase "$(INTDIR)\XSDHelperImpl.obj"
+ -@erase "$(INTDIR)\XSDPropertyInfo.obj"
+ -@erase "$(INTDIR)\XSDTypeInfo.obj"
+ -@erase "$(OUTDIR)\tuscany_sdo.dll"
+ -@erase "$(OUTDIR)\tuscany_sdo.exp"
+ -@erase "$(OUTDIR)\tuscany_sdo.ilk"
+ -@erase "$(OUTDIR)\tuscany_sdo.lib"
+ -@erase "$(OUTDIR)\tuscany_sdo.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\runtime\core\src" /I "$(LIBXML2_HOME)\include" /I "$(ICONV_HOME)\include" /I "$(ZLIB_HOME)\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "SDO_EXPORTS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_runtime.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libxml2.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\tuscany_sdo.pdb" /debug /machine:I386 /out:"$(OUTDIR)\tuscany_sdo.dll" /implib:"$(OUTDIR)\tuscany_sdo.lib" /pdbtype:sept /libpath:"$(LIBXML2_HOME)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\ChangedDataObjectListImpl.obj" \
+ "$(INTDIR)\ChangeSummary.obj" \
+ "$(INTDIR)\ChangeSummaryBuilder.obj" \
+ "$(INTDIR)\ChangeSummaryImpl.obj" \
+ "$(INTDIR)\CopyHelper.obj" \
+ "$(INTDIR)\DASProperty.obj" \
+ "$(INTDIR)\DASType.obj" \
+ "$(INTDIR)\DASValue.obj" \
+ "$(INTDIR)\DASValues.obj" \
+ "$(INTDIR)\DataFactory.obj" \
+ "$(INTDIR)\DataFactoryImpl.obj" \
+ "$(INTDIR)\DataGraph.obj" \
+ "$(INTDIR)\DataGraphImpl.obj" \
+ "$(INTDIR)\DataObject.obj" \
+ "$(INTDIR)\DataObjectImpl.obj" \
+ "$(INTDIR)\DataObjectInstance.obj" \
+ "$(INTDIR)\DataObjectList.obj" \
+ "$(INTDIR)\DataObjectListImpl.obj" \
+ "$(INTDIR)\DefaultLogWriter.obj" \
+ "$(INTDIR)\EqualityHelper.obj" \
+ "$(INTDIR)\GroupDefinition.obj" \
+ "$(INTDIR)\GroupEvent.obj" \
+ "$(INTDIR)\HelperProvider.obj" \
+ "$(INTDIR)\Logger.obj" \
+ "$(INTDIR)\LogWriter.obj" \
+ "$(INTDIR)\ParserErrorSetter.obj" \
+ "$(INTDIR)\Property.obj" \
+ "$(INTDIR)\PropertyDefinition.obj" \
+ "$(INTDIR)\PropertyDefinitionImpl.obj" \
+ "$(INTDIR)\PropertyImpl.obj" \
+ "$(INTDIR)\PropertyList.obj" \
+ "$(INTDIR)\PropertySetting.obj" \
+ "$(INTDIR)\RefCountingObject.obj" \
+ "$(INTDIR)\RefCountingPointer.obj" \
+ "$(INTDIR)\SAX2Attribute.obj" \
+ "$(INTDIR)\SAX2Attributes.obj" \
+ "$(INTDIR)\SAX2Namespaces.obj" \
+ "$(INTDIR)\SAX2Parser.obj" \
+ "$(INTDIR)\SchemaInfo.obj" \
+ "$(INTDIR)\SdoCheck.obj" \
+ "$(INTDIR)\SDODate.obj" \
+ "$(INTDIR)\SdoRuntime.obj" \
+ "$(INTDIR)\SDORuntimeException.obj" \
+ "$(INTDIR)\SDOSAX2Parser.obj" \
+ "$(INTDIR)\SDOSchemaSAX2Parser.obj" \
+ "$(INTDIR)\SDOString.obj" \
+ "$(INTDIR)\SDOUtils.obj" \
+ "$(INTDIR)\SDOXMLBufferWriter.obj" \
+ "$(INTDIR)\SDOXMLFileWriter.obj" \
+ "$(INTDIR)\SDOXMLStreamWriter.obj" \
+ "$(INTDIR)\SDOXMLString.obj" \
+ "$(INTDIR)\SDOXMLWriter.obj" \
+ "$(INTDIR)\SDOXSDBufferWriter.obj" \
+ "$(INTDIR)\SDOXSDFileWriter.obj" \
+ "$(INTDIR)\SDOXSDStreamWriter.obj" \
+ "$(INTDIR)\SDOXSDWriter.obj" \
+ "$(INTDIR)\Sequence.obj" \
+ "$(INTDIR)\SequenceImpl.obj" \
+ "$(INTDIR)\Setting.obj" \
+ "$(INTDIR)\SettingList.obj" \
+ "$(INTDIR)\Type.obj" \
+ "$(INTDIR)\TypeDefinition.obj" \
+ "$(INTDIR)\TypeDefinitionImpl.obj" \
+ "$(INTDIR)\TypeDefinitions.obj" \
+ "$(INTDIR)\TypeDefinitionsImpl.obj" \
+ "$(INTDIR)\TypeImpl.obj" \
+ "$(INTDIR)\TypeList.obj" \
+ "$(INTDIR)\XMLDocument.obj" \
+ "$(INTDIR)\XMLDocumentImpl.obj" \
+ "$(INTDIR)\XMLHelper.obj" \
+ "$(INTDIR)\XMLHelperImpl.obj" \
+ "$(INTDIR)\XMLQName.obj" \
+ "$(INTDIR)\XpathHelper.obj" \
+ "$(INTDIR)\XSDHelper.obj" \
+ "$(INTDIR)\XSDHelperImpl.obj" \
+ "$(INTDIR)\XSDPropertyInfo.obj" \
+ "$(INTDIR)\XSDTypeInfo.obj"
+
+"$(OUTDIR)\tuscany_sdo.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copyout
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\tuscany_sdo.dll"
+ copy Debug\tuscany_sdo.dll ..\..\..\deploy\bin
+ copy Debug\tuscany_sdo.lib ..\..\..\deploy\lib
+ copy ..\..\..\runtime\core\src\commonj\sdo\*.h ..\..\..\deploy\include\commonj\sdo
+ copy Debug\tuscany_sdo.pdb ..\..\..\deploy\bin
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("sdo_runtime.dep")
+!INCLUDE "sdo_runtime.dep"
+!ELSE
+!MESSAGE Warning: cannot find "sdo_runtime.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "sdo_runtime - Win32 Release" || "$(CFG)" == "sdo_runtime - Win32 Debug"
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangedDataObjectListImpl.cpp
+
+"$(INTDIR)\ChangedDataObjectListImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummary.cpp
+
+"$(INTDIR)\ChangeSummary.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryBuilder.cpp
+
+"$(INTDIR)\ChangeSummaryBuilder.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryImpl.cpp
+
+"$(INTDIR)\ChangeSummaryImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\CopyHelper.cpp
+
+"$(INTDIR)\CopyHelper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASProperty.cpp
+
+"$(INTDIR)\DASProperty.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASType.cpp
+
+"$(INTDIR)\DASType.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASValue.cpp
+
+"$(INTDIR)\DASValue.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DASValues.cpp
+
+"$(INTDIR)\DASValues.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataFactory.cpp
+
+"$(INTDIR)\DataFactory.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataFactoryImpl.cpp
+
+"$(INTDIR)\DataFactoryImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataGraph.cpp
+
+"$(INTDIR)\DataGraph.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataGraphImpl.cpp
+
+"$(INTDIR)\DataGraphImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObject.cpp
+
+"$(INTDIR)\DataObject.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectImpl.cpp
+
+"$(INTDIR)\DataObjectImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectInstance.cpp
+
+"$(INTDIR)\DataObjectInstance.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectList.cpp
+
+"$(INTDIR)\DataObjectList.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DataObjectListImpl.cpp
+
+"$(INTDIR)\DataObjectListImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\DefaultLogWriter.cpp
+
+"$(INTDIR)\DefaultLogWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\EqualityHelper.cpp
+
+"$(INTDIR)\EqualityHelper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\GroupDefinition.cpp
+
+"$(INTDIR)\GroupDefinition.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\GroupEvent.cpp
+
+"$(INTDIR)\GroupEvent.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\HelperProvider.cpp
+
+"$(INTDIR)\HelperProvider.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Logger.cpp
+
+"$(INTDIR)\Logger.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\LogWriter.cpp
+
+"$(INTDIR)\LogWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\ParserErrorSetter.cpp
+
+"$(INTDIR)\ParserErrorSetter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Property.cpp
+
+"$(INTDIR)\Property.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyDefinition.cpp
+
+"$(INTDIR)\PropertyDefinition.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyDefinitionImpl.cpp
+
+"$(INTDIR)\PropertyDefinitionImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyImpl.cpp
+
+"$(INTDIR)\PropertyImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertyList.cpp
+
+"$(INTDIR)\PropertyList.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\PropertySetting.cpp
+
+"$(INTDIR)\PropertySetting.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\RefCountingObject.cpp
+
+"$(INTDIR)\RefCountingObject.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\RefCountingPointer.cpp
+
+"$(INTDIR)\RefCountingPointer.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Attribute.cpp
+
+"$(INTDIR)\SAX2Attribute.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Attributes.cpp
+
+"$(INTDIR)\SAX2Attributes.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Namespaces.cpp
+
+"$(INTDIR)\SAX2Namespaces.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SAX2Parser.cpp
+
+"$(INTDIR)\SAX2Parser.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SchemaInfo.cpp
+
+"$(INTDIR)\SchemaInfo.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SdoCheck.cpp
+
+"$(INTDIR)\SdoCheck.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDODate.cpp
+
+"$(INTDIR)\SDODate.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SdoRuntime.cpp
+
+"$(INTDIR)\SdoRuntime.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDORuntimeException.cpp
+
+"$(INTDIR)\SDORuntimeException.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOSAX2Parser.cpp
+
+"$(INTDIR)\SDOSAX2Parser.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOSchemaSAX2Parser.cpp
+
+"$(INTDIR)\SDOSchemaSAX2Parser.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOString.cpp
+
+"$(INTDIR)\SDOString.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOUtils.cpp
+
+"$(INTDIR)\SDOUtils.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLBufferWriter.cpp
+
+"$(INTDIR)\SDOXMLBufferWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLFileWriter.cpp
+
+"$(INTDIR)\SDOXMLFileWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLStreamWriter.cpp
+
+"$(INTDIR)\SDOXMLStreamWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLString.cpp
+
+"$(INTDIR)\SDOXMLString.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXMLWriter.cpp
+
+"$(INTDIR)\SDOXMLWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDBufferWriter.cpp
+
+"$(INTDIR)\SDOXSDBufferWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDFileWriter.cpp
+
+"$(INTDIR)\SDOXSDFileWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDStreamWriter.cpp
+
+"$(INTDIR)\SDOXSDStreamWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SDOXSDWriter.cpp
+
+"$(INTDIR)\SDOXSDWriter.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Sequence.cpp
+
+"$(INTDIR)\Sequence.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SequenceImpl.cpp
+
+"$(INTDIR)\SequenceImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Setting.cpp
+
+"$(INTDIR)\Setting.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\SettingList.cpp
+
+"$(INTDIR)\SettingList.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\Type.cpp
+
+"$(INTDIR)\Type.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinition.cpp
+
+"$(INTDIR)\TypeDefinition.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionImpl.cpp
+
+"$(INTDIR)\TypeDefinitionImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitions.cpp
+
+"$(INTDIR)\TypeDefinitions.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionsImpl.cpp
+
+"$(INTDIR)\TypeDefinitionsImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeImpl.cpp
+
+"$(INTDIR)\TypeImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\TypeList.cpp
+
+"$(INTDIR)\TypeList.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLDocument.cpp
+
+"$(INTDIR)\XMLDocument.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLDocumentImpl.cpp
+
+"$(INTDIR)\XMLDocumentImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLHelper.cpp
+
+"$(INTDIR)\XMLHelper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLHelperImpl.cpp
+
+"$(INTDIR)\XMLHelperImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XMLQName.cpp
+
+"$(INTDIR)\XMLQName.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XpathHelper.cpp
+
+"$(INTDIR)\XpathHelper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDHelper.cpp
+
+"$(INTDIR)\XSDHelper.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDHelperImpl.cpp
+
+"$(INTDIR)\XSDHelperImpl.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDPropertyInfo.cpp
+
+"$(INTDIR)\XSDPropertyInfo.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\src\commonj\sdo\XSDTypeInfo.cpp
+
+"$(INTDIR)\XSDTypeInfo.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/tuscany_sdo.ilk b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/tuscany_sdo.ilk
new file mode 100644
index 0000000000..f4fc233e2b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_runtime/tuscany_sdo.ilk
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.dsp
new file mode 100644
index 0000000000..68b514aa1b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.dsp
@@ -0,0 +1,136 @@
+# Microsoft Developer Studio Project File - Name="sdo_test" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=sdo_test - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_test.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_test.mak" CFG="sdo_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "sdo_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "sdo_test - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /I "..\..\..\deploy\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib /nologo /subsystem:console /machine:I386 /libpath:"..\..\..\deploy\lib"
+# SUBTRACT LINK32 /verbose /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\..\..\deploy\bin\*.dll Release
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "sdo_test - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\deploy\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /Zm200 /c
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 tuscany_sdo.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\..\..\deploy\lib"
+# SUBTRACT LINK32 /pdb:none
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=copy ..\..\..\deploy\bin\*.dll Debug copy ..\..\..\deploy\bin\*.pdb Debug
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "sdo_test - Win32 Release"
+# Name "sdo_test - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\main.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\SdoGenerate.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\sdotest.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\sdotest2.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\utils.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\runtime\core\test\sdotest.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=..\build_instructions.txt
+# End Source File
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.mak
new file mode 100644
index 0000000000..d4cc02d1f1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/sdo_test/sdo_test.mak
@@ -0,0 +1,303 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on sdo_test.dsp
+!IF "$(CFG)" == ""
+CFG=sdo_test - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to sdo_test - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "sdo_test - Win32 Release" && "$(CFG)" != "sdo_test - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_test.mak" CFG="sdo_test - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_test - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "sdo_test - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "sdo_test - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\sdo_test.exe"
+
+!ELSE
+
+ALL : "sdo_runtime - Win32 Release" "$(OUTDIR)\sdo_test.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"sdo_runtime - Win32 ReleaseCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\SdoGenerate.obj"
+ -@erase "$(INTDIR)\sdotest.obj"
+ -@erase "$(INTDIR)\sdotest2.obj"
+ -@erase "$(INTDIR)\utils.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(OUTDIR)\sdo_test.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /I "..\..\..\deploy\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\sdo_test.pdb" /machine:I386 /out:"$(OUTDIR)\sdo_test.exe" /libpath:"..\..\..\deploy\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\SdoGenerate.obj" \
+ "$(INTDIR)\sdotest.obj" \
+ "$(INTDIR)\sdotest2.obj" \
+ "$(INTDIR)\utils.obj" \
+ "..\sdo_runtime\Release\tuscany_sdo.lib"
+
+"$(OUTDIR)\sdo_test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "sdo_runtime - Win32 Release" "$(OUTDIR)\sdo_test.exe"
+ copy ..\..\..\deploy\bin\*.dll Release
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "sdo_test - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+!IF "$(RECURSE)" == "0"
+
+ALL : "$(OUTDIR)\sdo_test.exe"
+
+!ELSE
+
+ALL : "sdo_runtime - Win32 Debug" "$(OUTDIR)\sdo_test.exe"
+
+!ENDIF
+
+!IF "$(RECURSE)" == "1"
+CLEAN :"sdo_runtime - Win32 DebugCLEAN"
+!ELSE
+CLEAN :
+!ENDIF
+ -@erase "$(INTDIR)\main.obj"
+ -@erase "$(INTDIR)\SdoGenerate.obj"
+ -@erase "$(INTDIR)\sdotest.obj"
+ -@erase "$(INTDIR)\sdotest2.obj"
+ -@erase "$(INTDIR)\utils.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(OUTDIR)\sdo_test.exe"
+ -@erase "$(OUTDIR)\sdo_test.ilk"
+ -@erase "$(OUTDIR)\sdo_test.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "..\..\..\deploy\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /Zm200 /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_test.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=tuscany_sdo.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\sdo_test.pdb" /debug /machine:I386 /out:"$(OUTDIR)\sdo_test.exe" /pdbtype:sept /libpath:"..\..\..\deploy\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\main.obj" \
+ "$(INTDIR)\SdoGenerate.obj" \
+ "$(INTDIR)\sdotest.obj" \
+ "$(INTDIR)\sdotest2.obj" \
+ "$(INTDIR)\utils.obj" \
+ "..\sdo_runtime\Debug\tuscany_sdo.lib"
+
+"$(OUTDIR)\sdo_test.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "sdo_runtime - Win32 Debug" "$(OUTDIR)\sdo_test.exe"
+ copy ..\..\..\deploy\bin\*.dll Debug
+ copy ..\..\..\deploy\bin\*.pdb Debug
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("sdo_test.dep")
+!INCLUDE "sdo_test.dep"
+!ELSE
+!MESSAGE Warning: cannot find "sdo_test.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "sdo_test - Win32 Release" || "$(CFG)" == "sdo_test - Win32 Debug"
+SOURCE=..\..\..\runtime\core\test\main.cpp
+
+"$(INTDIR)\main.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\SdoGenerate.cpp
+
+"$(INTDIR)\SdoGenerate.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\sdotest.cpp
+
+"$(INTDIR)\sdotest.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\sdotest2.cpp
+
+"$(INTDIR)\sdotest2.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\runtime\core\test\utils.cpp
+
+"$(INTDIR)\utils.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!IF "$(CFG)" == "sdo_test - Win32 Release"
+
+"sdo_runtime - Win32 Release" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Release"
+ cd "..\sdo_test"
+
+"sdo_runtime - Win32 ReleaseCLEAN" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Release" RECURSE=1 CLEAN
+ cd "..\sdo_test"
+
+!ELSEIF "$(CFG)" == "sdo_test - Win32 Debug"
+
+"sdo_runtime - Win32 Debug" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Debug"
+ cd "..\sdo_test"
+
+"sdo_runtime - Win32 DebugCLEAN" :
+ cd "..\sdo_runtime"
+ $(MAKE) /$(MAKEFLAGS) /F .\sdo_runtime.mak CFG="sdo_runtime - Win32 Debug" RECURSE=1 CLEAN
+ cd "..\sdo_test"
+
+!ENDIF
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.dsw b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.dsw
new file mode 100644
index 0000000000..7447226eb9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.dsw
@@ -0,0 +1,80 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "sdo_axiom"=.\sdo_axiom\sdo_axiom.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name sdo_runtime
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "sdo_axiom_test"=.\sdo_axiom_test\sdo_axiom_test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name sdo_axiom
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name sdo_runtime
+ End Project Dependency
+ Begin Project Dependency
+ Project_Dep_Name sdo_test
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Project: "sdo_runtime"=.\sdo_runtime\sdo_runtime.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "sdo_test"=.\sdo_test\sdo_test.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+ Begin Project Dependency
+ Project_Dep_Name sdo_runtime
+ End Project Dependency
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.ncb b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.ncb
new file mode 100644
index 0000000000..6a595ae6aa
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.ncb
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.opt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.opt
new file mode 100644
index 0000000000..90fd624b1d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projects/tuscany_sdo/tuscany_sdo.opt
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/build_instructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/build_instructions.txt
new file mode 100644
index 0000000000..8d2e518ef8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/build_instructions.txt
@@ -0,0 +1,28 @@
+Tuscany SDO Build Instructions
+===============================
+
+The project is dependent on libxml
+(available here: http://www.zlatkovic.com/libxml.en.html)
+
+The versions required are these:
+ libxml2-2.6.20.win32
+ iconv-1.9.1.win32
+ zlib-1.2.2.win32
+
+By default, the projects are set up to look for these in directories located by the
+environment variables: LIBXML2_HOME, ICONV_HOME and ZLIB_HOME. These need to be set
+before launching Visual Studio.
+
+The two projects sdo_axiom and sdo_axiom_test are dependent on AXIS2C, and require that
+an environment variable AXIS2C_HOME be set to where axis2c is installed. Axis2c can be
+located at http://ws.apache.org/axis2/c/.
+
+Open the build solution \sdo\runtime\projectsvc7\tuscany_sdo\tuscany_sdo.sln
+
+Rebuild the solution
+
+There are several signed-unsigned mismatches which we are working to fix, but these
+warnings should not cause any problems in running the project.
+
+NOTE:
+The output is copied to the deploy directory from both VC6 and VC7 builds. \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom/sdo_axiom.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom/sdo_axiom.vcproj
new file mode 100644
index 0000000000..6ac55e31fb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom/sdo_axiom.vcproj
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="sdo_axiom"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\deploy\include,$(AXIS2C_HOME)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDO_AXIOM_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/sdo_axiom.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="axis2_parser.lib axis2_util.lib axiom.lib tuscany_sdo.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Release/tuscany_sdo_axiom.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(AXIS2C_HOME)\lib"
+ ProgramDatabaseFile=".\Release/tuscany_sdo_axiom.pdb"
+ ImportLibrary=".\Release/tuscany_sdo_axiom.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/sdo_axiom.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Release\tuscany_sdo_axiom.dll ..\..\..\deploy\bin
+copy Release\tuscany_sdo_axiom.lib ..\..\..\deploy\lib
+copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom.h ..\..\..\deploy\include\
+copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h ..\..\..\deploy\include\
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\deploy\include,$(AXIS2C_HOME)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDO_AXIOM_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/sdo_axiom.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="axis2_parser.lib axis2_util.lib axiom.lib tuscany_sdo.lib odbc32.lib odbccp32.lib"
+ OutputFile="Debug/tuscany_sdo_axiom.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib,$(AXIS2C_HOME)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/tuscany_sdo_axiom.pdb"
+ ImportLibrary=".\Debug/tuscany_sdo_axiom.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/sdo_axiom.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy Debug\tuscany_sdo_axiom.dll ..\..\..\deploy\bin
+copy Debug\tuscany_sdo_axiom.pdb ..\..\..\deploy\bin
+copy Debug\tuscany_sdo_axiom.lib ..\..\..\deploy\lib
+copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom.h ..\..\..\deploy\include\
+copy ..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h ..\..\..\deploy\include\
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\sdo_axiom\sdo_axiom.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\core\sdo_axiom\sdo_axiom.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\sdo_axiom\sdo_axiom_export.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.vcproj
new file mode 100644
index 0000000000..075e7347fb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_axiom_test/sdo_axiom_test.vcproj
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="sdo_axiom_test"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\deploy\include,$(AXIS2C_HOME)\include"
+ PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/sdo_axiom_test.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="tuscany_sdo.lib tuscany_sdo_axiom.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Release/sdo_axiom_test.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib"
+ ProgramDatabaseFile=".\Release/sdo_axiom_test.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/sdo_axiom_test.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\..\..\deploy\bin\*.dll Release"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\deploy\include,$(AXIS2C_HOME)\include"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/sdo_axiom_test.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="tuscany_sdo.lib tuscany_sdo_axiom.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Debug/sdo_axiom_test.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/sdo_axiom_test.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/sdo_axiom_test.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\..\..\deploy\bin\*.dll Debug
+copy ..\..\..\deploy\bin\*.pdb Debug
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\sdo_axiom_test\sdo_axiom_test.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\core\sdo_axiom_test\sdo_axiom_test.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_runtime/sdo_runtime.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_runtime/sdo_runtime.vcproj
new file mode 100644
index 0000000000..259d340520
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_runtime/sdo_runtime.vcproj
@@ -0,0 +1,657 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="sdo_runtime"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\runtime\core\src,$(LIBXML2_HOME)\include,$(ICONV_HOME)\include,$(ZLIB_HOME)\include"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;SDO_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/sdo_runtime.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib libxml2.lib"
+ OutputFile=".\Debug\tuscany_sdo.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(LIBXML2_HOME)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/tuscany_sdo.pdb"
+ ImportLibrary=".\Debug/tuscany_sdo.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\..\..\..\runtime\core\Debug/sdo_runtime.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="copyout"
+ CommandLine="if not exist ..\..\..\deploy mkdir ..\..\..\deploy
+if not exist ..\..\..\deploy\bin mkdir ..\..\..\deploy\bin
+if not exist ..\..\..\deploy\lib mkdir ..\..\..\deploy\lib
+if not exist ..\..\..\deploy\include mkdir ..\..\..\deploy\include
+if not exist ..\..\..\deploy\include\commonj mkdir ..\..\..\deploy\include\commonj
+if not exist ..\..\..\deploy\include\commonj\sdo mkdir ..\..\..\deploy\include\commonj\sdo
+
+copy .\Debug\tuscany_sdo.dll ..\..\..\deploy\bin
+copy .\Debug\tuscany_sdo.lib ..\..\..\deploy\lib
+copy ..\..\..\runtime\core\src\commonj\sdo\*.h ..\..\..\deploy\include\commonj\sdo
+copy .\Debug\tuscany_sdo.pdb ..\..\..\deploy\bin
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\runtime\core\src,$(LIBXML2_HOME)\include,$(ICONV_HOME)\include,$(ZLIB_HOME)\include"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;SDO_EXPORTS"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/sdo_runtime.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib libxml2.lib"
+ OutputFile=".\Release\tuscany_sdo.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(LIBXML2_HOME)\lib"
+ ProgramDatabaseFile=".\Release/tuscany_sdo.pdb"
+ ImportLibrary=".\Release/tuscany_sdo.lib"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\..\..\..\runtime\core\Release/sdo_runtime.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ Description="copyout"
+ CommandLine="if not exist ..\..\..\deploy mkdir ..\..\..\deploy
+if not exist ..\..\..\deploy\bin mkdir ..\..\..\deploy\bin
+if not exist ..\..\..\deploy\lib mkdir ..\..\..\deploy\lib
+if not exist ..\..\..\deploy\include mkdir ..\..\..\deploy\include
+if not exist ..\..\..\deploy\include\commonj mkdir ..\..\..\deploy\include\commonj
+if not exist ..\..\..\deploy\include\commonj\sdo mkdir ..\..\..\deploy\include\commonj\sdo
+
+copy .\Release\tuscany_sdo.dll ..\..\..\deploy\bin
+copy .\Release\tuscany_sdo.lib ..\..\..\deploy\lib
+copy ..\..\..\runtime\core\src\commonj\sdo\*.h ..\..\..\deploy\include\commonj\sdo
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangeSummary.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryBuilder.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangedDataObjectListImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\CopyHelper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASProperty.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASType.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASValue.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASValues.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataFactory.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataFactoryImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataGraph.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataGraphImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObject.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectInstance.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectList.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectListImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DefaultLogWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\EqualityHelper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\GroupDefinition.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\GroupEvent.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\HelperProvider.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\LogWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Logger.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ParserErrorSetter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Property.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyDefinition.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyDefinitionImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyList.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertySetting.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\RefCountingObject.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\RefCountingPointer.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Attribute.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Attributes.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Namespaces.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Parser.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDODate.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDORuntimeException.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOSAX2Parser.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOSchemaSAX2Parser.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOString.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOUtils.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLBufferWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLFileWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLStreamWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLString.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDBufferWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDFileWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDStreamWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDWriter.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SchemaInfo.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SdoCheck.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SdoRuntime.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Sequence.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SequenceImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Setting.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SettingList.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Type.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinition.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinitions.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionsImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeList.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLDocument.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLDocumentImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLHelper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLHelperImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLQName.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDHelper.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDHelperImpl.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDPropertyInfo.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDTypeInfo.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XpathHelper.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangeSummary.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryBuilder.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangeSummaryImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangedDataObjectList.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ChangedDataObjectListImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\CopyHelper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASProperty.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASType.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASValue.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DASValues.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataFactory.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataFactoryImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataGraph.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataGraphImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObject.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectInstance.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectList.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DataObjectListImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\DefaultLogWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\EqualityHelper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\GroupDefinition.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\GroupEvent.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\HelperProvider.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\LogWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Logger.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Logging.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\ParserErrorSetter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Property.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyDefinition.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyDefinitionImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertyList.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\PropertySetting.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\RefCountingObject.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\RefCountingPointer.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Attribute.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Attributes.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Namespaces.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SAX2Parser.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDO.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDODate.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDORuntimeException.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOSAX2Parser.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOSPI.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOSchemaSAX2Parser.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOString.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOUtils.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLBufferWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLFileWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLStreamWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLString.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXMLWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDBufferWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDFileWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDStreamWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SDOXSDWriter.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SchemaInfo.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SdoCheck.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SdoRuntime.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Sequence.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SequenceImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Setting.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\SettingList.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\Type.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinition.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinitions.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeDefinitionsImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\TypeList.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLDocument.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLDocumentImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLHelper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLHelperImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XMLQName.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDHelper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDHelperImpl.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDPropertyInfo.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XSDTypeInfo.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\XpathHelper.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\disable_warn.h">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\src\commonj\sdo\export.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ <File
+ RelativePath="..\..\..\Committers Guide.txt">
+ </File>
+ <File
+ RelativePath="..\..\..\readme.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_samples/sdo_samples.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_samples/sdo_samples.vcproj
new file mode 100644
index 0000000000..6a27381a8f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_samples/sdo_samples.vcproj
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="sdo_samples"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\..\..\..\runtime\core\samples\Debug"
+ IntermediateDirectory=".\..\..\..\runtime\core\samples\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\deploy\include"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\..\..\..\runtime\core\samples\Debug/sdo_samples.pch"
+ AssemblerListingLocation=".\..\..\..\runtime\core\samples\Debug/"
+ ObjectFile=".\..\..\..\runtime\core\samples\Debug/"
+ ProgramDataBaseFileName=".\..\..\..\runtime\core\samples\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="tuscany_sdo.lib odbc32.lib odbccp32.lib"
+ OutputFile="..\..\..\runtime\core\samples\Debug/samples.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\..\..\..\runtime\core\samples\Debug/samples.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\..\..\..\runtime\core\samples\Debug/sdo_samples.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\..\..\runtime\core\samples\*.xsd ..\..\..\runtime\core\samples\Debug
+copy ..\..\..\runtime\core\samples\*.xml ..\..\..\runtime\core\samples\Debug
+copy ..\..\..\deploy\bin\*.dll ..\..\..\runtime\core\samples\Debug
+copy ..\..\..\deploy\bin\*.pdb ..\..\..\runtime\core\samples\Debug
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\deploy\include"
+ PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderFile=".\Release/sdo_samples.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sdo.lib"
+ OutputFile=".\Release/sdo_samples.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib"
+ ProgramDatabaseFile=".\Release/sdo_samples.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\..\..\..\runtime\core\samples\Release/sdo_samples.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\..\..\runtime\core\samples\*.xsd .s\Release
+copy ..\..\..\runtime\core\samples\*.xml .\Release
+copy ..\..\..\runtime\core\samples\*.wsdl .\Release
+copy ..\..\..\deploy\bin\*.dll .\Release
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\samples\ChangeSummarySave.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\samples\ObjectCreation.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\samples\Query.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\samples\Substitutes.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\samples\XSDLoading.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\samples\samples.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\core\samples\samples.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_test/sdo_test.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_test/sdo_test.vcproj
new file mode 100644
index 0000000000..825c1eb017
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/sdo_test/sdo_test.vcproj
@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="sdo_test"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..\deploy\include"
+ PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ PrecompiledHeaderFile=".\Release/sdo_test.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sdo.lib"
+ OutputFile=".\Release/sdo_test.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib"
+ ProgramDatabaseFile=".\Release/sdo_test.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\..\..\..\runtime\core\test\Release/sdo_test.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\..\..\deploy\bin\*.dll Release"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalOptions="/Zm200 "
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..\deploy\include"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/sdo_test.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="tuscany_sdo.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Debug/sdo_test.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="..\..\..\deploy\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/sdo_test.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\..\..\..\runtime\core\test\Debug/sdo_test.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="copy ..\..\..\deploy\bin\*.dll Debug
+copy ..\..\..\deploy\bin\*.pdb Debug
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\runtime\core\test\SdoGenerate.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\main.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\sdotest.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\sdotest2.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\runtime\core\test\utils.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\runtime\core\test\sdotest.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ <File
+ RelativePath="..\build_instructions.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.sln b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.sln
new file mode 100644
index 0000000000..dd45b4bde6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.sln
@@ -0,0 +1,44 @@
+Microsoft Visual Studio Solution File, Format Version 7.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdo_axiom", "sdo_axiom\sdo_axiom.vcproj", "{BF03BF2B-8F39-4458-8AD9-E3420988EFCA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdo_axiom_test", "sdo_axiom_test\sdo_axiom_test.vcproj", "{CE1FE92A-3F1C-4AD2-922C-E16703402234}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdo_runtime", "sdo_runtime\sdo_runtime.vcproj", "{EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdo_test", "sdo_test\sdo_test.vcproj", "{C22D761C-F453-45EB-AA23-D13E2F3B786B}"
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ ConfigName.0 = Debug
+ ConfigName.1 = Release
+ EndGlobalSection
+ GlobalSection(ProjectDependencies) = postSolution
+ {BF03BF2B-8F39-4458-8AD9-E3420988EFCA}.0 = {EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}
+ {CE1FE92A-3F1C-4AD2-922C-E16703402234}.0 = {BF03BF2B-8F39-4458-8AD9-E3420988EFCA}
+ {CE1FE92A-3F1C-4AD2-922C-E16703402234}.1 = {EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}
+ {CE1FE92A-3F1C-4AD2-922C-E16703402234}.2 = {C22D761C-F453-45EB-AA23-D13E2F3B786B}
+ {C22D761C-F453-45EB-AA23-D13E2F3B786B}.0 = {EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {BF03BF2B-8F39-4458-8AD9-E3420988EFCA}.Debug.ActiveCfg = Debug|Win32
+ {BF03BF2B-8F39-4458-8AD9-E3420988EFCA}.Debug.Build.0 = Debug|Win32
+ {BF03BF2B-8F39-4458-8AD9-E3420988EFCA}.Release.ActiveCfg = Release|Win32
+ {BF03BF2B-8F39-4458-8AD9-E3420988EFCA}.Release.Build.0 = Release|Win32
+ {CE1FE92A-3F1C-4AD2-922C-E16703402234}.Debug.ActiveCfg = Debug|Win32
+ {CE1FE92A-3F1C-4AD2-922C-E16703402234}.Debug.Build.0 = Debug|Win32
+ {CE1FE92A-3F1C-4AD2-922C-E16703402234}.Release.ActiveCfg = Release|Win32
+ {CE1FE92A-3F1C-4AD2-922C-E16703402234}.Release.Build.0 = Release|Win32
+ {EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}.Debug.ActiveCfg = Debug|Win32
+ {EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}.Debug.Build.0 = Debug|Win32
+ {EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}.Release.ActiveCfg = Release|Win32
+ {EAA49F3B-30A9-4F59-BCD7-F5769A28C1CE}.Release.Build.0 = Release|Win32
+ {C22D761C-F453-45EB-AA23-D13E2F3B786B}.Debug.ActiveCfg = Debug|Win32
+ {C22D761C-F453-45EB-AA23-D13E2F3B786B}.Debug.Build.0 = Debug|Win32
+ {C22D761C-F453-45EB-AA23-D13E2F3B786B}.Release.ActiveCfg = Release|Win32
+ {C22D761C-F453-45EB-AA23-D13E2F3B786B}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.suo b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.suo
new file mode 100644
index 0000000000..161181fc60
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/projectsvc7/tuscany_sdo/tuscany_sdo.suo
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/Makefile.am
new file mode 100644
index 0000000000..527708855b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = core
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/Makefile.am
new file mode 100644
index 0000000000..1b3ddb9c93
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = src test sdo_axiom sdo_axiom_test
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/Makefile.am
new file mode 100644
index 0000000000..7339b49e97
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/Makefile.am
@@ -0,0 +1,22 @@
+SUBDIRS =
+
+nobase_include_HEADERS = sdo_axiom.h \
+sdo_axiom_export.h
+
+lib_LTLIBRARIES = libtuscany_sdo_axiom.la
+AM_CPPFLAGS = $(CPPFLAGS)
+
+libtuscany_sdo_axiom_la_SOURCES = \
+ sdo_axiom.cpp
+
+libtuscany_sdo_axiom_la_LIBADD = \
+ -L$(top_builddir)/runtime/core/src/commonj/sdo -ltuscany_sdo \
+ -L$(AXIS2C_HOME)/lib \
+ -laxis2_util \
+ -laxis2_axiom \
+ -laxis2_parser
+
+INCLUDES = -I$(top_builddir)/runtime/core/src \
+ -I$(top_builddir)/runtime/core/sdo_axiom \
+ -I${AXIS2C_HOME}/include
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.cpp
new file mode 100644
index 0000000000..0d71d9802e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.cpp
@@ -0,0 +1,264 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#include "sdo_axiom.h"
+
+using namespace commonj::sdo;
+using namespace std;
+
+
+namespace commonj
+{
+ namespace sdo_axiom
+ {
+
+ int AxiomHelper::axiswritercount = 0;
+
+ AxiomHelper* AxiomHelper::getHelper()
+ {
+ return new AxiomHelper();
+ }
+
+ void AxiomHelper::releaseHelper(AxiomHelper* h)
+ {
+ if (h) delete h;
+ }
+
+ void AxiomHelper::deleteEnv()
+ {
+ if (the_env)axis2_env_free(the_env);
+ }
+
+ void AxiomHelper::createEnv()
+ {
+
+ the_allocator = axis2_allocator_init (NULL);
+ if (the_allocator == NULL) return;
+
+ the_env = axis2_env_create(the_allocator);
+
+ if (the_env == 0) return;
+
+ return;
+ }
+
+
+ AxiomHelper::AxiomHelper()
+ {
+ createEnv();
+ }
+
+ AxiomHelper::~AxiomHelper()
+ {
+ deleteEnv();
+ }
+
+
+ axis2_env_t* AxiomHelper::getEnv()
+ {
+ return the_env;
+ }
+
+ axiom_node_t* AxiomHelper::toAxiomNode(DataObjectPtr dob)
+ {
+
+ axiom_document_t* doc = toAxiomDoc(dob);
+
+ if (!doc)
+ {
+ return 0;
+ }
+
+ axiom_node_t* root_node =
+ AXIOM_DOCUMENT_GET_ROOT_ELEMENT(doc, the_env);
+ if (!root_node)
+ {
+ cout << "No Root Element in the document" << endl;
+ return 0;
+ }
+
+
+ return root_node;
+ }
+
+ axiom_document_t* AxiomHelper::toAxiomDoc(DataObjectPtr dob)
+ {
+
+ DataFactory* df = dob->getDataFactory();
+ XSDHelperPtr xs = HelperProvider::getXSDHelper(df);
+ XMLHelperPtr xm = HelperProvider::getXMLHelper(df);
+ if (!the_env)
+ {
+ cout << "No Axis Environment" << endl;
+ return 0;
+ }
+ char * str =
+ xm->save(
+ dob,
+ dob->getType().getURI(),
+ dob->getType().getName());
+
+ // if (str) cout << str << endl;
+
+ axiom_xml_reader_t * reader =
+ axiom_xml_reader_create_for_memory(the_env,
+ (void*)str,
+ strlen(str),
+ (const axis2_char_t *)"UTF-8",
+ AXIS2_XML_PARSER_TYPE_BUFFER);
+
+ if (!reader)
+ {
+ cout << "No Axis Reader" << endl;
+ return 0;
+ }
+
+ axiom_stax_builder_t* builder =
+ axiom_stax_builder_create(the_env, reader);
+
+ if (!builder)
+ {
+ cout << "No Axis Builder" << endl;
+ AXIOM_XML_READER_FREE(reader, the_env);
+ return 0;
+ }
+
+ axiom_document_t* document =
+ AXIOM_STAX_BUILDER_GET_DOCUMENT(builder, the_env);
+
+ if (!document)
+ {
+ cout << "No Axis Document" << endl;
+ AXIOM_STAX_BUILDER_FREE(builder, the_env);
+ return 0;
+ }
+
+ axiom_node_t* root_node =
+ AXIOM_DOCUMENT_GET_ROOT_ELEMENT(document, the_env);
+ if (!root_node)
+ {
+ cout << "No Root Element in the document" << endl;
+ AXIOM_STAX_BUILDER_FREE(builder, the_env);
+ return 0;
+ }
+
+
+ AXIOM_DOCUMENT_BUILD_ALL(document, the_env);
+
+ return document;
+ }
+
+ DataObjectPtr AxiomHelper::toSdo(axiom_document_t* document,
+ DataFactoryPtr factory)
+ {
+
+ if (!the_env)
+ {
+ cout << "No Axis Environment" << endl;
+ return 0;
+ }
+
+ axiom_node_t* root_node =
+ AXIOM_DOCUMENT_GET_ROOT_ELEMENT(document, the_env);
+
+ return toSdo(root_node,factory);
+ }
+
+ DataObjectPtr AxiomHelper::toSdo(axiom_node_t* root_node,
+ DataFactoryPtr factory)
+ {
+
+ if (!the_env)
+ {
+ cout << "No Axis Environment" << endl;
+ return 0;
+ }
+
+ XMLHelperPtr helper = HelperProvider::getXMLHelper(factory);
+
+ axiom_xml_writer_t* writer = axiom_xml_writer_create_for_memory(
+ the_env, NULL, AXIS2_TRUE, 0,
+ AXIS2_XML_PARSER_TYPE_BUFFER);
+
+ axiom_output_t* output = axiom_output_create(the_env, writer);
+
+
+ if (!root_node)
+ {
+ cout << "No Root Element in the document" << endl;
+ AXIOM_OUTPUT_FREE(output, the_env);
+ return 0;
+ }
+
+ AXIOM_NODE_SERIALIZE(root_node, the_env, output);
+
+ axis2_char_t* buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(writer, the_env);
+
+ XMLDocumentPtr theXMLDocument = helper->load(buffer);
+
+ if (theXMLDocument != 0)
+ {
+ return theXMLDocument->getRootDataObject();
+ }
+ cout << "The XML document returned from load was zero" << endl;
+ return 0;
+ }
+
+ void AxiomHelper::output(axiom_document_t* document)
+ {
+
+ if (!the_env)
+ {
+ cout << "No Axis Environment" << endl;
+ return;
+ }
+
+ axiom_xml_writer_t* writer = axiom_xml_writer_create_for_memory(
+ the_env, NULL, AXIS2_TRUE, 0,
+ AXIS2_XML_PARSER_TYPE_BUFFER);
+
+ axiom_output_t* output = axiom_output_create(the_env, writer);
+
+ axiom_node_t* root_node =
+ AXIOM_DOCUMENT_GET_ROOT_ELEMENT(document, the_env);
+
+ if (!root_node)
+ {
+ cout << "No Root Element in the document" << endl;
+ AXIOM_OUTPUT_FREE(output, the_env);
+ return;
+ }
+
+ AXIOM_NODE_SERIALIZE(root_node, the_env, output);
+
+ axis2_char_t* buffer = (axis2_char_t*)AXIOM_XML_WRITER_GET_XML(writer, the_env);
+
+ printf("Output XML:n %s ", buffer);
+
+ AXIOM_OUTPUT_FREE(output, the_env);
+
+ return;
+ }
+ }
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.h
new file mode 100644
index 0000000000..631c1c9437
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom.h
@@ -0,0 +1,85 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef _SDO_AXIOM_H_
+#define _SDO_AXIOM_H_
+
+#include "sdo_axiom_export.h"
+
+#include "axiom.h"
+//#include "axis2_om_document.h"
+//#include "axis2_om_stax_builder.h"
+
+
+#include "commonj/sdo/SDO.h"
+
+using namespace commonj::sdo;
+
+namespace commonj
+{
+ namespace sdo_axiom
+ {
+
+/**
+ * AxiomHelper writes a data object tree to XML
+ */
+ class AxiomHelper
+ {
+
+ public:
+
+ SDO_AXIOM_API AxiomHelper();
+
+ SDO_AXIOM_API virtual ~AxiomHelper();
+
+ SDO_AXIOM_API static AxiomHelper* getHelper();
+
+ SDO_AXIOM_API static void releaseHelper(AxiomHelper* ax);
+
+ SDO_AXIOM_API axiom_document_t* toAxiomDoc(DataObjectPtr dob);
+ SDO_AXIOM_API axiom_node_t* toAxiomNode(DataObjectPtr dob);
+
+ SDO_AXIOM_API DataObjectPtr toSdo(axiom_document_t* doc,DataFactoryPtr factory);
+ SDO_AXIOM_API DataObjectPtr toSdo(axiom_node_t* root_node,DataFactoryPtr factory);
+
+ SDO_AXIOM_API axis2_env_t* getEnv();
+
+ SDO_AXIOM_API void output(axiom_document_t* document);
+
+
+ protected:
+ private:
+
+ void deleteEnv();
+
+ void createEnv();
+
+ static int axiswritercount;
+
+ axis2_env_t *the_env;
+ axis2_allocator_t *the_allocator;
+
+
+
+ };
+ } // End - namespace sdo_axiom
+} // End - namespace commonj
+
+
+#endif //_SDO_AXIOM_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom_export.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom_export.h
new file mode 100644
index 0000000000..70d6b813f7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom/sdo_axiom_export.h
@@ -0,0 +1,37 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+
+#ifdef WIN32
+
+#ifdef SDO_AXIOM_EXPORTS
+# define SDO_AXIOM_API __declspec(dllexport)
+# define SDO_AXIOM_EXPIMP
+#else
+# define SDO_AXIOM_API __declspec(dllimport)
+# define SDO_AXIOM_EXPIMP extern
+#endif
+
+#else
+
+# define SDO_AXIOM_API
+# define SDO_AXIOM_EXPIMP
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/Makefile.am
new file mode 100644
index 0000000000..69acb6e9da
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/Makefile.am
@@ -0,0 +1,23 @@
+prgbindir=$(prefix)/bin/test
+prgbin_PROGRAMS = tuscany_sdo_axiom_test
+SUBDIRS =
+AM_CPPFLAGS = $(CPPFLAGS)
+tuscany_sdo_axiom_test_SOURCES = sdo_axiom_test.cpp
+
+noinst_HEADERS=*.h
+
+tuscany_sdo_axiom_test_LDADD = \
+ -L$(top_builddir)/runtime/core/src/commonj/sdo -ltuscany_sdo \
+ -L$(top_builddir)/runtime/core/sdo_axiom -ltuscany_sdo_axiom \
+ -L${LIBXML2_LIB} -lxml2 \
+ -L$(AXIS2C_HOME)/lib \
+ -laxis2_util \
+ -laxis2_axiom \
+ -laxis2_parser \
+ -laxis2_minizip
+
+INCLUDES = -I$(top_builddir)/runtime/core/sdo_axiom_test \
+ -I$(top_builddir)/runtime/core/src \
+ -I$(top_builddir)/runtime/core/sdo_axiom \
+ -I${AXIS2C_HOME}/include
+ \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.cpp
new file mode 100644
index 0000000000..31d4e2b029
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.cpp
@@ -0,0 +1,132 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: main.cpp,v 1.1 2006/03/16 10:54:16 slattery Exp $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+
+#include "sdo_axiom_test.h"
+
+
+void axiomtest::axiom_test()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+
+ mdg->addType("myspace","Department");
+
+ mdg->addType("myspace","Employee");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","norbert",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr company = mdg->create((Type&)tcc);
+ company->setCString("name","The VDB Company Inc");
+ company->setCString("norbert","Spandex Courvette");
+
+
+ DataObjectPtr dept1 = company->createDataObject("departments");
+ dept1->setCString("name","Accounts");
+
+ DataObjectPtr dept2 = company->createDataObject("departments");
+ dept2->setCString("name","Billing");
+
+ DataObjectPtr emp1 = dept1->createDataObject("employees");
+ emp1->setCString("name","Albert");
+
+ DataObjectPtr emp2 = dept1->createDataObject("employees");
+ emp2->setCString("name","Ben");
+
+ DataObjectPtr emp3 = dept2->createDataObject("employees");
+ emp3->setCString("name","Cyril");
+
+ DataObjectPtr emp4 = dept2->createDataObject("employees");
+ emp4->setCString("name","Dominic");
+
+ AxiomHelper* ax = AxiomHelper::getHelper();
+
+ if (ax)
+ {
+ axiom_document_t* doc = ax->toAxiomDoc(company);
+
+ if (doc)
+ {
+ ax->output(doc);
+
+ DataObjectPtr newdob = ax->toSdo(doc,mdg);
+
+ if (newdob)
+ {
+ cout << "Printing first data object..." << endl;
+ SDOUtils::printDataObject(cout,newdob);
+ cout << "Finished" << endl;
+ }
+
+ axiom_node_t* node =
+ AXIOM_DOCUMENT_GET_ROOT_ELEMENT(doc, ax->getEnv());
+
+
+ DataObjectPtr newdob2 = ax->toSdo(node,mdg);
+
+ if (newdob2)
+ {
+ cout << "Printing second data object..." << endl;
+ SDOUtils::printDataObject(cout,newdob2);
+ cout << "Finished" << endl;
+ }
+
+
+ }
+
+ }
+
+ return;
+
+}
+
+extern "C"{
+
+int main (int argc, char** argv)
+{
+ axiomtest::axiom_test();
+ return 0;
+}
+
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.h
new file mode 100644
index 0000000000..d4756546b7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/sdo_axiom_test/sdo_axiom_test.h
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: sdotest.h,v 1.21 2006/03/16 12:21:04 slattery Exp $ */
+
+#include "sdo_axiom.h"
+#include "commonj/sdo/SDO.h"
+
+
+using namespace commonj::sdo;
+using namespace commonj::sdo_axiom;
+using namespace std;
+
+
+
+// test
+
+class axiomtest {
+ public:
+
+ static void axiom_test();
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtbuild b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtbuild
new file mode 100644
index 0000000000..7c9117ffae
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtbuild
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 3.0.0?>
+
+<ManagedProjectBuildInfo>
+<project id="tuscany_sdo.cdt.managedbuild.target.gnu.so.1649887895" name="Shared Library (Gnu)" projectType="cdt.managedbuild.target.gnu.so">
+<configuration artifactExtension="so" artifactName="tuscany_sdo" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.so.debug.804736841" name="Debug" parent="cdt.managedbuild.config.gnu.so.debug">
+<toolChain id="cdt.managedbuild.toolchain.gnu.so.debug.853581152" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.so.debug">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.so.debug.1430134894" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.so.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.so.debug.1021362517" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.so.debug">
+<option id="gnu.cpp.compiler.option.preprocessor.def.2069673202" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+<listOptionValue builtIn="false" value="_DEBUG"/>
+</option>
+<option id="gnu.cpp.compiler.option.include.paths.1923756814" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${project_loc}"/>
+<listOptionValue builtIn="false" value="${LIBXML2_INCLUDE}"/>
+</option>
+<option id="gnu.cpp.compiler.option.warnings.allwarn.1941506556" superClass="gnu.cpp.compiler.option.warnings.allwarn" value="false" valueType="boolean"/>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.so.debug.1367539588" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.so.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.so.debug.2094383123" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.so.debug"/>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.so.debug.662724583" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.so.debug"/>
+<macros/>
+</toolChain>
+</configuration>
+<configuration artifactExtension="so" artifactName="tuscany_sdo" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.so.release.1588435275" name="Release" parent="cdt.managedbuild.config.gnu.so.release">
+<toolChain id="cdt.managedbuild.toolchain.gnu.so.release.1916451262" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.so.release">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.so.release.994589200" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.so.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.so.release.1429553177" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.so.release">
+<option id="gnu.cpp.compiler.option.include.paths.1557660473" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${project_loc}"/>
+<listOptionValue builtIn="false" value="/usr/include/libxml2"/>
+</option>
+<option id="gnu.cpp.compiler.option.warnings.allwarn.687619026" superClass="gnu.cpp.compiler.option.warnings.allwarn" value="false" valueType="boolean"/>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.so.release.316500641" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.so.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.so.release.1432920590" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.so.release"/>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.so.release.1095309957" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.so.release"/>
+<macros/>
+</toolChain>
+</configuration>
+<macros/>
+</project>
+</ManagedProjectBuildInfo>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtproject b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtproject
new file mode 100644
index 0000000000..48a12e6664
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.cdtproject
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject id="org.eclipse.cdt.managedbuilder.core.managedMake">
+<extension id="org.eclipse.cdt.managedbuilder.core.ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
+<data>
+<item id="org.eclipse.cdt.core.pathentry">
+<pathentry kind="src" path=""/>
+<pathentry kind="out" path=""/>
+<pathentry kind="con" path="org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER"/>
+</item>
+</data>
+</cdtproject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.project b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.project
new file mode 100644
index 0000000000..a24e25672e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tuscany_sdo</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ </natures>
+</projectDescription>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000000..37a23c6dd7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,9 @@
+#Wed Feb 15 15:54:27 GMT 2006
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.so.debug.804736841=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.so.release.1588435275=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.so.debug.804736841=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.so.release.1588435275=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.so.debug.804736841=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="" name\="LIBXML2_INCLUDE" operation\="replace" value\="/usr/include/libxml2"/>\n</environment>\n
+environment/project/cdt.managedbuild.config.gnu.so.release.1588435275=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="" name\="LIBXML2_INCLUDE" operation\="replace" value\="/usr/include/libxml2"/>\n</environment>\n
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/Makefile.am
new file mode 100644
index 0000000000..b24de0f89f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/Makefile.am
@@ -0,0 +1,4 @@
+SUBDIRS = commonj
+
+nobase_include_HEADERS = \
+commonj/sdo/*.h \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/Makefile.am
new file mode 100644
index 0000000000..82055487b0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/Makefile.am
@@ -0,0 +1 @@
+SUBDIRS = sdo
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.cpp
new file mode 100644
index 0000000000..42e45603ce
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.cpp
@@ -0,0 +1,28 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/Logger.h"
+
+#include "commonj/sdo/ChangeSummary.h"
+namespace commonj{
+namespace sdo{
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.h
new file mode 100644
index 0000000000..01929ce311
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummary.h
@@ -0,0 +1,207 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _CHANGESUMMARY_H_
+#define _CHANGESUMMARY_H_
+#include "commonj/sdo/export.h"
+
+
+#include "commonj/sdo/SettingList.h"
+#include "commonj/sdo/ChangedDataObjectList.h"
+
+
+namespace commonj{
+namespace sdo {
+
+ /**
+ *
+ * A change summary is used to record changes to the objects in a data graph.
+ * This allows applications to efficiently and incrementally update
+ * back-end storage when required.
+ */
+
+ class ChangeSummary
+ {
+ public:
+
+ /** getChangedDataObjects() returns a list of changed objects.
+ *
+ * The new and modified objects in the list are references to objects that
+ * are associated with this change summary.
+ * The deleted objects in the list are references to copies of the objects
+ * as they appeared at the time that event logging was enabled;
+ * if the deleted objects have references to other objects,
+ * the references will also refer to copies of the target objects.
+ * Return a list of changed data objects.
+ */
+
+ virtual SDO_API ChangedDataObjectList& getChangedDataObjects() = 0;
+
+
+ /** getOldValues returns a list of old values as settings.
+ *
+ * Returns a list of Settings
+ * that represent the property values of the given dataObject
+ * at the point when logging began.
+ * In the case of a deleted object,
+ * the list will include Settings for all the properties.
+ * An old value Setting indicates the value at the
+ * point logging begins. A setting is only produced for
+ * modified objects if either the old value differs from the current value or
+ * if the isSet differs from the current value.
+ * No Settings are produced for created objects.
+ * Param dataObject the object in question.
+ * Return a list of settings.
+ */
+
+ virtual SDO_API SettingList& getOldValues(DataObjectPtr dataObject) = 0;
+
+ /** getOldXpath returns the old path before the setting.
+ *
+ * Returns a path where the object was located before the setting took place.
+ */
+
+
+ virtual SDO_API const char* getOldXpath(RefCountingPointer<commonj::sdo::DataObject> dol) = 0;
+
+ /** beginLogging() sets the change summary in logging mode.
+ *
+ * The change summary is initially inactive. Setting it to logging mode
+ * starts the process of recording all the settings made.
+ */
+
+ virtual SDO_API void beginLogging() = 0;
+
+ /** endLogging() stops logging.
+ *
+ * This method stops logging, but does not clear out the change summary.
+ * The changes are valid until the summary is next set to logging, at which time
+ * all old settings are lost.
+ */
+
+ virtual SDO_API void endLogging() = 0;
+
+
+
+ /** isLogging() returns true if logging is enabled.
+ *
+ * Indicates whether change logging is on (true) or off (false).
+ */
+
+ virtual SDO_API bool isLogging() = 0;
+
+
+
+ /** isCreated() returns true if the object was created during logging.
+ *
+ * Returns whether or not the specified data object was created while logging.
+ * Any object that was added to the data graph
+ * but was not in the data graph when logging began,
+ * will be considered created.
+ * Param dataObject the data object in question.
+ * Return true if the specified data object was created.
+ */
+
+ virtual SDO_API bool isCreated(DataObjectPtr dataObject) = 0;
+
+ /** isDeleted() - true if the object was deleted during logging.
+ *
+ * Returns whether or not the specified data object was deleted while logging.
+ * Any object that is not contained by the data graph will be considered
+ * deleted.
+ * Param dataObject the data object in question.
+ * Return true if the specified data object was deleted.
+ */
+
+ virtual SDO_API bool isDeleted(DataObjectPtr dataObject) = 0;
+
+
+ /** isModified() - true if the object was changed during logging.
+ *
+ * Returns whether or not the specified data object was updated while logging.
+ * An object that was contained in the data graph when logging began,
+ * and remains in the graph when logging ends will be considered for changes.
+ * An object considered modified must have at least one old value Setting.
+ * Param dataObject the data object in question.
+ * Return true if the specified data object was modified.
+ */
+
+ virtual SDO_API bool isModified(DataObjectPtr dataObject) = 0;
+
+ /** getOldValue() gets the setting showing the old value.
+ *
+ * Returns a setting for the specified property
+ * representing the property value of the given dataObject
+ * at the point when logging began.
+ * Returns null if the property has not changed and
+ * has not been deleted.
+ * Param dataObject the object in question.
+ * Param property the property of the object.
+ * Return the Setting for the specified property.
+ */
+
+ virtual SDO_API const Setting& getOldValue(DataObjectPtr dataObject, const Property& property) = 0;
+
+ /** getOldContainer() gets the container before the setting.
+ *
+ * Returns the value of the container data object
+ * at the point when logging began.
+ * Param dataObject the object in question.
+ * Return the old container data object.
+ */
+
+ virtual SDO_API DataObjectPtr getOldContainer(DataObjectPtr dataObject) = 0;
+
+ /** getOldContainmentProperty() - gives the property before setting.
+ *
+ * Returns the value of the containment property data object property
+ * at the point when logging began.
+ * Param dataObject the object in question.
+ * Return the old containment property.
+ */
+
+ virtual SDO_API const Property& getOldContainmentProperty(DataObjectPtr dataObject) = 0;
+
+ /** undoChanges() - Not Implemented.
+ *
+ * NOT IMPLEMENTED
+ *
+ * Undoes all changes in the log to restore the tree of
+ * DataObjects to its original state when logging began.
+ * isLogging() is unchanged. The log is cleared.
+ */
+
+ virtual SDO_API void undoChanges() = 0;
+
+ /** getOldSequence() - Not Implemented.
+ *
+ * NOT IMPLEMENTED
+ *
+ * This method gives back the sequence of a data object as it
+ * appeared when logging was switched on. The data object may be
+ * a deleted data object or a changed data object. If the
+ * data object was not sequenced, this returns null.
+ */
+
+ virtual SDO_API SequencePtr getOldSequence(DataObjectPtr dataObject) = 0;
+
+};
+};
+};
+#endif //_CHANGESUMMARY_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.cpp
new file mode 100644
index 0000000000..46146d0045
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.cpp
@@ -0,0 +1,1144 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/ChangeSummaryBuilder.h"
+
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/ChangeSummary.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include "commonj/sdo/XMLQName.h"
+#include "commonj/sdo/DASProperty.h"
+#include "commonj/sdo/Logging.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+// ========================================================================
+// Constructor/Destructor
+// ========================================================================
+
+ ChangeSummaryBuilder::ChangeSummaryBuilder(
+ DataFactoryPtr df,
+ DataObjectPtr& rootDO)
+
+ : dataFactory(df),
+ rootDataObject(rootDO)
+
+
+ {
+ LOGINFO(INFO,"CSBuilder constructor");
+ currentState = baseState;
+ }
+
+ ChangeSummaryBuilder::~ChangeSummaryBuilder()
+ {
+ LOGINFO(INFO,"CSBuilder destructor");
+ }
+
+
+// ========================================================================
+// Deletion handling
+// ========================================================================
+
+ void ChangeSummaryBuilder::populateDeletion(ChangeSummaryImpl* csi,DataObjectPtr dob,
+ int currentIndex)
+ {
+ LOGENTRY(INFO,"CSBuilder populateDeletion");
+ try {
+
+ std::list<deletionAttribute>::iterator attributesiter;
+ std::list<deletionElement>::iterator elementsiter;
+
+ for (attributesiter= deletions[currentIndex].attributes.begin();
+ attributesiter!= deletions[currentIndex].attributes.end();
+ ++attributesiter)
+ {
+
+ LOGINFO_1(INFO,"CSBuilder Populate deletion attribute:%s",
+ (const char*)((*attributesiter).name));
+
+ dob->setCString((const char*)((*attributesiter).name),
+ (const char*)((*attributesiter).value));
+ }
+ for (elementsiter= deletions[currentIndex].elements.begin();
+ elementsiter!= deletions[currentIndex].elements.end();
+ ++elementsiter)
+ {
+
+ LOGINFO_1(INFO,"CSBuilder:Populate deletion element:%s",
+ (const char*)((*elementsiter).name));
+
+ SDOXMLString value = (*elementsiter).value;
+ SDOXMLString prop = (*elementsiter).name;
+
+ if ((*elementsiter).isDeletion)
+ {
+ for (int i = 0; i < deletions.size(); i++)
+ {
+ if (value.equals (deletions[i].reference))
+ {
+ if (deletions[i].dob == 0)
+ {
+ handleDeletion(csi,i,dob,(*elementsiter).value,
+ (*elementsiter).name);
+ }
+ // dob may have been set by the line above.
+ if (deletions[i].dob != 0)
+ {
+ DataObjectList& dli = dob->getList(prop);
+ dli.insert(0,deletions[i].dob);
+ }
+ break;
+ }
+ }
+ }
+ else
+ {
+ DataObjectList& dli = dob->getList(prop);
+ dli.append((const char*)value);
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ LOGSDOEXCEPTION(ERROR,"Error populating a deletion record",e);
+ }
+ LOGEXIT(INFO,"CSBuilder populateDeletion");
+ return;
+ }
+
+
+// ========================================================================
+// Deletion handling
+// ========================================================================
+
+ void ChangeSummaryBuilder::handleDeletion(
+ ChangeSummaryImpl* csi,
+ int currentIndex,
+ DataObjectPtr cont,
+ SDOXMLString path,
+ SDOXMLString prop)
+ {
+ LOGENTRY(INFO,"CSBuilder handleDeletion(2)");
+
+ if (deletions[currentIndex].completedprocessing)
+ {
+ LOGEXIT(INFO,"CSBuilder handleDeletion(2) - Exit1");
+ return;
+ }
+
+ const Property& p = cont->getProperty(prop);
+ DataObjectPtr dob = dataFactory->create(
+ p.getType());
+ populateDeletion(csi,dob,currentIndex);
+ deletions[currentIndex].dob = dob;
+ deletions[currentIndex].completedprocessing=true;
+ csi->appendToDeletions(p,dob,cont,path);
+
+ LOGEXIT(INFO,"CSBuilder handleDeletion(2) - Exit2");
+
+ return;
+ }
+
+// ========================================================================
+// Deletion handling
+// ========================================================================
+
+ void ChangeSummaryBuilder::handleDeletion(
+ ChangeSummaryImpl* csi,
+ int currentIndex,
+ SDOXMLString path)
+ {
+
+ // find the original container - and see if it
+ // still exists.
+ // supposing the container doesnt exist, we need
+ // to process the deletion of that one first, or
+ // locate it in the already deleted elements.
+
+ LOGENTRY(INFO,"CSBuilder:handleDeletion");
+
+ if (deletions[currentIndex].completedprocessing)
+ {
+ LOGEXIT(INFO,"CSBuilder:handleDeletion - Exit1");
+ return;
+ }
+
+ int index = path.lastIndexOf('/');
+ if (index < 0)
+ {
+ LOGERROR(WARNING,"CSBuilder logs deletion of the root object - not possible");
+ LOGEXIT(INFO,"CSBuilder:handleDeletion - Exit2");
+ return;
+ }
+
+ SDOXMLString prop =
+ path.substring(index+1);
+ SDOXMLString contpath =
+ path.substring(0,index);
+
+ index = prop.lastIndexOf('.');
+ if (index >= 0) prop = prop.substring(0,index);
+
+ index = prop.lastIndexOf('[');
+ if (index >= 0) prop = prop.substring(0,index);
+
+ DataObjectPtr cont;
+
+ if (contpath.isNull())
+ {
+ cont = rootDataObject;
+
+ LOGINFO_1(INFO,"Handling deletion from root of %s",(const char*)prop);
+ }
+ else
+ {
+ try {
+ cont = rootDataObject->getDataObject(contpath);
+ LOGINFO_2(INFO,"Handling deletion from %s of %s",
+ (const char*)contpath,(const char*)prop);
+ }
+ catch (SDORuntimeException e)
+ {
+ cont = 0;
+ LOGINFO(INFO,"Container was a deleted object");
+ }
+ }
+
+ if (cont != 0)
+ {
+ handleDeletion(csi,currentIndex,cont,path,prop);
+ LOGEXIT(INFO,"CSBuilder:handleDeletion - Exit3");
+ return;
+ }
+ else
+ {
+ // this data object was also deleted
+ cont = csi->matchDeletedObject(contpath);
+ if (cont != 0)
+ {
+ // we found a previously deleted object for
+ // the container.
+ handleDeletion(csi,currentIndex,cont,path,prop);
+ LOGEXIT(INFO,"CSBuilder:handleDeletion - Exit4");
+ return;
+ }
+
+ }
+
+ // it could be a deletion which has not been processed yet
+ for (int i = 0; i < deletions.size(); i++)
+ {
+ if (contpath.equals (deletions[i].reference))
+ {
+ // matching deletion found
+ if (i == currentIndex)
+ {
+ LOGERROR(WARNING,"Loop detected in handling deletes");
+ LOGEXIT(INFO,"CSBuilder:handleDeletion - Exit5");
+ return;
+ }
+ // Handle the deletion first
+ handleDeletion(csi,i,contpath);
+ LOGEXIT(INFO,"CSBuilder:handleDeletion - Exit6");
+ return;
+ }
+ }
+ LOGERROR(WARNING,"Failed to find a matching delete ");
+ LOGEXIT(INFO,"CSBuilder:handleDeletion - Exit7");
+ return;
+ }
+
+// ========================================================================
+// Deletion handling
+// ========================================================================
+
+ SDOXMLString ChangeSummaryBuilder::shiftedIndex(int index)
+ {
+ int pos = createDeletes[index].value.lastIndexOf('.');
+ if (pos < 0) return createDeletes[index].value;
+
+ int val = atoi((const char*)(createDeletes[index].
+ value.substring(pos+1)));
+
+ char buf[10];
+
+ sprintf(buf, ".%d", val + createDeletes[index].indexshift);
+
+ return createDeletes[index].value.substring(0,pos) + buf;
+ }
+
+// ========================================================================
+// Deletion handling
+// ========================================================================
+
+ void ChangeSummaryBuilder::shiftIndices(int index, int delta)
+ {
+ int pos = createDeletes[index].value.lastIndexOf('.');
+ if (pos < 0) return;
+
+ SDOXMLString refstring = createDeletes[index].value.substring(0,pos);
+ pos = atoi((const char*)(createDeletes[index].value.substring(pos+1)));
+
+ for (int k=index+1;k<createDeletes.size();k++)
+ {
+
+ if (createDeletes[k].type.equals("create")) continue;
+
+ int pos2 = createDeletes[k].value.lastIndexOf('.');
+ if (pos2 < 0) continue;
+
+ SDOXMLString refto = createDeletes[k].value.substring(0,pos2);
+ pos2 = atoi((const char*)(createDeletes[k].value.substring(pos2+1)));
+
+ if (refstring.equals(refto) && pos2 >= pos)
+ {
+ createDeletes[k].indexshift += delta;
+ }
+ }
+ }
+
+// ========================================================================
+// Rebuilding of a change summary from the lists
+// ========================================================================
+
+ void ChangeSummaryBuilder::buildChangeSummary(
+ DataObjectPtr changeSummaryDO)
+ {
+ LOGENTRY(INFO,"CSBuilder:buildChangeSummary");
+
+ int i;
+
+ try {
+ if (changeSummaryDO == 0)
+ {
+ // there is no summary data object to rebuild
+ LOGEXIT(INFO,"CSBuilder:buildChangeSummary Exit1");
+ return;
+ }
+ ChangeSummary* cs = changeSummaryDO->getChangeSummary();
+ if (cs == 0)
+ {
+ // there is no change summary - this shouldnt happen
+ LOGEXIT(INFO,"CSBuilder:buildChangeSummary Exit2");
+ return;
+ }
+
+ ChangeSummaryImpl* csi = (ChangeSummaryImpl*)cs;
+
+ // add the creations and deletions in order
+
+ for (i = 0; i < createDeletes.size(); i++)
+ {
+
+ LOGINFO_1(INFO,"CSBuilder:create/delete:%s",
+ (const char*)(createDeletes[i].value));
+
+ SDOXMLString thispath;
+
+ if (createDeletes[i].indexshift != 0)
+ {
+ thispath = shiftedIndex(i);
+ }
+ else
+ {
+ thispath = createDeletes[i].value;
+ }
+
+ if (!createDeletes[i].type.equals("delete"))
+ {
+ DataObjectPtr dob;
+ if (thispath.isNull())
+ {
+ dob = rootDataObject;
+ }
+ else
+ {
+ dob = rootDataObject->getDataObject(thispath);
+ }
+ if (dob != 0) {
+
+ LOGINFO(INFO,"CSBuilder:add create to change summary");
+
+ csi->appendToCreations(dob->getContainmentProperty(),
+ dob, dob->getContainer());
+ shiftIndices(i,-1);
+ }
+ else
+ {
+ LOGERROR_1(WARNING,"Failed to find object at %s",
+ (const char*)createDeletes[i].value);
+ }
+ }
+ else
+ {
+ // its a deletion - match it.
+ for (int j = 0; j < deletions.size(); j++)
+ {
+ if (deletions[j].completedprocessing)continue;
+
+ if (thispath.equals (deletions[j].reference))
+ {
+ // matching deletion found
+ LOGINFO_1(INFO,"CSBuilder:matched delete:%s",
+ (const char*)deletions[j].reference);
+
+ handleDeletion(csi, j,createDeletes[i].value);
+ // update the path on any higher items in the current
+ // many-valued property.
+ shiftIndices(i,1);
+
+ break;
+ }
+ }
+ }
+ }
+
+ // add the changes
+
+ std::list<changeAttribute>::iterator a;
+ std::list<changeElement>::iterator e;
+
+ for (i = 0; i< changes.size(); i++)
+ {
+ DataObjectPtr dob;
+ if (changes[i].reference.isNull())
+ {
+ dob = rootDataObject;
+ }
+ else
+ {
+ dob = rootDataObject->getDataObject(changes[i].reference);
+ }
+ if (dob != 0)
+ {
+ LOGINFO_1(INFO,"Located a change at %s",
+ (const char*)changes[i].reference);
+
+ // Need to get the changelogitem, and append settings to
+ // it.Append attributes
+
+ for (a=changes[i].attributes.begin();
+ a != changes[i].attributes.end();++a)
+ {
+ const Property& p = dob->getProperty((const char*)((*a).name));
+ if (p.getType().isDataType())
+ {
+ csi->appendToChanges(
+ p,dob,(*a).value,0);
+ }
+ else
+ {
+ for (int j = 0; j < deletions.size(); j++)
+ {
+ if ((*a).value.equals (deletions[j].reference))
+ {
+ csi->appendToChanges(
+ p,dob,deletions[j].dob,0);
+ break;
+ }
+ }
+ }
+ }
+ for (e=changes[i].elements.begin();
+ e != changes[i].elements.end();++e)
+ {
+ const Property& p = dob->getProperty
+ ((const char*)((*e).name));
+ if ((*e).isDeletion)
+ {
+
+ LOGINFO_1(INFO,"CSBuilder Change was a deletion of:%s",
+ (const char*)((*e).path));
+
+ for (int j = 0; j < deletions.size(); j++)
+ {
+ if ((*e).path.equals (deletions[j].reference))
+ {
+ // matching deletion found
+ if (deletions[j].dob != 0)
+ {
+ csi->appendToChanges(
+ p,dob,deletions[j].dob,(*e).index);
+ }
+ break;
+ }
+ }
+ }
+ else if ((*e).isReference)
+ {
+ LOGINFO_2(INFO,"CSBuilder:Change was a reference from:%s to %s" ,
+ (const char*)((*e).path),
+ (const char*)((*e).value));
+
+ DataObjectPtr pdob = rootDataObject->getDataObject((*e).value);
+ if (pdob != 0)
+ {
+ csi->appendToChanges(p,dob,pdob,(*e).index);
+ }
+ }
+ else
+ {
+ LOGINFO_1(INFO,"CSBuilder:Change was a many valued item:%s" ,
+ (const char*)((*e).name));
+
+ csi->appendToChanges(p,dob,(*e).value,(*e).index);
+ }
+
+ }
+ }
+ else
+ {
+ LOGERROR_1(WARNING,"CSBuilder:Failed to find object at %s",
+ (const char*)(changes[i].reference));
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ LOGSDOEXCEPTION(ERROR,"CSBuilder:Error rebuilding change summary",e);
+ }
+ LOGEXIT(INFO,"CSBuilder:buildChangeSummary Exit3");
+ }
+
+// ========================================================================
+// Parsing code
+// ========================================================================
+
+ void ChangeSummaryBuilder::processStart(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ char cbuf[32];
+ int i;
+
+ LOGENTRY(INFO,"CSBuilder:processStart");
+
+ if (currentState == baseState)
+ {
+ if (localname.equalsIgnoreCase("create") ||
+ localname.equalsIgnoreCase("delete"))
+ {
+ currentState = dealingWithCreateDelete;
+ // will be expecting a chars message to give the
+ // contents
+
+ createDeletes.insert(
+ createDeletes.end(),createDelete(localname));
+
+ LOGINFO_1(INFO,"CSBuilder: Processing a %s",(const char*)localname);
+ LOGEXIT(INFO,"CSBuilder:processStart Exit1");
+ return;
+ }
+ else
+ {
+ // we are starting a new change record here
+ currentState = dealingWithChange;
+
+ // we expect the entry to have an sdo:ref, and possibly
+ // some attributes for the changed single-values
+ SDOXMLString ref = attributes.getValue("ref");
+
+ if (ref.isNull())
+ {
+ LOGERROR(INFO,"CSBuilder:Problem with change reference");
+ ref = SDOXMLString("Unknown");
+ }
+
+ currentChange = change(localname, ref);
+
+ LOGINFO_2(INFO,"CSBuilder: Processing a change:%s:%s",
+ (const char*)localname,
+ (const char*)ref);
+
+ currentLocation.clear();
+
+ if (ref.equals("#/"))
+ {
+ ref = SDOXMLString("#");
+ }
+
+ currentLocation.push_back(ref);
+
+ // clear out the change state - if there was any.
+
+ changeIndex = 0;
+ previousChange = SDOXMLString("");
+
+ // now insert any remaining attributes of this change
+
+ for (i=0; i < attributes.size(); i++)
+ {
+ // push all the attributes into the change record.
+ SDOXMLString name = attributes[i].getName();
+ if (!name.equalsIgnoreCase("ref"))
+ {
+ SDOXMLString value = attributes[i].getValue();
+ currentChange.addAttribute(
+ changeAttribute(name,value));
+ }
+ }
+ }
+ LOGEXIT(INFO,"CSBuilder:processStart Exit2");
+ return;
+ }
+
+ // We are not in the base state - we could be in a change or a deletion
+ // We are now dropping into an element, which could be either a many-valued
+ // primitive type, or a placeholder in list of deletions, or a deletion
+ // record.
+
+ if (currentState == dealingWithChange)
+ {
+
+ if (!previousChange.equals(localname))
+ {
+ changeIndex = 0;
+ previousChange = localname;
+ }
+ else
+ {
+ changeIndex++;
+ }
+
+
+ sprintf(cbuf,"%d",changeIndex);
+ currentLocation.push_back(localname + "." + cbuf);
+
+ // build the current location...
+ SDOXMLString curr_loc = "";
+
+ if (currentLocation.size() > 0)
+ {
+ for (int pi = 0; pi < currentLocation.size()-1; pi++)
+ {
+ curr_loc = curr_loc + currentLocation[pi];
+ curr_loc = curr_loc + "/";
+ }
+ curr_loc = curr_loc + currentLocation[currentLocation.size()-1];
+ }
+
+ LOGINFO_1(INFO,"CSBuilder: Dropping into an element of a change:%s",
+ (const char*)localname);
+ LOGINFO_1(INFO,"CSBuilder:currentLocation:%s",
+ (const char*)curr_loc);
+
+ // First case - its a placeholder for an element in a list
+ // all we have to do is keep track of the list index.
+
+ if (attributes.size() == 1)
+ {
+ SDOXMLString name = attributes[0].getName();
+ if (name.equalsIgnoreCase("ref"))
+ {
+ currentState = dealingWithChangeElement;
+ currentChange.addElement(
+ changeElement(localname, curr_loc,
+ attributes[0].getValue(), true, false));
+
+ LOGEXIT(INFO,"CSBuilder:processStart Exit3");
+ return;
+ }
+ }
+
+ if (attributes.size() == 0)
+ {
+ // It could be a many-valued primitive, or
+ // a deletion with no attributes
+ // can we match the current path to a known deletion?
+
+ bool isDelete = false;
+
+ for (int i = 0; i < createDeletes.size(); i++)
+ {
+ if (createDeletes[i].type.equals("delete"))
+ {
+ if (curr_loc.equals(createDeletes[i].value))
+ {
+ LOGINFO(INFO,"CSBuilder: An existing delete was found");
+
+ isDelete = true;
+ break; // out of the for loop
+ }
+ }
+ }
+ if (!isDelete)
+ {
+ LOGINFO(INFO,"CSBuilder: Change with no atts and not deletion- an element");
+
+ // and will get picked up by the 'characters' method.
+ currentState = dealingWithChangeElement;
+ currentLocalName = SDOXMLString(localname);
+
+ LOGEXIT(INFO,"CSBuilder:processStart Exit4");
+ return;
+ }
+ }
+
+ currentChange.addElement(changeElement(localname, curr_loc, false, true));
+ currentDeletion = deletion(localname, curr_loc);
+
+ LOGINFO_2(INFO,"CSBuilder: Found a deletion:%s:%s",
+ (const char*)localname,
+ (const char*)curr_loc);
+
+
+ // clear out the change state - if there was any.
+ deletionLevel = 0;
+ deletionIndex = 0;
+ previousDeletion = SDOXMLString("");
+
+ currentState = dealingWithDeletion;
+
+ // Now add the attributes if there are any.
+
+ for (int i=0; i < attributes.size(); i++)
+ {
+ // push all the attributes into the deletion record.
+ SDOXMLString name = attributes[i].getName();
+ if (!name.equalsIgnoreCase("ref"))
+ {
+ SDOXMLString value = attributes[i].getValue();
+ currentDeletion.addAttribute(
+ deletionAttribute(name,value));
+ }
+ }
+
+ LOGEXIT(INFO,"CSBuilder:processStart Exit5");
+ return;
+ }
+ if (currentState == dealingWithDeletion)
+ {
+ // we are already in a deletion, and entering an element
+ if (!previousDeletion.equals(localname))
+ {
+ deletionIndex = 0;
+ previousDeletion = localname;
+ }
+ else
+ {
+ deletionIndex++;
+ }
+
+ sprintf(cbuf,"%d",deletionIndex);
+ currentLocation.push_back(localname + "." + cbuf);
+
+ // First case - its a placeholder for an element in a list
+ // all we have to do is keep track of the list index.
+
+ if (attributes.size() == 1)
+ {
+ SDOXMLString name = attributes[0].getName();
+ if (name.equalsIgnoreCase("ref"))
+ {
+ LOGINFO(INFO,"CSBuilder: The element is a reference to an existing entry in a list");
+
+ currentState = dealingWithDeletionElement;
+
+ LOGEXIT(INFO,"CSBuilder:processStart Exit6");
+ return;
+ }
+ }
+
+ SDOXMLString curr_loc = "";
+ if (currentLocation.size() > 0)
+ {
+ for (int pi = 0; pi < currentLocation.size()-1; pi++)
+ {
+ curr_loc = curr_loc + currentLocation[pi];
+ curr_loc = curr_loc + "/";
+ }
+ curr_loc = curr_loc + currentLocation[currentLocation.size()-1];
+ }
+
+ if (attributes.size() == 0)
+ {
+ // It could be a many-valued primitive, or
+ // a deletion with no attributes
+ // can we match the current path to a known deletion?
+ bool isDelete = false;
+
+ for (int i = 0; i < createDeletes.size(); i++)
+ {
+ if (createDeletes[i].type.equals("delete"))
+ {
+ if (curr_loc.equals(createDeletes[i].value))
+ {
+ LOGINFO(INFO,"CSBuilder: An existing delete was found - its a delete");
+
+ isDelete = true;
+ break; // out of the for loop
+ }
+ }
+ }
+ if (!isDelete)
+ {
+ LOGINFO(INFO,"CSBuilder: Found a change with no atts, and no deletion matches - its an element");
+
+ // and will get picked up by the 'characters' method.
+ currentState = dealingWithDeletionElement;
+
+ LOGEXIT(INFO,"CSBuilder:processStart Exit7");
+ return;
+ }
+ }
+
+
+ // We are starting a new deletion record
+
+ LOGINFO_2(INFO,"CSBuilder: Found a deletion within a deletion:%s:%s",
+ (const char*)localname, (const char*)curr_loc);
+
+ deletionList.push_back(deletionListElement(currentDeletion,deletionIndex,
+ previousDeletion));
+
+ currentDeletion = deletion(localname, curr_loc);
+
+ // we are in a nested delete - so record the level such that we can pop state
+ // from the deletionList on coming back out of this.
+
+ deletionLevel++;
+ //deletionIndex = 0;
+ previousDeletion = SDOXMLString("");
+
+ currentState = dealingWithDeletion;
+
+ // Now add the attributes if there are any.
+
+ for (int i=0; i < attributes.size(); i++)
+ {
+ // push all the attributes into the deletion record.
+ SDOXMLString name = attributes[i].getName();
+ if (!name.equalsIgnoreCase("ref"))
+ {
+ SDOXMLString value = attributes[i].getValue();
+ currentDeletion.addAttribute(
+ deletionAttribute(name,value));
+ }
+ }
+
+ LOGEXIT(INFO,"CSBuilder:processStart Exit8");
+ return;
+
+ }
+ }
+
+// ========================================================================
+// Parser ends an element
+// ========================================================================
+
+ void ChangeSummaryBuilder::processEnd(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI)
+ {
+
+ LOGENTRY(INFO,"CSBuilder:processEnd");
+
+ if (currentState == dealingWithCreateDelete)
+ {
+ // its already been completed by the characters message
+ currentState = baseState;
+ LOGEXIT(INFO,"CSBuilder:processEnd Exit1");
+ return;
+ }
+ else if (currentState == dealingWithChangeElement)
+ {
+ // its already been completed by the characters message
+ currentState = dealingWithChange;
+ currentLocation.pop_back();
+ LOGEXIT(INFO,"CSBuilder:processEnd Exit2");
+ return;
+ }
+ else if (currentState == dealingWithDeletionElement)
+ {
+ // its already been completed by the characters message
+ currentState = dealingWithDeletion;
+ currentLocation.pop_back();
+ LOGEXIT(INFO,"CSBuilder:processEnd Exit3");
+ return;
+ }
+ else if (currentState == dealingWithChange)
+ {
+ // we should have finished, there are no nested changes
+ currentState = baseState;
+ changes.insert(changes.end(),currentChange);
+ currentLocation.clear();
+ LOGEXIT(INFO,"CSBuilder:processEnd Exit4");
+ return;
+ }
+ else if (currentState == dealingWithDeletion)
+ {
+ currentLocation.pop_back();
+ deletions.insert(deletions.end(),currentDeletion);
+ if (deletionLevel > 0)
+ {
+ deletionLevel--;
+ if (deletionList.size() > 0)
+ {
+ int index = deletionIndex;
+ SDOXMLString path = currentDeletion.reference;
+ SDOXMLString name = currentDeletion.name;
+
+ deletionListElement dl = deletionList[deletionList.size()-1];
+ currentDeletion = dl.del;
+ deletionIndex = dl.index;
+ previousDeletion = dl.previous;
+ deletionList.pop_back();
+ // and insert the inside deletion in the outside one.
+ currentDeletion.insertElement(deletionElement(
+ name, path,index));
+ }
+
+ LOGEXIT(INFO,"CSBuilder:processEnd Exit5");
+ return;
+ }
+ else
+ {
+ currentState = dealingWithChange;
+
+ LOGEXIT(INFO,"CSBuilder:processEnd Exit6");
+ return;
+ }
+ }
+ }
+
+// ========================================================================
+// Parse characters
+// ========================================================================
+
+
+ void ChangeSummaryBuilder::processChars(
+ const SDOXMLString& chars)
+ {
+ LOGENTRY(INFO,"CSBuilder:processChars");
+
+ if (currentState == dealingWithCreateDelete)
+ {
+ // this is text within a create/delete indicating the
+ // value of the item deleted/created.
+ if (createDeletes.size() > 0)
+ {
+ createDeletes[createDeletes.size()-1].value = chars;
+ LOGINFO_1(INFO,"CSBuilder:characters create/delete:%s",
+ (const char*)chars);
+ }
+ LOGEXIT(INFO,"CSBuilder:processChars Exit1");
+ return;
+ }
+ else if (currentState == dealingWithChangeElement)
+ {
+ changeElement ce = changeElement(currentLocalName, previousChange, false, false);
+ ce.value = chars;
+ ce.index = changeIndex;
+ currentChange.addElement(ce);
+
+ LOGINFO_1(INFO,"CSBuilder: Characters in a change element:%s",
+ (const char *)chars);
+
+ LOGEXIT(INFO,"CSBuilder:processChars Exit2");
+ return;
+ }
+ else if (currentState == dealingWithDeletionElement)
+ {
+ deletionElement ce = deletionElement(previousDeletion);
+ ce.value = chars;
+ ce.index = deletionIndex;
+ currentDeletion.addElement(ce);
+
+ LOGINFO_1(INFO,"CSBuilder: Characters in a deletion element:%s",
+ (const char *)chars);
+
+ LOGEXIT(INFO,"CSBuilder:processChars Exit3");
+ return;
+ }
+
+ LOGINFO_1(INFO,"CSBuilder: Characters in nothing!!:%s",
+ (const char *)chars);
+ LOGEXIT(INFO,"CSBuilder:processChars Exit4");
+ }
+
+
+// ========================================================================
+// Classes holding temporary parsed information
+// ========================================================================
+
+
+ /////////////////////////////////////////////////
+ // An element in the list of creates/deletes
+ /////////////////////////////////////////////////
+
+ createDelete::createDelete()
+ {
+ }
+
+ createDelete::createDelete(SDOXMLString intype) :
+ type(intype)
+ {
+ indexshift = 0;
+ }
+
+ createDelete::~createDelete()
+ {
+ }
+
+ /////////////////////////////////////////////////
+ // An element in the list of changes
+ /////////////////////////////////////////////////
+
+ changeAttribute::changeAttribute()
+ {
+ }
+
+ changeAttribute::changeAttribute(SDOXMLString inname,
+ SDOXMLString invalue): name(inname), value(invalue)
+ {
+ }
+
+ changeAttribute::~changeAttribute()
+ {
+ }
+
+ changeElement::changeElement()
+ {
+ }
+
+ changeElement::changeElement(SDOXMLString inname,
+ SDOXMLString inpath, bool isRef, bool isDel)
+ : name(inname) , path(inpath)
+ {
+ isReference=isRef;
+ isDeletion= isDel;
+ }
+
+ changeElement::changeElement(SDOXMLString inname,
+ SDOXMLString inpath,
+ SDOXMLString invalue, bool isRef, bool isDel)
+ : name(inname), value(invalue), path(inpath)
+ {
+ isReference=isRef;
+ isDeletion= isDel;
+ }
+
+ changeElement::~changeElement()
+ {
+ }
+
+ change::change()
+ {
+ }
+
+ change::change(SDOXMLString inname, SDOXMLString ref):
+ name(inname), reference(ref)
+ {
+ }
+
+ void change::addAttribute(changeAttribute ca)
+ {
+ attributes.insert(attributes.end(),ca);
+ }
+
+ void change::addElement(changeElement ce)
+ {
+ elements.insert(elements.end(),ce);
+ }
+
+ /////////////////////////////////////////////////
+ // An element in the list of deletions
+ /////////////////////////////////////////////////
+
+ deletionAttribute::deletionAttribute()
+ {
+ }
+
+ deletionAttribute::deletionAttribute(SDOXMLString inname,
+ SDOXMLString invalue): name(inname), value(invalue)
+ {
+ }
+
+ deletionAttribute::~deletionAttribute()
+ {
+ }
+
+ deletionElement::deletionElement()
+ {
+ }
+
+ deletionElement::deletionElement(SDOXMLString inname)
+ : name(inname)
+ {
+ isDeletion = false;
+ }
+
+ deletionElement::deletionElement(SDOXMLString inname,
+ SDOXMLString inpath, int inindex)
+ : name(inname), value(inpath), index(inindex)
+ {
+ isDeletion = true;
+ }
+
+ deletionElement::~deletionElement()
+ {
+ }
+
+ deletion::deletion()
+ {
+ }
+
+ deletion::deletion(SDOXMLString inname, SDOXMLString ref):
+ name(inname), reference(ref)
+ {
+ completedprocessing=false;
+ }
+
+ void deletion::addAttribute(deletionAttribute ca)
+ {
+ attributes.insert(attributes.end(),ca);
+ }
+
+ void deletion::addElement(deletionElement ce)
+ {
+ elements.insert(elements.end(),ce);
+ }
+
+ void deletion::insertElement(deletionElement ce)
+ {
+ elements.insert(elements.begin(),ce);
+ }
+
+ deletionListElement::deletionListElement()
+ {
+ }
+
+ deletionListElement::deletionListElement(
+ deletion in_del,
+ int in_index,
+ SDOXMLString in_prev):
+ del(in_del), index(in_index), previous(in_prev)
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.h
new file mode 100644
index 0000000000..903ef0f427
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryBuilder.h
@@ -0,0 +1,300 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _CHANGESUMMARYBUILDER_H_
+#define _CHANGESUMMARYBUILDER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SAX2Parser.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/PropertySetting.h"
+#include "commonj/sdo/ChangeSummaryImpl.h"
+
+
+#include <stack>
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * createDelete is a class holding a creation or deletion in
+ * a change summary builder.
+ * When rebuilding a change summary from the serialized version
+ * creates and deletes are stored in these until they can be
+ * converted into a change summary.
+ */
+
+
+ class createDelete
+ {
+ public:
+ createDelete();
+ createDelete(SDOXMLString intype);
+ virtual ~createDelete();
+ SDOXMLString type;
+ SDOXMLString value;
+ int indexshift;
+ };
+
+/**
+ * changeAttribute is a class holding a changed attribute in a
+ * change summary builder.
+ * When rebuilding a change summary from the serialized version
+ * changes are stored in these until they can be
+ * converted into a change summary.
+ */
+
+ class changeAttribute
+ {
+ public:
+ changeAttribute();
+ changeAttribute(SDOXMLString inname,
+ SDOXMLString invalue);
+ virtual ~changeAttribute();
+ SDOXMLString name;
+ SDOXMLString value;
+ };
+
+/**
+ * changeElement is a class holding a changed element in a change summary builder.
+ * When rebuilding a change summary from the serialized version
+ * changes are stored in these until they can be
+ * converted into a change summary.
+ */
+ class changeElement
+ {
+ public:
+ changeElement();
+ changeElement(SDOXMLString inname,
+ SDOXMLString inpath, bool isRef, bool isDel);
+ changeElement(SDOXMLString inname,
+ SDOXMLString inpath,
+ SDOXMLString invalue, bool isRef, bool isDel);
+ virtual ~changeElement();
+ SDOXMLString name;
+ SDOXMLString value;
+ SDOXMLString path;
+ bool isReference;
+ bool isDeletion;
+ int index;
+ };
+
+/**
+ * change is a class holding a change in a change summary builder.
+ * When rebuilding a change summary from the serialized version
+ * changes are stored in these until they can be
+ * converted into a change summary.
+ * Changes consist of changeAttributes and changeElements
+ */
+
+
+ class change
+ {
+ public:
+ change();
+ change(SDOXMLString inname, SDOXMLString ref);
+ void addAttribute(changeAttribute ca);
+ void addElement(changeElement ce);
+ std::list<changeAttribute> attributes;
+ std::list<changeElement> elements;
+ SDOXMLString name;
+ SDOXMLString reference;
+ };
+
+/**
+ * deletionAttribute is a class holding a deletion attribute in a change summary builder.
+ * When rebuilding a change summary from the serialized version
+ * deletions are stored in these until they can be
+ * converted into a change summary.
+ * Changes consist of deletionAttributes and deletionElements
+ */
+ class deletionAttribute
+ {
+ public:
+ deletionAttribute();
+ deletionAttribute(SDOXMLString inname,
+ SDOXMLString invalue);
+ virtual ~deletionAttribute();
+ SDOXMLString name;
+ SDOXMLString value;
+ };
+
+/**
+ * deletionElement is a class holding a deletion element in a change summary builder.
+ * When rebuilding a change summary from the serialized version
+ * deletions are stored in these until they can be
+ * converted into a change summary.
+ * Changes consist of deletionAttributes and deletionElements
+ */
+ class deletionElement
+ {
+ public:
+ deletionElement();
+ deletionElement(SDOXMLString inname);
+ deletionElement(SDOXMLString inname,
+ SDOXMLString inpath, int inindex);
+ virtual ~deletionElement();
+ SDOXMLString name;
+ SDOXMLString value;
+ bool isDeletion;
+ int index;
+ };
+
+
+/**
+ * deletions is a class holding a deletion in a change summary builder.
+ * When rebuilding a change summary from the serialized version
+ * deletions are stored in these until they can be
+ * converted into a change summary.
+ * Changes consist of deletionAttributes and deletionElements
+ */
+
+ class deletion
+ {
+ public:
+ deletion();
+ deletion(SDOXMLString inname, SDOXMLString ref);
+ void addAttribute(deletionAttribute ca);
+ void addElement(deletionElement ce);
+ void insertElement(deletionElement ce);
+ SDOXMLString name;
+ SDOXMLString reference;
+ DataObjectPtr dob; /* the recreated one*/
+ std::list<deletionAttribute> attributes;
+ std::list<deletionElement> elements;
+ bool completedprocessing;
+ };
+
+ /** deletionListElement is an item in a list of deletions in a change summary builder.
+ *
+ * All the deletions are stored whilst rebuilding a change
+ * summary, then applied. These list elements hold them.
+ */
+
+ class deletionListElement
+ {
+ public:
+ deletionListElement();
+ deletionListElement(deletion in_del, int in_index, SDOXMLString in_prev);
+ SDOXMLString previous;
+ deletion del;
+ int index;
+ };
+
+/**
+ * The ChangeSummaryBuilder recreates a change summary from the
+ * XML representations of the changes, creations and deletions.
+ * It does this by populating a list of changes as though they had
+ * been applied to the current data graph.
+ */
+
+ class ChangeSummaryBuilder
+ {
+
+
+ public:
+
+ enum CsState
+ {
+ baseState,
+ dealingWithCreateDelete,
+ dealingWithChange,
+ dealingWithChangeElement,
+ dealingWithDeletion,
+ dealingWithDeletionElement
+ };
+
+
+ ChangeSummaryBuilder(
+ DataFactoryPtr df,
+ DataObjectPtr& rootDO);
+
+ virtual ~ChangeSummaryBuilder();
+
+
+ virtual void processStart(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void processChars(
+ const SDOXMLString& chars);
+
+ virtual void processEnd(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI);
+
+ virtual void buildChangeSummary(
+ DataObjectPtr changeSummaryDO);
+
+ virtual void populateDeletion(ChangeSummaryImpl* csi, DataObjectPtr dob,
+ int index);
+
+ virtual void handleDeletion(
+ ChangeSummaryImpl* csi,
+ int currentIndex,
+ DataObjectPtr cont,
+ SDOXMLString path,
+ SDOXMLString prop);
+
+ virtual void handleDeletion(ChangeSummaryImpl* csi,
+ int index,
+ SDOXMLString path);
+
+ void shiftIndices(int index, int delta);
+
+ SDOXMLString shiftedIndex(int index);
+
+
+ private:
+ DataFactoryPtr dataFactory;
+ DataObjectPtr& rootDataObject;
+
+ CsState currentState;
+
+ std::vector<deletionListElement> deletionList;
+ std::vector<SDOXMLString> currentLocation;
+ std::vector<createDelete> createDeletes;
+
+ std::vector<change> changes;
+ change currentChange;
+ SDOXMLString previousChange;
+ SDOXMLString currentLocalName;
+ int changeIndex;
+
+ std::vector<deletion> deletions;
+ deletion currentDeletion;
+ SDOXMLString previousDeletion;
+ int deletionIndex;
+ int deletionLevel;
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif //_CHANGESUMMARYBUILDER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.cpp
new file mode 100644
index 0000000000..6fefb289d9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.cpp
@@ -0,0 +1,1589 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/17 16:01:05 $ */
+
+#include "commonj/sdo/ChangeSummaryImpl.h"
+
+#include "commonj/sdo/DataObjectImpl.h"
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeList.h"
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/DataObjectList.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/Logging.h"
+
+
+namespace commonj{
+namespace sdo{
+
+
+ // Initializes an empty change summary, so we know one is required
+ ChangeSummaryImpl::ChangeSummaryImpl()
+ {
+ logging = false;
+ }
+
+ ChangeSummaryImpl::~ChangeSummaryImpl()
+ {
+ //Force logging off or bad things will happen!
+ logging = false;
+
+ /**
+ * These remove the logitems, so cause the
+ * refcounts of the data objects to drop, and
+ * delete the settings lists.
+ */
+ deletedMap.clear();
+ createdMap.clear();
+ changedMap.clear();
+ changedDataObjects.clear();
+ }
+
+ SequencePtr ChangeSummaryImpl::getOldSequence(DataObjectPtr dob)
+ {
+ DELETELOG_MAP::iterator deleteLogIter;
+
+ DataObject* ob = dob;
+ deleteLogIter = deletedMap.find((DataObjectImpl*)ob);
+
+ if (deleteLogIter != deletedMap.end())
+ {
+ return (deleteLogIter->second).getSequence();
+ }
+
+ CHANGELOG_MAP::iterator changeLogIter;
+
+ changeLogIter = changedMap.find((DataObjectImpl*)ob);
+
+ if (changeLogIter != changedMap.end())
+ {
+ return (changeLogIter->second).getSequence();
+ }
+ return NULL;
+
+ }
+
+ void ChangeSummaryImpl::removeFromChanges(DataObjectImpl* ob)
+ {
+ int i = changedDataObjects.size();
+
+ /**
+ * this is used to remove only the most recent change.
+ * A deletion has occurred, and there was a creation, so
+ * we remove the creation. There cannot be a change after the
+ * creation, so the last entry in changes is the creation.
+ * there could be a previous deletion of the same object, so
+ * we should not clear the whole list.
+ */
+ while (i > 0)
+ {
+ i--;
+
+
+ if (changedDataObjects.get(i) == ob)
+ {
+ changedDataObjects.remove(i);
+ return;
+ }
+ }
+ }
+
+ DataObjectPtr ChangeSummaryImpl::matchDeletedObject(SDOXMLString path)
+ {
+ DELETELOG_MAP::iterator deleteLogIter;
+
+ for (deleteLogIter = deletedMap.begin();
+ deleteLogIter != deletedMap.end(); ++deleteLogIter)
+ {
+ if (
+ path.equals(
+ SDOXMLString((deleteLogIter->second).getOldXpath())
+ )
+ )
+ {
+ return deleteLogIter->first;
+ }
+ }
+ return DataObjectPtr(0);
+ }
+
+
+
+ void ChangeSummaryImpl::logDeletion(DataObjectImpl* ob,
+ DataObjectImpl* container, const Property& prop,
+ const char* oldpath, bool loggingChildren)
+ {
+ LOGINFO_1(INFO,"ChangeSummary:LogDelete:%s",
+ ob->getType().getName());
+
+ /**
+ * The object is about to be deleted, so we need
+ * all its property Settings recorded in the list
+ * of changed data objects. We also need to know
+ * its old container, container property, and
+ * value.
+ */
+
+ // find any properties which are data objects, log their
+ // deletion first.
+
+ int i;
+
+ // Trace for change summaries
+
+ LOGINFO_2(INFO,"ChangeSummary logs a deletion of property %s type %s",
+ prop.getName(), prop.getType().getName());
+
+
+ CREATELOG_MAP::iterator createLogIter;
+ CHANGELOG_MAP::iterator changeLogIter;
+
+ createLogIter = createdMap.find(ob);
+ if (createLogIter != createdMap.end())
+ {
+ // would need to remove it from the created list.
+ LOGINFO(INFO,"ChangeSummary: The deletion was already created - just removing it");
+
+ removeFromChanges(ob);
+ createdMap.erase(ob);
+ // find the container in the change map.
+
+ changeLogIter = changedMap.find(container);
+ if (changeLogIter != changedMap.end())
+ {
+ // would hope there was an entry
+ int index;
+ if (prop.isMany())
+ {
+ DataObjectList& dl = container->getList(prop);
+ for (index=0;index<dl.size();index++)
+ {
+ if (dl[index] == ob)
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ index = 0;
+ }
+
+ SettingList& slist = (changeLogIter->second).getSettings();
+
+ for (int j=0 ; j < slist.size();j++)
+ {
+ if (!strcmp(slist.get(j)->getProperty().getName(),
+ prop.getName())
+
+
+ && slist.get(j)->getIndex() ==
+ index)
+ {
+ // these are settings of the same prop/index, we
+ // need to remove this entry
+ slist.remove(j);
+ // and if this was the only change, then we
+ // need to remoe the container from the changes
+ if (slist.size() == 0)
+ {
+ changedMap.erase(container);
+ removeFromChanges(container);
+ }
+ break; // must not continue - size is now wrong
+ }
+ }
+ }
+ return;
+ }
+
+ DELETELOG_MAP::iterator deleteLogIter;
+
+ deleteLogIter = deletedMap.find(ob);
+
+ if (deleteLogIter != deletedMap.end())
+ {
+ LOGINFO(INFO,"ChangeSummary - delete an already deleted object");
+ return;
+ }
+
+ PropertyList pl = ob->getInstanceProperties();
+ DataObject* dob;
+
+ if (loggingChildren)
+ {
+ for (i=0; i < pl.size(); i++)
+ {
+ if (pl[i].getType().isDataObjectType())
+ {
+ if (pl[i].isMany()) {
+ DataObjectList& dl = ob->getList(pl[i]);
+ for (int j = dl.size() - 1; j>=0; j--)
+ {
+ dob = dl[j];
+ if (dob)logDeletion((DataObjectImpl*)dob,ob,pl[i],
+ dob->objectToXPath(), true);
+ }
+ }
+ else {
+ dob = ob->getDataObject(pl[i]);
+ if (dob)logDeletion((DataObjectImpl*)(dob),ob,pl[i],
+ dob->objectToXPath(), true);
+ }
+ }
+ }
+ }
+
+
+ // build a Setting list for the set properties
+
+ deletedMap.insert(std::make_pair(ob,deleteLogItem(
+ (DataObject*)ob, prop,ob->getSequence(),
+ oldpath,
+ container)));
+ deleteLogIter = deletedMap.find(ob);
+ SettingList& sl = (deleteLogIter->second).getSettings();
+
+ void* value;
+ unsigned int len;
+
+ for (i=0; i < pl.size(); i++)
+ {
+ //if (!pl[i].getType().isDataType()) continue;
+
+ if (!ob->isSet(pl[i]))
+ {
+ sl.append(new Setting(false,false, 0,0,pl[i],0));
+ continue;
+ }
+ if (pl[i].isMany())
+ {
+
+ DataObjectList& dol = ob->getList(pl[i]);
+ for (int j=dol.size()-1;j >= 0; j--)
+ {
+ // needs to be the data object in cases where...
+ if (pl[i].getType().isDataType()) {
+ setPropValue(&value,&len,ob,pl[j]);
+ sl.append(new Setting(true,false,value,len,pl[i],j));
+ }
+ else {
+ value = (void*)dol[j];
+ sl.append(new Setting(true,false,value,0,pl[i],j));
+ }
+ }
+ }
+ else
+ {
+ setPropValue(&value,&len,ob,pl[i]);
+ sl.append(new Setting(true,ob->isNull(pl[i]),value,len,pl[i],0));
+ }
+
+ }
+
+
+ changeLogIter = changedMap.find(ob);
+ if (changeLogIter != changedMap.end())
+ {
+ // we have already changed this object, so we need the old values
+ // from the change, and to remove the changed map entry
+ LOGINFO(INFO,"ChangeSummary found a deleted item in then changes");
+
+ (deleteLogIter->second).setSequence((changeLogIter->second).getSequence());
+
+ SettingList& slist = (changeLogIter->second).getSettings();
+
+ for (int j=0 ; j < slist.size();j++)
+ {
+ for (int i=0;i<sl.size();i++)
+ {
+ if (!strcmp(slist.get(j)->getProperty().getName(),
+ sl.get(i)->getProperty().getName())
+
+
+ && slist.get(j)->getIndex() ==
+ sl.get(i)->getIndex())
+ {
+ // these are settings of the same prop/index, we
+ // need the old value to get transferred.
+ sl.remove(i);
+ sl.insert(i,new Setting(*(slist.get(j))));
+
+ }
+ }
+ }
+ LOGINFO(INFO, "ChangeSummary: Erasing from changes");
+ changedMap.erase(ob);
+ }
+ // We append deleted objects to the changed list - this list gives
+ // those data objects which have been affected - we then look at their
+ // current and old property values to find out whether they have been
+ // deleted or created.
+ else
+ {
+ changedDataObjects.append(ob, ChangedDataObjectList::Delete);
+ }
+
+ LOGINFO(INFO,"ChangeSummary: Deletion being added to the list");
+
+ return;
+ }
+
+ void ChangeSummaryImpl::logCreation(DataObjectImpl* ob,
+ DataObjectImpl* container, const Property& prop)
+ {
+
+ LOGINFO_1(INFO,"ChangeSummary:LogCreate of type:%s",ob->getType().getName());
+
+ // These we just need to record the fact that they
+ // are present. We dont have an original value to
+ // store.
+ // log a change to the container of this object
+ //
+
+ DELETELOG_MAP::iterator deleteLogIter;
+
+ deleteLogIter = deletedMap.find(ob);
+ if (deleteLogIter != deletedMap.end())
+ {
+ // can happen - a delete is really a removal from the tree.
+ // Adding back an object which you held a pointer to is just
+ // a re-creation.
+ LOGINFO(INFO,"ChangeSummary: Adding in a pre-deleted object");
+ }
+
+ // we should check if this object has sub-objects, they will
+ // need to be created too
+
+ PropertyList pl = ob->getInstanceProperties();
+ for (int p=0;p<pl.size();p++)
+ {
+ Property& thisprop = pl[p];
+ if (!thisprop.getType().isDataType())
+ {
+ if (ob->isSet(thisprop))
+ {
+ DataObject* dp;
+
+ if (thisprop.isMany())
+ {
+ DataObjectList& dol = ob->getList(thisprop);
+ for (int ds = 0; ds < dol.size(); ds++)
+ {
+ dp = dol[ds];
+ if (!dp) continue;
+ logCreation((DataObjectImpl*)dp,ob,thisprop);
+ }
+ }
+ else
+ {
+ dp = ob->getDataObject(thisprop);
+ if (dp)
+ {
+ logCreation((DataObjectImpl*)dp,ob,thisprop);
+ }
+ }
+ }
+ }
+ }
+
+ CREATELOG_MAP::iterator createLogIter;
+
+ createLogIter = createdMap.find(ob);
+ if (createLogIter != createdMap.end())
+ {
+ // this could be a reference - we dont add it twice.
+ LOGINFO(INFO,"ChangeSummary: No need to log creation twice");
+ return;
+ }
+
+ // We append created objects to the changed list - this list gives
+ // those data objects which have been affected - we then look at their
+ // current and old property values to find out whether they have been
+ // deleted or created.
+ changedDataObjects.append(ob, ChangedDataObjectList::Create);
+
+ createdMap.insert(std::make_pair(ob,createLogItem(ob->getType(),prop,container)));
+ return;
+ }
+
+
+ void ChangeSummaryImpl::setPropValue(void** value, unsigned int* len, DataObjectImpl* ob, const Property& prop)
+ {
+
+ *len = 0;
+ switch (prop.getTypeEnum())
+ {
+ case Type::BooleanType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = 0;
+ }
+ else
+ {
+ *(long*)*value = (long)ob->getBoolean(prop);
+ }
+ break;
+ case Type::ByteType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = 0;
+ }
+ else
+ {
+ *(long*)*value = (long)ob->getByte(prop);
+ }
+ break;
+ case Type::CharacterType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = 0;
+ }
+ else
+ {
+ *(long*)*value = (long)ob->getCharacter(prop);
+ }
+ break;
+ case Type::IntegerType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = 0;
+ }
+ else
+ {
+ *(long*)*value = (long)ob->getInteger(prop);
+ }
+ break;
+ case Type::ShortType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = 0;
+ }
+ else
+ {
+ *(long*)*value = (long)ob->getShort(prop);
+ }
+ break;
+ case Type::DoubleType:
+ *value = new long double;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long double*)value = (long double)0;
+ }
+ else
+ {
+ *(long double*)*value = (long double)ob->getDouble(prop);
+ }
+ break;
+ case Type::FloatType:
+ *value = new float;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(float*)value = (float)0;
+ }
+ else
+ {
+ *(float*)*value = (float)ob->getFloat(prop);
+ }
+ break;
+ case Type::LongType:
+ *value = new int64_t;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(int64_t*)value = (int64_t)0;
+ }
+ else
+ {
+ *(int64_t*)*value = (int64_t)ob->getLong(prop);
+ }
+ break;
+ case Type::DateType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = (long)0;
+ }
+ else
+ {
+ *(long*)*value = (long)(ob->getDate(prop).getTime());
+ }
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *value = 0;
+ *len = 0;
+ }
+ else
+ {
+ unsigned int siz = ob->getLength(prop);
+ if (siz > 0) {
+ *value = new wchar_t[siz];
+ *len = ob->getString(prop,(wchar_t*)*value, siz);
+ }
+ else {
+ *value = 0;
+ *len = 0;
+ }
+ }
+ break;
+ case Type::BytesType:
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *value = 0;
+ *len = 0;
+ }
+ else
+ {
+ unsigned int siz = ob->getLength(prop);
+ if (siz > 0) {
+ *value = new char[siz];
+ *len = ob->getBytes(prop,(char*)*value, siz);
+ }
+ else {
+ *value = 0;
+ *len = 0;
+ }
+ }
+ break;
+ case Type::OtherTypes:
+ case Type::DataObjectType:
+ case Type::ChangeSummaryType:
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *value = 0;
+ }
+ else
+ {
+ *value = (void*)ob->getDataObject(prop);
+ }
+ break;
+ default:
+ SDO_THROW_EXCEPTION("(ChangeSummary)setPropValue" ,
+ SDOUnsupportedOperationException, "Type is not recognised and cannot be saved");
+ break;
+ }
+ }
+
+ void ChangeSummaryImpl::setManyPropValue(void** value, unsigned int *len, DataObjectImpl* ob,
+ DataObjectImpl* listob, const Property& prop)
+ {
+
+ *len = 0;
+ switch (prop.getTypeEnum())
+ {
+ case Type::BooleanType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = (long)0;
+ }
+ else
+ {
+ *(long*)*value = (long)listob->getBoolean();
+ }
+ break;
+ case Type::ByteType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = (long)0;
+ }
+ else
+ {
+ *(long*)*value = (long)listob->getByte();
+ }
+ break;
+ case Type::CharacterType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = (long)0;
+ }
+ else
+ {
+ *(long*)*value = (long)listob->getCharacter();
+ }
+ break;
+ case Type::IntegerType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = (long)0;
+ }
+ else
+ {
+ *(long*)*value = (long)listob->getInteger();
+ }
+ break;
+ case Type::ShortType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = (long)0;
+ }
+ else
+ {
+ *(long*)*value = (long)listob->getShort();
+ }
+ break;
+ case Type::DoubleType:
+ *value = new long double;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long double*)value = (long double)0;
+ }
+ else
+ {
+ *(long double*)*value = (long double)listob->getDouble();
+ }
+ break;
+ case Type::FloatType:
+ *value = new float;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(float*)value = (float)0;
+ }
+ else
+ {
+ *(float*)*value = (float)listob->getFloat();
+ }
+ break;
+ case Type::LongType:
+ *value = new int64_t;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(int64_t*)value = (int64_t)0;
+ }
+ else
+ {
+ *(int64_t*)*value = (int64_t)listob->getLong();
+ }
+ break;
+ case Type::DateType:
+ *value = new long;
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *(long*)value = (long)0;
+ }
+ else
+ {
+ *(long*)*value = (long)(listob->getDate().getTime());
+ }
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *value = 0;
+ *len = 0;
+ }
+ else
+ {
+ unsigned int siz = listob->getLength(prop);
+ if (siz > 0)
+ {
+ *value = new wchar_t[siz];
+ *len = listob->getString((wchar_t*)*value, siz);
+ }
+ }
+ break;
+ case Type::BytesType:
+ if (!ob->isSet(prop) && !prop.isDefaulted())
+ {
+ *value = 0;
+ *len = 0;
+ }
+ else
+ {
+ unsigned int siz = listob->getLength(prop);
+ if (siz > 0)
+ {
+ *value = new char[siz];
+ *len = listob->getBytes((char*)*value, siz);
+ }
+ }
+ break;
+
+ case Type::OtherTypes:
+ case Type::DataObjectType:
+ case Type::ChangeSummaryType:
+ SDO_THROW_EXCEPTION("(ChangeSummary)setManyPropValue" ,
+ SDOUnsupportedOperationException, "A many prop data object value is being set");
+ //*value = (void*)ob;
+ break;
+ default:
+ SDO_THROW_EXCEPTION("(ChangeSummary)setManyPropValue" ,
+ SDOUnsupportedOperationException, "Type is not recognised and cannot be saved");
+ break;
+ }
+ }
+
+ void ChangeSummaryImpl::logChange(DataObjectImpl* ob,
+ const Property& prop)
+ {
+ // need to record the old value, unless the object
+ // is in the created list, in which case we store
+ // nothing.
+
+ LOGINFO_1(INFO,"ChangeSummary:LogChange %s",prop.getName());
+
+ CREATELOG_MAP::iterator createLogIter;
+
+ unsigned int len;
+
+ createLogIter = createdMap.find(ob);
+ if (createLogIter != createdMap.end())
+ {
+ LOGINFO(INFO,"ChangeSummary: no need to log change");
+ return;
+ }
+
+ DELETELOG_MAP::iterator deleteLogIter;
+
+ deleteLogIter = deletedMap.find(ob);
+ if (deleteLogIter != deletedMap.end())
+ {
+ LOGINFO(INFO,"ChangeSummary: no need to log change - already deleted");
+ return;
+ }
+
+ CHANGELOG_MAP::iterator changeLogIter;
+
+ changeLogIter = changedMap.find(ob);
+ if (changeLogIter == changedMap.end())
+ {
+ LOGINFO(INFO,"ChangeSummary: A change to an object which was not previously changed");
+ changedMap.insert(std::make_pair(ob, changeLogItem(ob->getType(),prop,
+ ob->getSequence(), ob)));
+ changedDataObjects.append(ob, ChangedDataObjectList::Change);
+ }
+ else
+ {
+ LOGINFO(INFO,"ChangeSummary: A change to an object which has already been changed");
+ }
+
+ changeLogIter = changedMap.find(ob);
+ if (changeLogIter == changedMap.end())
+ {
+ LOGINFO(INFO,"ChangeSummary: Problem - no changes to append to");
+ return;
+ }
+
+ SettingList& slist = (changeLogIter->second).getSettings();
+
+ void* value;
+
+ for (int i=0;i<slist.size();i++)
+ {
+ if (!strcmp(slist.get(i)->getProperty().getName(),prop.getName()))
+ {
+ LOGINFO(INFO,"ChangeSummary: Change of a property which was already changed - ignore");
+ return;
+ }
+ }
+
+ // need to check if the property has already been set,
+ // There could be many Settings if the item was a list,
+ // but we dont care here about that.
+
+ if (!ob->isSet(prop))
+ {
+ slist.append(new Setting(false,false,0,0,prop,0));
+ return;
+ }
+
+ if (prop.isMany())
+ {
+ // We are appending, not modifying
+ // we need to store the list as it was.
+
+ LOGINFO(INFO,"ChangeSummary: logging a change to a many valued property");
+
+ DataObjectList& dol = ob->getList(prop);
+ if (dol.size() == 0)
+ {
+ slist.append(new Setting(false,false,0,0,prop,0));
+ return;
+ }
+ for (int i=0;i< dol.size(); i++)
+ {
+ DataObject* dob = dol[i];
+ if (prop.getType().isDataType()) {
+ setManyPropValue(&value, &len, (DataObjectImpl*)ob,
+ (DataObjectImpl*)dob, prop);
+ slist.append(new Setting(true,false,value,len,prop,i));
+ }
+ else{
+ value = (void*)dob;
+ slist.append(new Setting(true,false,value,0,prop,i));
+ }
+ }
+ }
+ else
+ {
+ setPropValue(&value,&len,ob,prop);
+ slist.append(new Setting(true,ob->isNull(prop),value,len,prop,0));
+ }
+
+ return;
+ }
+
+
+
+ void ChangeSummaryImpl::undoChanges()
+ {
+ // TODO
+ /* Plan for undoChanges:
+
+ There are three lists of information.
+ The created list is a list of data objects which were created during logging.
+ These data objects will have current state, and will represent the value of a
+ property of their containing object. As they had no state before they were
+ created, the undoChanges needs to unSet the property values for these first.
+
+ The deleted list contains a list of objects which were deleted. The objects
+ themselves are not valid, but can be used to obtain a list of settings
+ representing the values of the properties at the time the object was
+ deleted. Here are recursive create is needed to re-create an object
+ similar to the deleted one, and set its properties using the settings.
+ The deleted object may well contain other deleted objects as its
+ property values, so these too will have entries in the deleted list, and
+ need to be found and re-created.
+
+ The changed list holds a list of settings for properties of data objects
+ which have been changed. These objects may also be in the deleted list, so#
+ may not be valid. They will not be in the created list. First check that
+ the object is not in the deleted list. If it is, then the changes need to
+ be applied to the data object which we created when undoing the deleted list,
+ otherwise we just apply the change to a data object which exists.
+ */
+
+ /* what about items in many-valued properties? I guess we need to check and
+ search the values returned for the list to find the object to delete*/
+ LOGINFO(INFO,"ChangeSummary UndoChanges not implemented");
+ return;
+ }
+
+
+ void ChangeSummaryImpl::beginLogging()
+ {
+
+ // Clear down the lists and their contents, if there was already
+ // some activity.
+
+ if (logging) endLogging();
+ changedMap.clear();
+ deletedMap.clear();
+ createdMap.clear();
+ changedDataObjects.clear();
+
+ LOGINFO(INFO,"ChangeSummary: logging switched on");
+
+ logging = true;
+ return;
+ }
+
+ void ChangeSummaryImpl::endLogging()
+ {
+ logging = false;
+
+ LOGINFO(INFO,"ChangeSummary: logging switched off");
+
+ return;
+ }
+
+ bool ChangeSummaryImpl::isLogging()
+ {
+ return logging;
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////
+ void ChangeSummaryImpl::debugPrint(){}
+// {
+// ChangedDataObjectList& dol = getChangedDataObjects();
+//
+// CREATELOG_MAP::iterator createLogIter;
+// DELETELOG_MAP::iterator deleteLogIter;
+// CHANGELOG_MAP::iterator changeLogIter;
+//
+// for (int i=0;i<dol.size(); i++)
+// {
+// DataObject* dob = dol[i];
+// createLogIter = createdMap.find((DataObjectImpl*)dob);
+// if (createLogIter != createdMap.end())
+// {
+// cout << "Found a created object " << dol[i] << endl;
+// return;
+// }
+// deleteLogIter = deletedMap.find((DataObjectImpl*)dob);
+// if (deleteLogIter != deletedMap.end())
+// {
+// cout << "Found a deleted object " << dol[i] << endl;
+// return;
+// }
+// changeLogIter = changedMap.find((DataObjectImpl*)dob);
+// if (changeLogIter != changedMap.end())
+// {
+// cout << "Found a modified object " << dol[i] << endl;
+// SettingList& sl = getOldValues(dob);
+// for (int j=0; j < sl.size(); j++)
+// {
+// cout << "Old Value of " << sl[j].getProperty().getName();
+// if (sl[j].getProperty().isMany())
+// {
+// cout << "[" << sl[j].getIndex() << "]" ;
+// }
+// cout << endl;
+// switch (sl[j].getProperty().getTypeEnum())
+// {
+// case Type::BooleanType:
+// cout << "Boolean:" << sl[j].getBooleanValue();
+// break;
+// case Type::ByteType:
+// cout << "Byte:" << sl[j].getByteValue();
+// break;
+// case Type::CharacterType:
+// cout << "Character:" << sl[j].getCharacterValue();
+// break;
+// case Type::IntegerType:
+// cout << "Integer:" << sl[j].getIntegerValue();
+// break;
+// case Type::ShortType:
+// cout << "Short:" << sl[j].getShortValue();
+// break;
+// case Type::DoubleType:
+// cout << "Double:" << sl[j].getDoubleValue();
+// break;
+// case Type::FloatType:
+// cout << "Float:" << sl[j].getFloatValue();
+// break;
+// case Type::LongType:
+// cout << "Int64: (cant print)"; // << (*sl)[j]->getLongValue();
+// break;
+// case Type::DateType:
+// cout << "Date:" << sl[j].getDateValue().getTime();
+// break;
+// case Type::BigDecimalType:
+// case Type::BigIntegerType:
+// case Type::StringType:
+// case Type::UriType:
+// {
+// unsigned int len = sl[j].getLength();
+// if (len > 0) {
+// wchar_t* buf = new wchar_t[len];
+// len = sl[j].getStringValue(buf,len);
+// cout <<"String type" ;
+// for (int i=0;i<len;i++)
+// {
+// cout << ":" << buf[i];
+// }
+// delete buf;
+// }
+// break;
+// }
+// case Type::BytesType:
+// {
+// unsigned int len = sl[j].getLength();
+// if (len > 0) {
+// char* buf = new char[len];
+// len = sl[j].getBytesValue(buf,len);
+// cout <<"Bytes type" ;
+// for (int i=0;i<len;i++)
+// {
+// cout << buf[i];
+// }
+// delete buf;
+// }
+// break;
+// }
+// case Type::OtherTypes:
+// case Type::DataObjectType:
+// case Type::ChangeSummaryType:
+// cout << "DataObject:" << sl[j].getDataObjectValue();
+// break;
+// default:
+// cout << "Unspecified type found in setting";
+// break;
+// }
+// cout << endl;
+// }
+// return;
+// }
+// cout << "Found an object which was not in the changes " << dol[i] << endl;
+//
+// }
+// }
+///////////////////////////////////////////////////////////////////////////////////////
+
+ ChangedDataObjectList& ChangeSummaryImpl::getChangedDataObjects()
+ {
+ // build a list of all the changes, in the same order
+ // as the actions occured,
+
+ return changedDataObjects;
+
+ }
+
+ bool ChangeSummaryImpl::isCreated(DataObjectPtr dol)
+ {
+ CREATELOG_MAP::iterator createLogIter;
+ DataObject* dob = dol;
+ createLogIter = createdMap.find((DataObjectImpl*)dob);
+
+ if (createLogIter != createdMap.end())
+ return true;
+ return false;
+ }
+
+ bool ChangeSummaryImpl::isDeleted(DataObjectPtr dol)
+ {
+ DELETELOG_MAP::iterator deleteLogIter;
+ DataObject* dob = dol;
+ deleteLogIter = deletedMap.find((DataObjectImpl*)dob);
+
+ if (deleteLogIter != deletedMap.end())
+ return true;
+ return false;
+ }
+
+ bool ChangeSummaryImpl::isModified(DataObjectPtr dol)
+ {
+ CHANGELOG_MAP::iterator changeLogIter;
+ DataObject* dob = dol;
+ changeLogIter = changedMap.find((DataObjectImpl*)dob);
+
+ if (changeLogIter != changedMap.end())
+ return true;
+ return false;
+ }
+
+
+
+ SettingList& ChangeSummaryImpl::getOldValues(DataObjectPtr dol)
+ {
+ CHANGELOG_MAP::iterator changeLogIter;
+ DELETELOG_MAP::iterator deleteLogIter;
+ DataObject* dob = dol;
+ // start with the deleted map...
+ deleteLogIter = deletedMap.find((DataObjectImpl*)dob);
+ if (deleteLogIter != deletedMap.end()){
+ return ((deleteLogIter->second).getSettings());
+ }
+ changeLogIter = changedMap.find((DataObjectImpl*)dob);
+ if (changeLogIter != changedMap.end()){
+ return ((changeLogIter->second).getSettings());
+ }
+ SDO_THROW_EXCEPTION("(ChangeSummary(getOldValues" ,
+ SDOIndexOutOfRangeException, "Data object is not in the change summary");
+ }
+
+
+
+ const char* ChangeSummaryImpl::getOldXpath(RefCountingPointer<commonj::sdo::DataObject> dol)
+ {
+ DELETELOG_MAP::iterator deleteLogIter;
+ DataObject* dob = dol;
+ deleteLogIter = deletedMap.find((DataObjectImpl*)dob);
+ if (deleteLogIter != deletedMap.end()){
+ return ((deleteLogIter->second).getOldXpath());
+ }
+ return 0;
+ }
+
+
+ const Setting& ChangeSummaryImpl::getOldValue(DataObjectPtr dol, const Property& property)
+ {
+ DELETELOG_MAP::iterator deleteLogIter;
+ CHANGELOG_MAP::iterator changeLogIter;
+ DataObject* dob = dol;
+
+ deleteLogIter = deletedMap.find((DataObjectImpl*)dob);
+ if (deleteLogIter != deletedMap.end())
+ {
+ SettingList& sl = (deleteLogIter->second).getSettings();
+ for (int i=0;i < sl.size(); i++)
+ {
+ if (!strcmp(property.getName(),
+ sl.get(i)->getProperty().getName()))
+ return (*sl.get(i));
+ }
+ }
+
+ changeLogIter = changedMap.find((DataObjectImpl*)dob);
+ if (changeLogIter != changedMap.end())
+ {
+ SettingList& sl = (changeLogIter->second).getSettings();
+ for (int i=0;i < sl.size(); i++)
+ {
+ if (!strcmp(property.getName(),
+ sl.get(i)->getProperty().getName()))
+ return (*sl.get(i));
+ }
+ }
+
+ SDO_THROW_EXCEPTION("(ChangeSummary(getOldValue)" ,
+ SDOIndexOutOfRangeException, "Data object is not in the change summary");
+ }
+
+ DataObjectPtr ChangeSummaryImpl::getOldContainer(DataObjectPtr dol)
+ {
+ CHANGELOG_MAP::iterator changeLogIter;
+ DataObject* dob = dol;
+ changeLogIter = changedMap.find((DataObjectImpl*)dob);
+
+ if (changeLogIter != changedMap.end())
+ {
+ return (changeLogIter->second).getOldContainer();
+ }
+ return 0;
+ }
+
+ const Property& ChangeSummaryImpl::getOldContainmentProperty(DataObjectPtr dol)
+ {
+ CHANGELOG_MAP::iterator changeLogIter;
+ DataObject* dob = dol;
+ changeLogIter = changedMap.find((DataObjectImpl*)dob);
+
+ if (changeLogIter == changedMap.end())
+ {
+ SDO_THROW_EXCEPTION("(ChangeSummary(getOldContainmentProperty)" ,
+ SDOIndexOutOfRangeException, "Data object is not in the change summary");
+ }
+ return (changeLogIter->second).getOldContainmentProperty();
+ }
+
+
+ //
+ // Creations and deletions can be just logged in the normal
+ // way. Changes have to be handled specially, because we
+ // need the old value, but the data object now contains the
+ // current value.
+ //
+
+ void ChangeSummaryImpl::appendToCreations(const Property& p,
+ DataObjectPtr dob, DataObjectPtr cont)
+ {
+ LOGINFO(INFO,"ChangeSummary: Appending to creations list");
+ DataObject* pdob = (DataObject*)dob;
+ DataObject* pcont = (DataObject*)cont;
+ logCreation((DataObjectImpl*)pdob,(DataObjectImpl*)pcont,p);
+ return;
+ }
+
+
+ void ChangeSummaryImpl::appendToDeletions(const Property& p,
+ DataObjectPtr dob, DataObjectPtr cont, const char* oldpath )
+ {
+ DELETELOG_MAP::iterator deleteLogIter;
+
+ LOGINFO_1(INFO,"ChangeSummary:Appending to deletions list %s",oldpath);
+
+ DataObject* pdob = (DataObject*)dob;
+ DataObject* pcont = (DataObject*)cont;
+ logDeletion((DataObjectImpl*)pdob,(DataObjectImpl*)pcont,p,
+ oldpath, false);
+ return;
+ }
+
+
+ unsigned int ChangeSummaryImpl::stringConvert(char** value, const char* c, const Property& p)
+ {
+ // code duplicated from typeimpl
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ *value = new char[sizeof(long)];
+ if ((c == 0) || strcmp(c,"true"))
+ {
+ *(long*)*value = 0;
+ }
+ else
+ {
+ *(long*)*value = 1;
+ }
+ return sizeof(long);
+
+ case Type::ByteType:
+ case Type::CharacterType:
+ case Type::IntegerType:
+ case Type::ShortType:
+ *value = new char[sizeof(long)];
+ *(long*)*value = atoi(c);
+ return sizeof(long);
+
+ case Type::DoubleType:
+ *value = new char[sizeof(long double)];
+ // TODO - atof not suitable here
+ *(long double*)*value = (long double)atof(c);
+ return sizeof(long double);
+
+ case Type::FloatType:
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)atof(c);
+ return sizeof(float);
+
+ case Type::LongType:
+ *value = new char[sizeof(int64_t)];
+#if defined(WIN32) || defined (_WINDOWS)
+ *(int64_t*)*value = (int64_t)_atoi64(c);
+#else
+ *(int64_t*)*value = (int64_t)strtoll(c, NULL, 0);
+#endif
+ return sizeof(int64_t);
+
+ case Type::DateType:
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)atoi(c);
+ return sizeof(time_t);
+
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ {
+ char* vw = new char[(strlen(c)+1)*sizeof(wchar_t)];
+ wchar_t* pvw = (wchar_t*)vw;
+ for (int i=0;i< strlen(c);i++)
+ {
+ pvw[i] = (wchar_t)c[i];
+ }
+ pvw[strlen(c)] = 0;
+ *value = vw;
+ return strlen(c);
+ }
+ break;
+ case Type::BytesType:
+ {
+ char* vc = new char[strlen(c)+1];
+ for (int i=0;i< strlen(c);i++)
+ {
+ vc[i] = (char)c[i];
+ }
+ vc[strlen(c)] = 0;
+ *value = vc;
+ return strlen(c);
+ }
+ break;
+
+ case Type::OtherTypes:
+ case Type::DataObjectType:
+ case Type::ChangeSummaryType:
+ default:
+ {
+ std::string msg("Cannot set CString on object of type:");
+ msg += p.getType().getName();
+ SDO_THROW_EXCEPTION("setString" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ return 0;
+ }
+
+ void ChangeSummaryImpl::appendToChanges(const Property& p,
+ DataObjectPtr dob , SDOXMLString value, int index)
+ {
+ CHANGELOG_MAP::iterator changeLogIter;
+
+ LOGINFO(INFO,"ChangeSummary Appending to changes list");
+
+ DataObject* pdob = (DataObject*)dob;
+
+
+ changeLogIter = changedMap.find((DataObjectImpl*)pdob);
+ if (changeLogIter == changedMap.end())
+ {
+
+ LOGINFO(INFO,"ChangeSummary: A change to an object which was not previously changed");
+
+ changedMap.insert(std::make_pair((DataObjectImpl*)pdob,
+ changeLogItem(dob->getType(),p,
+ dob->getSequence(), (DataObjectImpl*)pdob)));
+ changedDataObjects.append((DataObjectImpl*)pdob,
+ ChangedDataObjectList::Change);
+ }
+
+ changeLogIter = changedMap.find((DataObjectImpl*)pdob);
+ if (changeLogIter == changedMap.end())
+ {
+
+ LOGINFO(INFO,"ChangeSummary: no changes to append to");
+
+ return;
+ }
+
+ SettingList& slist = (changeLogIter->second).getSettings();
+
+ // simply need to insert a setting - no requirement to validate
+ // against existing settings
+
+ char* datavalue = 0;
+
+ unsigned int len = stringConvert(&datavalue, (const char*)value , p);
+
+ slist.append(new Setting(true,false,datavalue,len,p,index));
+
+ // The datavalue will be freed by the deletion of the setting later
+ }
+
+
+ void ChangeSummaryImpl::appendToChanges(const Property& p,
+ DataObjectPtr dob , DataObjectPtr indob, int index)
+ {
+ CHANGELOG_MAP::iterator changeLogIter;
+
+ LOGINFO(INFO,"ChangeSummary Appending to changes list (2)");
+
+ DataObject* pdob = (DataObject*)dob;
+
+ changeLogIter = changedMap.find((DataObjectImpl*)pdob);
+ if (changeLogIter == changedMap.end())
+ {
+ LOGINFO(INFO,"ChangeSummary: A change to an object which was not previously changed");
+
+ changedMap.insert(std::make_pair((DataObjectImpl*)pdob,
+ changeLogItem(dob->getType(),p,
+ dob->getSequence(), (DataObjectImpl*)pdob)));
+ changedDataObjects.append((DataObjectImpl*)pdob,
+ ChangedDataObjectList::Change);
+ }
+
+ changeLogIter = changedMap.find((DataObjectImpl*)pdob);
+ if (changeLogIter == changedMap.end())
+ {
+ LOGINFO(INFO,"ChangeSummary: Problem - no changes to append to");
+
+ return;
+ }
+
+ SettingList& slist = (changeLogIter->second).getSettings();
+
+ // simply need to insert a setting - no requirement to validate
+ // against existing settings
+
+
+ slist.append(new Setting(true,false,(void*)indob,0,p,index));
+
+ }
+
+
+
+
+ /////////////////////////////////////////////////////////////
+ // log items are for all lists, but contain different things
+ // depending on whether they are deletions, additions...
+ /////////////////////////////////////////////////////////////
+
+ createLogItem::createLogItem(const Type& tp, const Property& prop,
+ DataObjectImpl* cont) :
+ theOldContainmentProperty(prop), theOldContainer(cont),
+ theType(tp)
+ {
+ }
+
+ DataObjectImpl* createLogItem::getOldContainer()
+ {
+ return theOldContainer;
+ }
+
+ const Type& createLogItem::getOldType()
+ {
+ return theType;
+ }
+
+ const Property& createLogItem::getOldContainmentProperty()
+ {
+ return theOldContainmentProperty;
+ }
+
+
+
+ changeLogItem::changeLogItem(const Type& tp,
+ const Property& prop,
+ SequencePtr seq,
+ DataObjectImpl* cont) :
+ theOldContainmentProperty(prop), theOldContainer(cont),
+ theType(tp)
+ {
+ if (seq)
+ {
+ theSequence = new SequenceImpl((SequenceImpl*)seq);
+ }
+ else
+ {
+ theSequence = 0;
+ }
+ }
+
+ changeLogItem::changeLogItem(const changeLogItem& cin) :
+ theOldContainmentProperty(cin.theOldContainmentProperty),
+ theType(cin.theType)
+ {
+ if (cin.theSequence) theSequence = new SequenceImpl((SequenceImpl*)cin.theSequence);
+ else theSequence = 0;
+ theOldContainer = cin.theOldContainer;
+ theSettings = cin.theSettings;
+
+ }
+
+ changeLogItem::~changeLogItem()
+ {
+ if (theSequence) delete theSequence;
+ }
+
+ DataObjectImpl* changeLogItem::getOldContainer()
+ {
+ return theOldContainer;
+ }
+
+ const Type& changeLogItem::getOldType()
+ {
+ return theType;
+ }
+
+ const Property& changeLogItem::getOldContainmentProperty()
+ {
+ return theOldContainmentProperty;
+ }
+
+ SettingList& changeLogItem::getSettings()
+ {
+ return theSettings;
+ }
+
+ SequencePtr changeLogItem::getSequence()
+ {
+ return theSequence;
+ }
+
+
+ deleteLogItem::deleteLogItem(DataObject* dob,
+ const Property& prop, SequencePtr seq ,
+ const char* oldpath, DataObjectImpl* cont
+ ) :
+ theOldContainmentProperty(prop), theOldContainer(cont),
+ theActualObject(dob),
+ theType(dob->getType())
+ {
+ if (seq)
+ {
+ theSequence = new SequenceImpl((SequenceImpl*)seq);
+ }
+ else
+ {
+ theSequence = 0;
+ }
+ if (oldpath !=0 && strlen(oldpath) != 0)
+ {
+ theOldXpath = new char[strlen(oldpath)+1];
+ strcpy(theOldXpath,oldpath);
+ }
+ else
+ {
+ theOldXpath = 0;
+ }
+ }
+
+ const char* deleteLogItem::getOldXpath()
+ {
+ return theOldXpath;
+ }
+
+ DataObjectImpl* deleteLogItem::getOldContainer()
+ {
+ return theOldContainer;
+ }
+
+ deleteLogItem::deleteLogItem(const deleteLogItem& cin):
+ theOldContainmentProperty(cin.theOldContainmentProperty),
+ theType(cin.theType), theActualObject(cin.theActualObject)
+ {
+ if (cin.theSequence) theSequence = new SequenceImpl((SequenceImpl*)cin.theSequence);
+ else theSequence = 0;
+ theOldContainer = cin.theOldContainer;
+ theSettings = cin.theSettings;
+ if (cin.theOldXpath != 0)
+ {
+ theOldXpath = new char[strlen(cin.theOldXpath) + 1];
+ strcpy(theOldXpath, cin.theOldXpath);
+ }
+ else
+ {
+ theOldXpath = 0;
+ }
+ }
+
+ deleteLogItem::~deleteLogItem()
+ {
+ theActualObject = 0;
+ if (theSequence) delete theSequence;
+ if (theOldXpath != 0)
+ {
+ delete theOldXpath;
+ }
+ }
+
+ const Type& deleteLogItem::getOldType()
+ {
+ return theType;
+ }
+
+ const Property& deleteLogItem::getOldContainmentProperty()
+ {
+ return theOldContainmentProperty;
+ }
+
+ SettingList& deleteLogItem::getSettings()
+ {
+ return theSettings;
+ }
+
+ SequencePtr deleteLogItem::getSequence()
+ {
+ return theSequence;
+ }
+
+ void deleteLogItem::setSequence(SequencePtr s)
+ {
+ if (theSequence) delete theSequence;
+ if (s) {
+ theSequence = new SequenceImpl((SequenceImpl*)s);
+ }
+ else {
+ theSequence = 0;
+ }
+ return;
+ }
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.h
new file mode 100644
index 0000000000..38ca468484
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangeSummaryImpl.h
@@ -0,0 +1,403 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _CHANGESUMMARYIMPL_H_
+#define _CHANGESUMMARYIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+
+#include "commonj/sdo/ChangedDataObjectListImpl.h"
+#include "commonj/sdo/SettingList.h"
+#include "commonj/sdo/ChangeSummary.h"
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/SDOXMLString.h"
+
+#include <map>
+
+namespace commonj{
+namespace sdo {
+
+
+ /**
+ * ChangeLogItem is a part of a change summary.
+ * The change summary consisists of change items,
+ * deletion items and creation items. They are held in three
+ * lists as they have slightly different contents.
+ * The change log items hold old values for all the changes to
+ * properties of the data object concerned.
+ */
+
+ class changeLogItem {
+
+ public:
+
+ changeLogItem(const Type& tp, const Property& prop,SequencePtr seq,
+ DataObjectImpl* cont = 0 );
+ changeLogItem(const changeLogItem& cin);
+ ~changeLogItem();
+ DataObjectImpl* getOldContainer();
+ const Property& getOldContainmentProperty();
+ const Type& getOldType();
+ SettingList& getSettings();
+ SequencePtr getSequence();
+
+ private:
+
+ const Property& theOldContainmentProperty;
+ DataObjectImpl* theOldContainer;
+ const Type& theType;
+ SettingList theSettings;
+ SequencePtr theSequence;
+ };
+
+ /**
+ * CreateLogItem is a part of a change summary.
+ * The change summary consisists of change items,
+ * deletion items and creation items. They are held in three
+ * lists as they have slightly different contents.
+ * The create log items hold the data object itself,
+ * and details of its container.
+ */
+
+
+ class createLogItem {
+
+ public:
+
+ createLogItem(const Type& tp, const Property& prop, DataObjectImpl* cont = 0);
+
+
+ DataObjectImpl* getOldContainer();
+ const Property& getOldContainmentProperty();
+ const Type& getOldType();
+
+ private:
+
+ const Property& theOldContainmentProperty;
+ DataObjectImpl* theOldContainer;
+ const Type& theType;
+ };
+
+ /**
+ * DeleteLogItem is a part of a change summary.
+ * The change summary consisists of change items,
+ * deletion items and creation items. They are held in three
+ * lists as they have slightly different contents.
+ * The delete log items hold the old data object , and
+ * details of the properties as they were before deletion
+ */
+
+ class deleteLogItem {
+
+ public:
+
+
+ deleteLogItem(DataObject* dob, const Property& prop,
+ SequencePtr seq,const char *oldpath,
+ DataObjectImpl* cont = 0);
+
+
+ deleteLogItem(const deleteLogItem& cin);
+ ~deleteLogItem();
+ DataObjectImpl* getOldContainer();
+ const Property& getOldContainmentProperty();
+ const Type& getOldType();
+ const char* getOldXpath();
+ SettingList& getSettings();
+ SequencePtr getSequence();
+ void setSequence(SequencePtr s);
+
+ private:
+
+ const Property& theOldContainmentProperty;
+ DataObjectImpl* theOldContainer;
+
+ /** theActualObject
+ * A counting pointer to the object is held, such that the
+ * object is not freed, even if deleted. This rcp will not
+ * be used to refer to the object, but makes sure that the
+ * object does not reuse a memory address of a previously
+ * deleted object until the change summary is destroyed.
+ */
+
+ RefCountingPointer<DataObject> theActualObject;
+ const Type& theType;
+ SettingList theSettings;
+ SequencePtr theSequence;
+ char * theOldXpath;
+ };
+
+
+ /** ChangeSummaryImpl implements the abstract class ChangeSummary.
+ * The change summary consisists of change items,
+ * deletion items and creation items. They are held in three
+ * lists as they have slightly different contents.
+ */
+
+ class ChangeSummaryImpl : public ChangeSummary
+ {
+ public:
+ ChangeSummaryImpl();
+
+ virtual ~ChangeSummaryImpl();
+
+ /**
+ * The new and modified objects in the list are references to objects that
+ * are associated with this change summary.
+ * The deleted objects in the list are references to copies of the objects
+ * as they appeared at the time that event logging was enabled;
+ * if the deleted objects have references to other objects,
+ * the references will also refer to copies of the target objects.
+ * Return a list of changed data objects.
+ */
+
+ virtual ChangedDataObjectList& getChangedDataObjects();
+
+
+ /** getOldSettings returns a list of settings.
+ * Returns a list of Settings
+ * that represent the property values of the given dataObject
+ * at the point when logging began.
+ * In the case of a deleted object,
+ * the list will include Settings for all the properties.
+ * An old value Setting indicates the value at the
+ * point logging begins. A setting is only produced for
+ * modified objects if either the old value differs from the current value or
+ * if the isSet differs from the current value.
+ * No Settings are produced for created objects.
+ * Param dataObject the object in question.
+ * Return a list of settings.
+ */
+ virtual SettingList& getOldValues(DataObjectPtr dataObject);
+
+ /** getOldXpath returns the old path before the setting.
+ *
+ * Returns a path where the object was located before the setting took place.
+ */
+ virtual const char* getOldXpath(RefCountingPointer<commonj::sdo::DataObject> dol);
+
+
+ /** beginLogging() sets the change summary in logging mode.
+ *
+ * The change summary is initially inactive. Setting it to logging mode
+ * starts the process of recording all the settings made.
+ */
+
+ virtual void beginLogging();
+
+ /** endLogging() stops logging.
+ *
+ * This method stops logging, but does not clear out the change summary.
+ * The changes are valid until the summary is next set to logging, at which time
+ * all old settings are lost.
+ */
+ virtual void endLogging();
+
+
+
+ /** isLogging() returns true if logging is enabled.
+ *
+ * Indicates whether change logging is on (true) or off (false).
+ */
+
+ virtual bool isLogging();
+
+
+
+ /** isCreated() returns true if the object was created during logging.
+ *
+ * Returns whether or not the specified data object was created while logging.
+ * Any object that was added to the data graph
+ * but was not in the data graph when logging began,
+ * will be considered created.
+ * Param dataObject the data object in question.
+ * Return true if the specified data object was created.
+ */
+ virtual bool isCreated(DataObjectPtr dataObject);
+
+ /** isDeleted() - true if the object was deleted during logging.
+ *
+ * Returns whether or not the specified data object was deleted while logging.
+ * Any object that is not contained by the data graph will be considered
+ * deleted.
+ * Param dataObject the data object in question.
+ * Return true if the specified data object was deleted.
+ */
+ virtual bool isDeleted(DataObjectPtr dataObject);
+
+
+ /** isModified() - true if the object was changed during logging.
+ *
+ * Returns whether or not the specified data object was updated while logging.
+ * An object that was contained in the data graph when logging began,
+ * and remains in the graph when logging ends will be considered for changes.
+ * An object considered modified must have at least one old value Setting.
+ * Param dataObject the data object in question.
+ * Return true if the specified data object was modified.
+ */
+ virtual bool isModified(DataObjectPtr dataObject);
+
+ /** getOldValue() gets the setting showing the old value.
+ *
+ * Returns a setting for the specified property
+ * representing the property value of the given dataObject
+ * at the point when logging began.
+ * Returns null if the property has not changed and
+ * has not been deleted.
+ * Param dataObject the object in question.
+ * Param property the property of the object.
+ * Return the Setting for the specified property.
+ */
+
+ virtual const Setting& getOldValue(DataObjectPtr dataObject, const Property& property);
+
+ /** getOldContainer() gets the container before the setting.
+ *
+ * Returns the value of the container data object
+ * at the point when logging began.
+ * Param dataObject the object in question.
+ * Return the old container data object.
+ */
+ virtual DataObjectPtr getOldContainer(DataObjectPtr dataObject);
+
+ /** getOldContainmentProperty() - gives the property before setting.
+ *
+ * Returns the value of the containment property data object property
+ * at the point when logging began.
+ * Param dataObject the object in question.
+ * Return the old containment property.
+ */
+ virtual const Property& getOldContainmentProperty(DataObjectPtr dataObject);
+
+ /** undoChanges() - Not Implemented.
+ *
+ * NOT IMPLEMENTED
+ *
+ * Undoes all changes in the log to restore the tree of
+ * DataObjects to its original state when logging began.
+ * isLogging() is unchanged. The log is cleared.
+ */
+ virtual void undoChanges();
+
+ /** getOldSequence() - Not Implemented.
+ *
+ * NOT IMPLEMENTED
+ *
+ * This method gives back the sequence of a data object as it
+ * appeared when logging was switched on. The data object may be
+ * a deleted data object or a changed data object. If the
+ * data object was not sequenced, this returns null.
+ */
+
+ virtual SDO_API SequencePtr getOldSequence(DataObjectPtr dataObject);
+
+ bool isInCreatedMap(DataObjectImpl* ob);
+
+ void logDeletion(DataObjectImpl* ob,
+ DataObjectImpl* cont, const Property& prop,
+ const char* oldpath,
+ bool loggingChildren = true
+ );
+
+ void logCreation(DataObjectImpl* ob,
+ DataObjectImpl* cont, const Property& prop
+ );
+
+ void logChange(DataObjectImpl* ob, const Property& prop
+ );
+
+
+ SDO_API void debugPrint();
+
+ void removeFromChanges(DataObjectImpl* ob);
+
+
+ /**
+ * appendToCreations is used by deserialization
+ * This method helps to rebuild a change summary by populating the
+ * lists without the changes actually being logged.
+ */
+
+ void appendToCreations(const Property& p,
+ DataObjectPtr dob,
+ DataObjectPtr cont);
+
+
+ /**
+ * appendToDeletions is used by deserialization
+ * This method helps to rebuild a change summary by populating the
+ * lists without the changes actually being logged.
+ */
+ void appendToDeletions(const Property& p,
+ DataObjectPtr dob,
+ DataObjectPtr cont,
+ const char* oldpath);
+
+
+ unsigned int stringConvert(
+ char** value,
+ const char* c,
+ const Property& p);
+
+ /**
+ * appendToChangesis used by deserialization
+ * This method helps to rebuild a change summary by populating the
+ * lists without the changes actually being logged.
+ */
+
+ void appendToChanges(const Property& p,
+ DataObjectPtr dob,
+ SDOXMLString value,
+ int index);
+
+ void appendToChanges(const Property& p,
+ DataObjectPtr dob,
+ DataObjectPtr pdob,
+ int index);
+
+ DataObjectPtr matchDeletedObject(SDOXMLString path);
+
+
+ private:
+
+
+ void setPropValue(void** value, unsigned int *len, DataObjectImpl* ob, const Property& prop);
+ void setManyPropValue(void** value, unsigned int *len, DataObjectImpl* ob,
+ DataObjectImpl* listob, const Property& prop);
+ bool logging;
+
+ typedef std::map<DataObjectImpl*, createLogItem> CREATELOG_MAP;
+ typedef std::map<DataObjectImpl*, deleteLogItem> DELETELOG_MAP;
+ typedef std::map<DataObjectImpl*, changeLogItem> CHANGELOG_MAP;
+
+ CHANGELOG_MAP changedMap;
+ CREATELOG_MAP createdMap;
+ DELETELOG_MAP deletedMap;
+
+ ChangedDataObjectListImpl changedDataObjects;
+
+
+
+
+
+};
+};
+};
+#endif //_CHANGESUMMARYIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectList.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectList.h
new file mode 100644
index 0000000000..e28973041f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectList.h
@@ -0,0 +1,91 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _CHANGEDDATAOBJECTLIST_H_
+#define _CHANGEDDATAOBJECTLIST_H_
+
+
+#include "commonj/sdo/RefCountingPointer.h"
+
+#include <vector>
+
+/**
+ * namespace commonj is the root namespace for SDO
+ */
+
+namespace commonj{
+
+/**
+ * sdo is the namespace holding the SDO core
+ */
+
+namespace sdo{
+
+class DataObject;
+
+/**
+ *
+ * A list for holding a record of changes which have happened
+ * during logging in a change summary.
+ */
+
+class ChangedDataObjectList
+{
+
+public:
+
+/** \enum ChangeType
+ *
+ * An enum for create, change or delete types in a change record
+ */
+ enum ChangeType
+ {
+ Undefined,
+ Create,
+ Change,
+ Delete
+ };
+
+/** [] is the index operator.
+ *
+ * Gets the nth element of a list
+ */
+ virtual SDO_API DataObjectPtr operator[] (int pos) = 0;
+ virtual SDO_API const DataObjectPtr operator[] (int pos) const = 0;
+
+/** size() returns the number of list elements.
+ *
+ * Returns the number of list elements
+ */
+
+ virtual SDO_API int size () const = 0;
+
+/** getType() returns the type of a list element.
+ *
+ * The type of change is one of the enum ChangeType, being a
+ * creation, a deletion or an update.
+ */
+
+ virtual SDO_API ChangeType getType(unsigned int index) = 0;
+
+};
+};
+};
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.cpp
new file mode 100644
index 0000000000..7462376f01
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.cpp
@@ -0,0 +1,248 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+
+#include "commonj/sdo/ChangedDataObjectListImpl.h"
+
+
+#include <iostream>
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/Logger.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/DataObjectImpl.h"
+
+
+namespace commonj{
+namespace sdo {
+
+ /** CDOListElement
+ *
+ * constructor
+ */
+
+ CDOListElement::CDOListElement()
+ {
+ theObject = 0;
+ theType = ChangedDataObjectList::Undefined;
+ }
+
+ /** CDOListElement
+ *
+ * constructor from a data object and a change
+ */
+
+ CDOListElement::CDOListElement(DataObject* in, ChangedDataObjectList::ChangeType type)
+ {
+ theObject = in;
+ theType = type;
+ }
+
+ /** ~CDOListElement()
+ *
+ * destructor
+ */
+
+ CDOListElement::~CDOListElement()
+ {
+ }
+
+ /** getObject()
+ *
+ * return the changed data object
+ */
+
+ DataObject* CDOListElement::getObject() const
+ {
+ return theObject;
+ }
+
+ /**
+ *
+ * return the type of change getType()
+ */
+
+ ChangedDataObjectList::ChangeType CDOListElement::getType() const
+ {
+ return theType;
+ }
+
+ /** ChangedDataObjectListImpl
+ *
+ * constructor
+ */
+
+ ChangedDataObjectListImpl::ChangedDataObjectListImpl(CHANGEDDATAOBJECT_VECTOR p) : plist (p)
+ {
+ }
+
+ /** ChangedDataObjectListImpl
+ *
+ * copy constructor
+ */
+
+ ChangedDataObjectListImpl::ChangedDataObjectListImpl(const ChangedDataObjectListImpl &pin)
+ {
+ plist = std::vector< CDOListElement >(pin.getVec());
+ }
+
+ /** ChangedDataObjectListImpl
+ *
+ * default constructor
+ */
+
+ ChangedDataObjectListImpl::ChangedDataObjectListImpl()
+ {
+ }
+
+
+ /** ~ChangedDataObjectListImpl
+ *
+ * destructor
+ */
+
+ ChangedDataObjectListImpl::~ChangedDataObjectListImpl()
+ {
+ }
+
+ /** [] index operator
+ *
+ *
+ */
+
+ RefCountingPointer<DataObject> ChangedDataObjectListImpl::operator[] (int pos)
+ {
+ validateIndex(pos);
+ return plist[pos].getObject();
+ }
+
+ /** [] index operator
+ *
+ *
+ */
+
+ const RefCountingPointer<DataObject> ChangedDataObjectListImpl::operator[] (int pos) const
+ {
+ validateIndex(pos);
+ return plist[pos].getObject();
+ }
+
+ /** get() gets an element at the index.
+ *
+ */
+
+ DataObject* ChangedDataObjectListImpl::get(unsigned int pos)
+ {
+ validateIndex(pos);
+ return plist[pos].getObject();
+ }
+
+ /** size() returns the length of the list.
+ *
+ *
+ */
+
+ int ChangedDataObjectListImpl::size () const
+ {
+ return plist.size();
+ }
+
+ /** getVec()
+ * gets the vector which actually stores the data objects.
+ */
+
+ CHANGEDDATAOBJECT_VECTOR ChangedDataObjectListImpl::getVec() const
+ {
+ return plist;
+ }
+
+ /** getType()
+ * returns the type of the change.
+ */
+
+ ChangedDataObjectList::ChangeType ChangedDataObjectListImpl::getType(unsigned int pos)
+ {
+ validateIndex(pos);
+ return plist[pos].getType();
+ }
+
+
+ /** insert()
+ * inserts an element into the list.
+ */
+
+ void ChangedDataObjectListImpl::insert (unsigned int index,
+ DataObject *d, ChangedDataObjectList::ChangeType type)
+ {
+ plist.insert(plist.begin()+index, CDOListElement((DataObject*)d,type));
+ }
+
+ /** append()
+ * appends to the end of the list.
+ */
+
+ void ChangedDataObjectListImpl::append (DataObject *d, ChangedDataObjectList::ChangeType type)
+ {
+ plist.insert(plist.end(),CDOListElement((DataObject*)d, type));
+ }
+
+ /** clear()
+ * empties the list.
+ */
+
+ void ChangedDataObjectListImpl::clear ()
+ {
+ plist.clear();
+ }
+
+
+ /** remove()
+ * removes an item from the list.
+ */
+
+ void ChangedDataObjectListImpl::remove(unsigned int index)
+ {
+ validateIndex(index);
+ plist.erase(plist.begin() +index);
+ return ;
+ }
+
+ /** validateIndex()
+ * checks that the index is in range.
+ */
+
+ void ChangedDataObjectListImpl::validateIndex(int index) const
+ {
+ if ((index < 0) || (index >= size()))
+ {
+ std::string msg("Invalid index : ");
+ msg += index;
+ SDO_THROW_EXCEPTION("(ChangeSummary)validateIndex", SDOIndexOutOfRangeException,
+ msg.c_str());
+
+ }
+
+ }
+
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.h
new file mode 100644
index 0000000000..9587a8402d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ChangedDataObjectListImpl.h
@@ -0,0 +1,97 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _ChangedDataObjectListImplIMPL_H_
+#define _ChangedDataObjectListImplIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+
+#include <vector>
+
+#include "commonj/sdo/ChangedDataObjectList.h"
+namespace commonj{
+namespace sdo{
+
+class DataObjectImpl;
+class DataObject;
+
+/**
+ * CDOListElement is an element of the changed data object list
+ * in a change summary,it may be a delete, addition or change.
+ */
+
+class CDOListElement
+{
+public:
+ CDOListElement ();
+ CDOListElement (DataObject* in, ChangedDataObjectList::ChangeType type);
+ virtual ~CDOListElement();
+ virtual ChangedDataObjectList::ChangeType getType() const;
+ virtual DataObject* getObject() const;
+private:
+ DataObject* theObject;
+ ChangedDataObjectList::ChangeType theType;
+};
+
+typedef std::vector< CDOListElement > CHANGEDDATAOBJECT_VECTOR;
+
+
+/**
+ * ChangedDataObjectListImpl implements ChangedDataObjectList, part of a
+ * change summary.
+ * This is the list of objects which have been altered during
+ * logging of a change summary.
+ */
+
+class ChangedDataObjectListImpl : public ChangedDataObjectList
+{
+
+public:
+ ChangedDataObjectListImpl(CHANGEDDATAOBJECT_VECTOR p);
+ ChangedDataObjectListImpl(const ChangedDataObjectListImpl &pin);
+ ChangedDataObjectListImpl();
+
+ virtual ~ChangedDataObjectListImpl();
+ virtual DataObjectPtr operator[] (int pos);
+ virtual const DataObjectPtr operator[] (int pos) const;
+ virtual DataObject* get(unsigned int pos);
+ virtual ChangedDataObjectList::ChangeType getType(unsigned int pos);
+
+
+ virtual int size () const;
+
+ virtual void insert (unsigned int index, DataObject *d, ChangedDataObjectList::ChangeType type);
+
+ virtual void append (DataObject* d, ChangedDataObjectList::ChangeType type);
+
+ virtual void clear();
+
+ virtual void remove (unsigned int index);
+
+
+private:
+ CHANGEDDATAOBJECT_VECTOR plist;
+ CHANGEDDATAOBJECT_VECTOR getVec() const;
+
+ void validateIndex(int index) const;
+};
+};
+};
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.cpp
new file mode 100644
index 0000000000..9581160044
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.cpp
@@ -0,0 +1,264 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/07 08:25:11 $ */
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeList.h"
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/DataObjectImpl.h"
+
+
+#include "commonj/sdo/CopyHelper.h"
+
+namespace commonj{
+namespace sdo{
+
+ /** CopyHelper provides static copying helper functions.
+ *
+ * CopyHelper provides shallow and deep copy of data objects.
+ * copyShallow() copies the DataType members of the data object.
+ * copy() copies all the members and recurses downwards though
+ * the data graph
+ */
+
+ void CopyHelper::transferitem(DataObjectPtr to, DataObjectPtr from, const Property& p)
+ {
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ to->setBoolean( p, from->getBoolean(p));
+ break;
+ case Type::ByteType:
+ to->setByte( p, from->getByte(p));
+ break;
+ case Type::CharacterType:
+ to->setCharacter( p, from->getCharacter(p));
+ break;
+ case Type::IntegerType:
+ to->setInteger( p, from->getInteger(p));
+ break;
+ case Type::ShortType:
+ to->setShort( p,from->getShort(p));
+ break;
+ case Type::DoubleType:
+ to->setDouble( p, from->getDouble(p));
+ break;
+ case Type::FloatType:
+ to->setFloat( p, from->getFloat(p));
+ break;
+ case Type::LongType:
+ to->setLong( p, from->getLong(p));
+ break;
+ case Type::DateType:
+ to->setDate( p, from->getDate(p));
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::UriType:
+ case Type::StringType:
+ {
+ unsigned int siz = from->getLength(p);
+ if (siz > 0)
+ {
+ wchar_t * buf = new wchar_t[siz];
+ from->getString(p,buf, siz);
+ to->setString(p, buf, siz);
+ delete buf;
+ }
+ }
+ break;
+ case Type::BytesType:
+ {
+ unsigned int siz = from->getLength(p);
+ if (siz > 0)
+ {
+ char * buf = new char[siz];
+ from->getBytes(p,buf, siz);
+ to->setBytes(p, buf, siz);
+ delete buf;
+ }
+ }
+ break;
+ default:
+ break;
+ } // switch
+ }
+
+ void CopyHelper::transferlist(DataObjectList& to, DataObjectList& from, Type::Types t)
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ switch (t)
+ {
+ case Type::BooleanType:
+ to.append(from.getBoolean(i));
+ break;
+ case Type::ByteType:
+ to.append(from.getByte(i));
+ break;
+ case Type::CharacterType:
+ to.append(from.getCharacter(i));
+ break;
+#if __WORDSIZE ==64
+ case Type::IntegerType:
+ to.append((int64_t)(from.getInteger(i)));
+ break;
+#else
+ case Type::IntegerType:
+ to.append(from.getInteger(i));
+ break;
+#endif
+ case Type::ShortType:
+ to.append(from.getShort(i));
+ break;
+ case Type::DoubleType:
+ to.append(from.getDouble(i));
+ break;
+ case Type::FloatType:
+ to.append(from.getFloat(i));
+ break;
+ case Type::LongType:
+ to.append(from.getLong(i));
+ break;
+ case Type::DateType:
+ to.append(from.getDate(i));
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::UriType:
+ case Type::StringType:
+ {
+ unsigned int siz = from.getLength(i);
+ if (siz > 0)
+ {
+ wchar_t * buf = new wchar_t[siz];
+ from.getString(i,buf,siz);
+ to.append(buf,siz);
+ delete buf;
+ }
+ }
+ break;
+
+ case Type::BytesType:
+ {
+ unsigned int siz = from.getLength(i);
+ if (siz > 0)
+ {
+ char * buf = new char[siz];
+ from.getBytes(i,buf,siz);
+ to.append(buf,siz);
+ delete buf;
+ }
+ }
+ break;
+
+ default:
+ break;
+ } // case
+ } // for
+ } // method
+
+ /** CopyHelper provides static copying helper functions.
+ *
+ * copyShallow() copies the DataType members of the data object.
+ * copy() copies all the members and recurses downwards though
+ * the data graph
+ */
+ DataObjectPtr CopyHelper::copyShallow(DataObjectPtr dataObject)
+ {
+ return internalCopy(dataObject, false);
+
+ }
+
+ /** CopyHelper provides static copying helper functions.
+ *
+ * copyShallow() copies the DataType members of the data object.
+ * copy() copies all the members and recurses downwards though
+ * the data graph
+ */
+ DataObjectPtr CopyHelper::copy(DataObjectPtr dataObject)
+ {
+ return internalCopy(dataObject, true);
+ }
+
+ DataObjectPtr CopyHelper::internalCopy(DataObjectPtr dataObject,
+ bool fullCopy)
+ {
+
+ DataObject* theob = dataObject;
+ DataFactoryPtr fac = ((DataObjectImpl*)theob)->getDataFactory();
+ if (!fac) return 0;
+
+ const Type& t = dataObject->getType();
+ DataObjectPtr newob = fac->create(t);
+ if (!newob) return 0;
+
+ PropertyList pl = dataObject->getInstanceProperties();
+ for (int i=0;i < pl.size(); i++)
+ {
+ if (dataObject->isSet(pl[i]))
+ {
+ // data objects are only copied in the deep copy case
+ if (pl[i].getType().isDataObjectType())
+ {
+ if (!fullCopy)
+ {
+ continue;
+ }
+ else
+ {
+ if (pl[i].isMany())
+ {
+ DataObjectList& dolold = dataObject->getList(pl[i]);
+ DataObjectList& dolnew = newob->getList(pl[i]);
+ for (int i=0;i< dolold.size(); i++)
+ {
+ dolnew.append(internalCopy(dolold[i],true));
+ }
+ }
+ else
+ {
+ DataObjectPtr dob = dataObject->getDataObject(pl[i]);
+ newob->setDataObject(pl[i],internalCopy(dob,true));
+ }
+ }
+ }
+ else
+ {
+ if (pl[i].isMany())
+ {
+ DataObjectList& dolold = dataObject->getList(pl[i]);
+ DataObjectList& dolnew = newob->getList(pl[i]);
+ transferlist(dolnew,dolold, pl[i].getTypeEnum());
+ }
+ else
+ {
+ transferitem(newob,dataObject, pl[i]);
+ }
+ } // else
+ }
+ }
+ return newob;
+ }
+
+
+}
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.h
new file mode 100644
index 0000000000..954333a15b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/CopyHelper.h
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _COPYHELPER_H_
+#define _COPYHELPER_H_
+
+
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/RefCountingPointer.h"
+
+namespace commonj{
+namespace sdo{
+
+ /** CopyHelper provides static copying helper functions.
+ *
+ * CopyHelper provides shallow and deep copy of data objects.
+ * copyShallow() copies the DataType members of the data object.
+ * copy() copies all the members and recurses downwards though
+ * the data graph
+ */
+
+class CopyHelper
+{
+ public:
+
+ /** CopyHelper provides static copying helper functions.
+ *
+ * CopyHelper provides shallow and deep copy of data objects.
+ * copyShallow() copies the DataType members of the data object.
+ * copy() copies all the members and recurses downwards though
+ * the data graph
+ */
+ static SDO_API DataObjectPtr copyShallow(DataObjectPtr dataObject);
+
+ /** CopyHelper provides static copying helper functions.
+ *
+ * CopyHelper provides shallow and deep copy of data objects.
+ * copyShallow() copies the DataType members of the data object.
+ * copy() copies all the members and recurses downwards though
+ * the data graph
+ */
+ static SDO_API DataObjectPtr copy(DataObjectPtr dataObject);
+
+ private:
+ static void transferlist(DataObjectList& to, DataObjectList& from, Type::Types t);
+ static void transferitem(DataObjectPtr to, DataObjectPtr from, const Property& p);
+ static DataObjectPtr internalCopy(DataObjectPtr dataObject, bool fullCopy);
+
+};
+};
+};
+
+#endif //_COPYHELPER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.cpp
new file mode 100644
index 0000000000..ed4dc5f8ba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.cpp
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/DASProperty.h"
+
+
+namespace commonj{
+namespace sdo{
+
+
+ DASProperty::~DASProperty()
+ {
+ }
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.h
new file mode 100644
index 0000000000..9cff3a7967
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASProperty.h
@@ -0,0 +1,46 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _DASPROPERTY_H_
+#define _DASPROPERTY_H_
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/DASValues.h"
+
+#include "commonj/sdo/disable_warn.h"
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * DASProperty is a class to provide data access services
+ * with a more flexible Property
+ */
+
+ class DASProperty : public Property, public DASValues
+{
+ public:
+
+ virtual ~DASProperty();
+
+
+
+};
+};
+};
+#endif //_DMSDATAOBJECT_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.cpp
new file mode 100644
index 0000000000..d249f1a2f0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.cpp
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/DASType.h"
+
+
+namespace commonj{
+namespace sdo{
+
+
+ DASType::~DASType()
+ {
+ }
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.h
new file mode 100644
index 0000000000..56f0fa2571
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASType.h
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/03/01 08:52:41 $ */
+
+#ifndef _DASTYPE_H_
+#define _DASTYPE_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/DASValues.h"
+namespace commonj{
+namespace sdo{
+
+/**
+ * DASType is a class to provide data access services
+ * with a more flexible Type
+ */
+
+class DASType : public Type, public DASValues
+{
+ public:
+
+ virtual ~DASType();
+
+
+
+ virtual void setOpen(bool set) = 0;
+ virtual void setSequenced( bool set) = 0;
+ virtual void setBaseType( const Type* type, bool isRestriction=false) = 0;
+
+
+
+};
+};
+};
+#endif //_DASDATAOBJECT_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.cpp
new file mode 100644
index 0000000000..66f493b84e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.cpp
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/DASValue.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ DASValue::DASValue()
+ {
+ }
+
+ DASValue::DASValue(const char* val)
+ : value(val)
+ {
+ }
+
+ DASValue::~DASValue()
+ {
+
+ }
+
+ const char* DASValue::getValue() const
+ {
+ return value.c_str();
+ }
+
+
+ }
+}
+// end - namespace sdo
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.h
new file mode 100644
index 0000000000..f15a24aae4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValue.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _SDO_DASValue_H_
+#define _SDO_DASValue_H_
+
+
+#include "commonj/sdo/export.h"
+#include "string"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * DASValue is a class to hold information required by data
+ * access services but not required by the data factory.
+ */
+ class DASValue
+ {
+ public:
+ SDO_API DASValue();
+ SDO_API DASValue(const char* value);
+ SDO_API virtual ~DASValue();
+ SDO_API const char* getValue() const;
+
+ private:
+ std::string value;
+
+ };
+
+ }
+}
+#endif //_SDO_DASValue_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.cpp
new file mode 100644
index 0000000000..aac9702cfd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.cpp
@@ -0,0 +1,68 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/DASValues.h"
+
+using namespace std;
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * DASValues is a class to hold list of information required by data
+ * access services but not required by the data factory.
+ */
+
+ DASValues::~DASValues()
+ {
+ DASValue_MAP::iterator propertyIter;
+ for (propertyIter = properties.begin() ; propertyIter != properties.end() ; ++propertyIter)
+ {
+ delete propertyIter->second;
+ }
+ }
+
+ void DASValues::setDASValue(const char* name, DASValue* property)
+ {
+ DASValue* prop = getDASValue(name);
+ if (prop != 0 && prop != property)
+ {
+ delete prop;
+ }
+ properties[name] = property;
+ }
+
+ DASValue* DASValues::getDASValue(const char* name)
+ {
+ DASValue_MAP::iterator propertyIter;
+ propertyIter = properties.find(name);
+ if(propertyIter != properties.end())
+ {
+ return propertyIter->second;
+ }
+ return NULL;
+
+ }
+
+ }
+}
+// end - namespace sdo
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.h
new file mode 100644
index 0000000000..6c5ba835c3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DASValues.h
@@ -0,0 +1,57 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _SDO_DASValues_H_
+#define _SDO_DASValues_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/DASValue.h"
+#include "map"
+#include "string"
+
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * DASValues is a class to hold list of information required by data
+ * access services but not required by the data factory.
+ */
+
+ class DASValues
+ {
+ public:
+ SDO_API virtual ~DASValues();
+ SDO_API virtual void setDASValue(const char* name, DASValue* value);
+ SDO_API virtual DASValue* getDASValue(const char* name);
+ private:
+
+ typedef std::map<std::string, DASValue*> DASValue_MAP;
+ DASValue_MAP properties;
+
+ };
+
+ }
+}
+#endif //_SDO_DASValues_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.cpp
new file mode 100644
index 0000000000..026ed5c871
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.cpp
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * DataFactory holds metadata and creates DataObjects.
+ *
+ * The DataFactory holds properties and types loaded from XSD, or
+ * created using the DataFactory API.
+ */
+
+ DataFactory::~DataFactory()
+ {
+ }
+
+ RefCountingPointer<DataFactory> DataFactory::getDataFactory()
+ {
+ DataFactory* dob = (DataFactory*)(new DataFactoryImpl());
+ return RefCountingPointer<DataFactory> (dob);
+ }
+
+ RefCountingPointer<DataFactory> DataFactory::clone()
+ {
+ const DataFactoryImpl* df = (const DataFactoryImpl*)this;
+ DataFactory* dob = (DataFactory*)(new DataFactoryImpl(*df));
+ return RefCountingPointer<DataFactory> (dob);
+ }
+
+};
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.h
new file mode 100644
index 0000000000..7ee7b1b229
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactory.h
@@ -0,0 +1,806 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/07 13:35:33 $ */
+
+#ifndef _DATAFACTORY_H_
+#define _DATAFACTORY_H_
+
+#include "commonj/sdo/export.h"
+
+#include "commonj/sdo/TypeList.h"
+
+#include "commonj/sdo/RefCountingObject.h"
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/SDODate.h"
+#include "commonj/sdo/DASValue.h"
+#include "commonj/sdo/SDOString.h"
+
+
+namespace commonj{
+namespace sdo{
+
+class DataObject;
+class Type;
+
+/**
+ * DataFactory holds metadata and creates DataObjects.
+ *
+ * The DataFactory holds properties and types loaded from XSD, or
+ * created using the DataFactory API.
+ */
+
+class DataFactory : public RefCountingObject
+{
+ public:
+
+
+ /**
+ * getDataFactory is static and gets a data factory
+ *
+ * Static method to get a new data factory, with a set of base Types defined.
+ * With the data factory returned, either load Type definitions
+ * from XSD, or use the DataFactory APIs to define the types.
+ */
+
+ static SDO_API DataFactoryPtr getDataFactory();
+
+ virtual SDO_API ~DataFactory();
+
+
+ /**
+ * DataFactory::clone copies a data factory
+ *
+ * Copy the data factory, and return a new data factory which
+ * has the same properties and types, but is still able to have
+ * new types added to it.
+ */
+
+ SDO_API virtual DataFactoryPtr clone();
+
+ /**
+ * DataFactory::create creates a data object.
+ *
+ * Create a data object based on the type specified as a parameter
+ * Once a data object has been created by this factory, the metadata
+ * (types and properties) may no longer be altered.
+ */
+
+ SDO_API virtual DataObjectPtr create(const char* uri, const char* typeName) = 0;
+
+ SDO_API virtual DataObjectPtr create(const SDOString& uri, const SDOString& typeName) = 0;
+
+ SDO_API virtual DataObjectPtr create(const Type& type) = 0;
+
+ /**
+ * DataFactory::getType gets a type back from the factory.
+ *
+ * Get a type as specified in the data factory. Useful for creating
+ * data objects or querying properties.
+ */
+
+ virtual const Type& getType(const char* uri, const char* inTypeName) const = 0;
+
+ virtual const Type& getType(const SDOString& uri, const SDOString& inTypeName) const = 0;
+
+
+ /**
+ * DataFactory::getTypes gets a list of types back from the factory.
+ *
+ * Get all the types available within this data factory. Useful for
+ * validating whether a data object is of the correct type to be
+ * usable.
+ */
+
+ virtual TypeList getTypes() const = 0;
+
+ /**
+ * DataFactory::addType adds a type definition.
+ *
+ * Add a type defintion to the factory. (Properties may be added later).
+ * The type is defined by its uri and name.
+ * -# The type may be sequenced - and therefore work with a sequence API.
+ * -# The type may be open, indicating that it may have extra properties
+ * added at runtime.
+ * -# The type may be abstract, so the data factory will not permit creation
+ * of instances.
+ * -# The type may be a data type, indicating that is will not have properties.
+ * The Type may inherit from another type, but that is specified later with a
+ * call to setBaseType().
+ */
+
+
+ virtual SDO_API void addType(const char* uri, const char* inTypeName,
+ bool isSequenced = false,
+ bool isOpen = false,
+ bool isAbstract = false,
+ bool isDataType = false) = 0;
+
+ virtual SDO_API void addType(const SDOString& uri, const SDOString& inTypeName,
+ bool isSequenced = false,
+ bool isOpen = false,
+ bool isAbstract = false,
+ bool isDataType = false) = 0;
+
+
+ /**
+ * DataFactory::setBaseType allows inheritance
+ *
+ * The type specified second in the parameters becomes the basetype
+ * of the first parameter.
+ * The second type will have all the properties of its baser type, followed
+ * by any additional properties of its own. The property indices of the properties
+ * of the subclass will begin at one more than the total number of
+ * properties of the supertype
+ * This relationship is fixed when the first data object of any type is
+ * created by the factory. Up to that point the base type may be changed.
+ *
+ */
+
+ virtual SDO_API void setBaseType(
+ const Type& type,
+ const Type& base,
+ bool isRestriction = false) = 0;
+
+ virtual SDO_API void setBaseType(
+ const char* typeuri,
+ const char* typenam,
+ const char* baseuri,
+ const char* basename,
+ bool isRestriction = false) = 0;
+
+ virtual SDO_API void setBaseType(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& baseuri,
+ const SDOString& basename,
+ bool isRestriction = false) = 0;
+
+
+ /**
+ * Generate a typesafe interface for a given data factory
+ * test code.
+ */
+
+ virtual SDO_API bool generateInterface(const char* fileroot,
+ const char *factoryname) = 0;
+
+ virtual SDO_API bool generateInterface(const SDOString& fileroot,
+ const SDOString& factoryname) = 0;
+
+
+
+ /**
+ * DataFactory::setAlias sets an alternative name
+ *
+ * A Type may be known to the data factory by several different names.
+ * This method adds a new name for an existing property.
+ *
+ */
+
+ virtual SDO_API void setAlias(const char* typeuri,
+ const char* typenam,
+ const char* alias) = 0;
+
+ virtual SDO_API void setAlias(const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& alias) = 0;
+
+ /**
+ * DataFactory::addPropertyToType adds properties
+ *
+ * The various addPropertyToType methods add a property to an
+ * existing type in the factory, specifying the name of the new property,
+ * and the type of the new property - which must also be an existing type
+ * in this factory.
+ * -# The new property may be many-valued - so it will be a list of values.
+ * -# The property may be read-only , and may not be altered by user code -
+ * However the value may be changed by data access service code.
+ * -# The property may be containment.
+ * The type of a property may be DataType, or DataObjectType (see Types).
+ * If the property is a DataType, then the actual value of the property is held
+ * within the data object containing the property.
+ * If the property is a DataObjectType, it may be containment, or reference.
+ * Containment indicates that the value of the property is contained in the
+ * data object, whilst reference indicates that the property is only a pointer to
+ * a value somewhere else in the data graph.
+ *
+ */
+
+
+ virtual SDO_API void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany ,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const Type& propType,
+ bool isMany ,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany ,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const char* propname,
+ const Type& propType,
+ bool isMany ,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany ,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany ,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany ,
+ bool isReadOnly ,
+ bool isContainment ) = 0;
+
+ virtual SDO_API void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany = false) =0;
+
+ virtual SDO_API void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany = false) =0;
+
+ virtual SDO_API void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const Type& propType,
+ bool isMany = false) =0;
+
+ virtual SDO_API void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany = false) =0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const char* propname,
+ const Type& propType,
+ bool isMany = false) =0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany = false) =0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany = false) =0;
+
+ virtual SDO_API void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany = false) =0;
+
+ /**
+ * DataFactory::setOpposite sets an opposite name
+ *
+ * NOT IMPLEMENTED.
+ *
+ */
+
+ virtual SDO_API void setOpposite(
+ const Type& type,
+ const char* propName,
+ const Type& oppositetype,
+ const char* oppositePropName) = 0;
+
+ virtual SDO_API void setOpposite(
+ const Type& type,
+ const SDOString& propName,
+ const Type& oppositetype,
+ const SDOString& oppositePropName) = 0;
+
+ /**
+ * DataFactory::setAlias sets a property alias name
+ *
+ * A property, like a type, may be known to the factory by several
+ * names.
+ */
+
+ virtual SDO_API void setAlias(const char* typeuri,
+ const char* typname,
+ const char* propname,
+ const char* alias) = 0;
+
+ virtual SDO_API void setAlias(const SDOString& typeuri,
+ const SDOString& typname,
+ const SDOString& propname,
+ const SDOString& alias) = 0;
+
+ /**
+ * DataFactory::setPropertySubstitute sets a substitute for a property
+ *
+ * A property is of a specified type. However this method specifies another type
+ * which will be accepted by the data factory at runtime as a substitute for this
+ * property, and will be inserted into the parent data object as though it was
+ * a value for this property. The substitute name is then used for this property
+ * as a sort of alias.
+ * names.
+ */
+
+ virtual SDO_API void setPropertySubstitute(
+ const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* subname,
+ const char* subTypeUri,
+ const char* subTypeName) = 0;
+
+ virtual SDO_API void setPropertySubstitute(
+ const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& subname,
+ const SDOString& subTypeUri,
+ const SDOString& subTypeName) = 0;
+
+ virtual SDO_API void setPropertySubstitute(
+ const Type& containertype,
+ const char* propname,
+ const char* subname,
+ const Type& subtype) = 0;
+
+ virtual SDO_API void setPropertySubstitute(
+ const Type& containertype,
+ const SDOString& propname,
+ const SDOString& subname,
+ const Type& subtype) = 0;
+
+
+ /**
+ * DataFactory::setDefault sets a default value for a property
+ *
+ * When querying the value of a property of a data object, that property
+ * may be set - indicating that a value has been assigned, or unset - indicating that
+ * no value has yet been assigned.
+ * If there is no value assigned, then a default value may be returned for that
+ * property.
+ * This method allows the data factory to define that default value.
+ * There is no default value for a DataObjectType. There are overloads for
+ * each of the primitive DataTypes.
+ */
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname,
+ bool b ) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname,
+ bool b ) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ char c) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ char c) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ wchar_t c) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ wchar_t c) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ char* c) = 0;
+
+// #pragma message( "GMW: Unimplemented method, writable string parameter" )
+// virtual SDO_API void setDefault(
+// const Type& t,
+// const SDOString& propname ,
+// SDOString& c) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ short s) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ short s) = 0;
+
+
+#if __WORDSIZE !=64
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ long l) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ long l) = 0;
+#endif
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ int64_t i) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ int64_t i) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ float f) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ float f) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ long double d) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ long double d) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ const wchar_t* c,
+ unsigned int len) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ const wchar_t* c,
+ unsigned int len) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ const char* c,
+ unsigned int len) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ const SDOString& c,
+ unsigned int len) = 0;
+
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const char* propname ,
+ const SDODate dat) = 0;
+
+ virtual SDO_API void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ const SDODate dat) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname,
+ bool b ) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname,
+ bool b ) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ char c) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ char c) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ wchar_t c) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ wchar_t c) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ char* c) = 0;
+
+// #pragma message( "GMW: Unimplemented method, writable string parameter" )
+// virtual SDO_API void setDefault(
+// const SDOString& typuri,
+// const SDOString& typnam,
+// const SDOString& propname ,
+// SDOString& c) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ short s) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ short s) = 0;
+
+
+#if __WORDSIZE !=64
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ long l) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ long l) = 0;
+
+#endif
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ int64_t i) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ int64_t i) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ float f) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ float f) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ long double d) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ long double d) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ const wchar_t* c,
+ unsigned int len) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ const wchar_t* c,
+ unsigned int len) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ const char* c,
+ unsigned int len) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ const SDOString& c,
+ unsigned int len) = 0;
+
+ virtual SDO_API void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ const SDODate dat) = 0;
+
+ virtual SDO_API void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ const SDODate dat) = 0;
+
+
+ /**
+ * DAS values are used by a DAS implementation
+ */
+
+ virtual SDO_API void setDASValue(
+ const Type& type,
+ const char* name,
+ DASValue* value) = 0;
+
+ virtual SDO_API void setDASValue(
+ const Type& type,
+ const SDOString& name,
+ DASValue* value) = 0;
+
+ virtual SDO_API void setDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* name,
+ DASValue* value) = 0;
+
+ virtual SDO_API void setDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& name,
+ DASValue* value) = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const Type& type,
+ const char* name) const = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const Type& type,
+ const SDOString& name) const = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* name) const = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& name) const = 0;
+
+ virtual SDO_API void setDASValue(
+ const Type& type,
+ const char* propertyName,
+ const char* name,
+ DASValue* value) = 0;
+
+ virtual SDO_API void setDASValue(
+ const Type& type,
+ const SDOString& propertyName,
+ const SDOString& name,
+ DASValue* value) = 0;
+
+ virtual SDO_API void setDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* propertyName,
+ const char* name,
+ DASValue* value) = 0;
+
+ virtual SDO_API void setDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& propertyName,
+ const SDOString& name,
+ DASValue* value) = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const Type& type,
+ const char* propertyName,
+ const char* name) const = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const Type& type,
+ const SDOString& propertyName,
+ const SDOString& name) const = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* propertyName,
+ const char* name) const = 0;
+
+ virtual SDO_API DASValue* getDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& propertyName,
+ const SDOString& name) const = 0;
+
+ virtual void resolve() = 0;
+
+ };
+};
+};
+#endif //_DATAFACTORY_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.cpp
new file mode 100644
index 0000000000..d3cb033c6e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.cpp
@@ -0,0 +1,2271 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/13 08:35:04 $ */
+
+//////////////////////////////////////////////////////////////////////
+// DataFactoryImpl.cpp: implementation of the DataFactory class.
+//
+//////////////////////////////////////////////////////////////////////
+#include "commonj/sdo/SDORuntimeException.h"
+
+#include "commonj/sdo/DataFactoryImpl.h"
+#include "commonj/sdo/DataObjectImpl.h"
+
+#include "commonj/sdo/Logger.h"
+
+
+#include "commonj/sdo/PropertyList.h"
+
+#include <iostream>
+#include <stdio.h>
+
+
+using namespace std;
+using namespace commonj::sdo;
+
+namespace commonj{
+namespace sdo {
+
+// ===================================================================
+// Constructor
+// ===================================================================
+DataFactoryImpl::DataFactoryImpl()
+{
+
+ /* add the primitives to every mdg - */
+
+ isResolved = false;
+ addType(Type::SDOTypeNamespaceURI,"BigDecimal");
+ addType(Type::SDOTypeNamespaceURI,"BigInteger");
+ addType(Type::SDOTypeNamespaceURI,"Boolean");
+
+ addType(Type::SDOTypeNamespaceURI,"Byte");
+ addType(Type::SDOTypeNamespaceURI,"Bytes");
+ addType(Type::SDOTypeNamespaceURI,"Character");
+
+ addType(Type::SDOTypeNamespaceURI,"String");
+ addType(Type::SDOTypeNamespaceURI,"DataObject");
+ addType(Type::SDOTypeNamespaceURI,"OpenDataObject", true, true, false, false);
+ addType(Type::SDOTypeNamespaceURI,"Date");
+ addType(Type::SDOTypeNamespaceURI,"Double");
+ addType(Type::SDOTypeNamespaceURI,"Float");
+ addType(Type::SDOTypeNamespaceURI,"Integer");
+ addType(Type::SDOTypeNamespaceURI,"Long");
+ addType(Type::SDOTypeNamespaceURI,"Short");
+ addType(Type::SDOTypeNamespaceURI,"URI");
+
+ // abstract
+ addType(Type::SDOTypeNamespaceURI,"ChangeSummary");
+
+ rootElementName.erase();
+
+
+
+}
+
+// ===================================================================
+// Destructor
+// ===================================================================
+DataFactoryImpl::~DataFactoryImpl()
+{
+
+ TYPES_MAP::iterator typeIter;
+ for (typeIter = types.begin() ; typeIter != types.end() ; ++typeIter)
+ {
+ if (strncmp((typeIter->first).c_str(),"ALIAS::", 7))
+ {
+ delete typeIter->second;
+ }
+ }
+
+ rootElementName.erase();
+
+}
+
+// ===================================================================
+// get the root element name
+// ===================================================================
+// const char* DataFactoryImpl::getRootElementName() const
+const SDOString& DataFactoryImpl::getRootElementName() const
+{
+ return rootElementName;
+}
+
+// ===================================================================
+// set the root element name
+// ===================================================================
+void DataFactoryImpl::setRootElementName(const char* ren)
+{
+
+ // If the incoming string is meaningful then use it to reset the stored
+ // value. Otherwise, just erase what we have.
+
+ if (ren != 0 && (strlen(ren) != 0))
+ {
+ rootElementName = ren;
+ }
+ else
+ {
+ rootElementName.erase();
+ }
+
+}
+
+void DataFactoryImpl::setRootElementName(const SDOString& ren)
+{
+ rootElementName = ren;
+}
+
+// ===================================================================
+// copy constructor
+// ===================================================================
+DataFactoryImpl::DataFactoryImpl(const DataFactoryImpl& inmdg)
+{
+ isResolved = false;
+ setRootElementName(inmdg.getRootElementName());
+ copyTypes(inmdg);
+}
+
+// ===================================================================
+// Assignment operator
+// ===================================================================
+DataFactoryImpl& DataFactoryImpl::operator=(const DataFactoryImpl& inmdg)
+{
+ if (this != &inmdg)
+ {
+ copyTypes(inmdg);
+ setRootElementName(inmdg.getRootElementName());
+ }
+ return *this;
+}
+
+// ===================================================================
+// copy Types to this DataFactory
+// ===================================================================
+void DataFactoryImpl::copyTypes(const DataFactoryImpl& inmdg)
+{
+
+ if (isResolved)
+ {
+ SDO_THROW_EXCEPTION("copyTypes",
+ SDOUnsupportedOperationException, "Copying Type after data graph completed");
+ }
+
+ TYPES_MAP::const_iterator typeIter;
+ TYPES_MAP::iterator typeIter2;
+ char* fullTypeName;
+
+ for (typeIter = inmdg.types.begin() ; typeIter != inmdg.types.end() ; ++typeIter)
+ {
+ // add this type to this metadata
+ addType((typeIter->second)->getURI(), (typeIter->second)->getName());
+
+ // re-find the type we just added.
+ fullTypeName = getFullTypeName(
+ (typeIter->second)->getURI(),
+ (typeIter->second)->getName());
+ typeIter2 = types.find(fullTypeName);
+ if (fullTypeName)delete fullTypeName;
+
+ // copy the aliases , if there are any.
+
+ if ((typeIter->second)->getAliasCount() > 0)
+ {
+ for (int j=0;j<(typeIter->second)->getAliasCount();j++)
+ {
+ (typeIter2->second)->setAlias(
+ (typeIter->second)->getAlias());
+ }
+ }
+
+
+ // Now add all the properties
+ PropertyList props = typeIter->second->getProperties();
+ for (int i=0; i < props.size(); i++)
+ {
+ // Ensure the properties type is added
+ const Type& propType = props[i].getType();
+ addType(propType.getURI(), propType.getName());
+
+ // Now add the property
+ addPropertyToType((typeIter->second)->getURI(),
+ (typeIter->second)->getName(),
+ props[i].getName(),
+ propType.getURI(),
+ propType.getName(),
+ props[i].isMany(),
+ props[i].isReadOnly(),
+ props[i].isContainment());
+
+ // copy the aliases if there are any.
+ if (props[i].getAliasCount() > 0)
+ {
+
+ PropertyImpl* p = (typeIter2->second)->
+ getPropertyImpl(props[i].getName());
+ if (p != 0)
+ {
+ for (int j=0;j<p->getAliasCount();j++)
+ {
+ p->setAlias(props[i].getAlias(j));
+ }
+ }
+
+ }
+
+ } // end - iterate over Properties
+ } // end - iterate over Types
+}
+
+// ===================================================================
+// addType - adds a new Type if it does not already exist
+// ===================================================================
+void DataFactoryImpl::addType(const char* uri, const char* inTypeName,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData)
+{
+ addType(uri,inTypeName,isSeq,isOp,isAbs,isData,false);
+}
+
+void DataFactoryImpl::addType(const SDOString& uri, const SDOString& inTypeName,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData)
+{
+ addType(uri.c_str(),inTypeName.c_str(),isSeq,isOp,isAbs,isData,false);
+}
+
+void DataFactoryImpl::addType(const char* uri, const char* inTypeName,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData,
+ bool isFromList)
+{
+
+
+ if (isResolved)
+ {
+ SDO_THROW_EXCEPTION("DataFactory::addType",
+ SDOUnsupportedOperationException, "Adding Type after data graph completed");
+ }
+
+ if (inTypeName == 0 || strlen(inTypeName) == 0)
+ {
+ SDO_THROW_EXCEPTION("DataFactory::addType",
+ SDOIllegalArgumentException, " Type has empty name");
+ }
+
+
+ if (findType(uri, inTypeName) == 0)
+ {
+ char* fullTypeName = getFullTypeName(uri, inTypeName);
+ types[fullTypeName] = new TypeImpl(uri, inTypeName, isSeq, isOp, isAbs, isData, isFromList);
+ if (fullTypeName)delete fullTypeName;
+
+ }
+}
+
+void DataFactoryImpl::addType(const SDOString& uri, const SDOString& inTypeName,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData,
+ bool isFromList)
+{
+ addType(uri.c_str(), inTypeName.c_str(), isSeq, isOp, isAbs, isData, isFromList);
+}
+
+// ===================================================================
+// Check whether a change summary would clash.
+// ===================================================================
+
+bool DataFactoryImpl::recursiveCheck(TypeImpl* cs, TypeImpl* t)
+{
+ if (cs->isDataType()) return false;
+
+ if (! strcmp(cs->getName(), t->getName()) &&
+ ! strcmp(cs->getURI() , t->getURI()) )
+ {
+ return true;
+ }
+
+ PropertyList pl = cs->getProperties();
+
+ for (int i=0 ; i < pl.size() ; i++ )
+ {
+ if (recursiveCheck((TypeImpl*)&(pl[i].getType()), t)) return true;
+ }
+ return false;
+}
+
+// ===================================================================
+// Check whether a change summary would clash.
+// ===================================================================
+bool DataFactoryImpl::checkForValidChangeSummary(TypeImpl* t)
+{
+ // None of the containing types can have a cs already.
+ // None of the properties of this type can hold a type
+ // which has a change summary.
+ if (isResolved)
+ {
+ SDO_THROW_EXCEPTION("DataFactory::addChangeSummary",
+ SDOUnsupportedOperationException, "Adding Change Summary after data graph completed");
+ }
+
+ if (cstypes.size() > 0) {
+ for (int i = 0 ;i < cstypes.size(); i++)
+ {
+ if (recursiveCheck(cstypes[i], t))
+ {
+ return false;
+
+ }
+ }
+ }
+ cstypes.push_back(t);
+ return true;
+}
+
+// ===================================================================
+// addPropertyToType - adds a Property to an existing Type
+// ===================================================================
+void DataFactoryImpl::addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool many)
+{
+ char* fullPropTypeName = getFullTypeName(propTypeUri, propTypeName);
+ TYPES_MAP::iterator typeIter;
+ typeIter = types.find(fullPropTypeName);
+ if (fullPropTypeName)delete fullPropTypeName;
+ if (typeIter != types.end())
+ {
+ addPropertyToType(uri,inTypeName,
+ propname,
+ propTypeUri,
+ propTypeName,
+ many,
+ false,
+ !(typeIter->second)->isDataType());
+ }
+}
+
+void DataFactoryImpl::addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool many)
+{
+ addPropertyToType(uri.c_str(), inTypeName.c_str(), propname.c_str(), propTypeUri.c_str(), propTypeName.c_str(), many);
+}
+
+void DataFactoryImpl::addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool many,
+ bool rdonly,
+ bool cont)
+{
+ if (isResolved)
+ {
+ SDO_THROW_EXCEPTION("DataFactory::addPropertyToType",
+ SDOUnsupportedOperationException, "Adding Properties after data graph completed");
+ }
+
+
+
+ TYPES_MAP::iterator typeIter, typeIter2;
+
+ //cout << "Adding property " << propname << "(" << propTypeUri << "#" << propTypeName
+ // << ") to type " << uri << "#" << inTypeName << endl;
+
+
+ char* fullTypeName = getFullTypeName(uri, inTypeName);
+ typeIter = types.find(fullTypeName);
+ if (fullTypeName)delete fullTypeName;
+
+ if(typeIter == types.end())
+ {
+ string msg("Type not found: ");
+ if (uri != 0)msg += uri;
+ msg += " ";
+ if (inTypeName != 0)msg += inTypeName;
+ SDO_THROW_EXCEPTION("addPropertyToType",
+ SDOTypeNotFoundException, msg.c_str());
+
+ }
+
+ if ((typeIter->second)->isDataType())
+ {
+ string msg("Cannot add property ");
+ msg += propname;
+ msg += " of type ";
+ msg += propTypeUri;
+ msg += "#";
+ msg += propTypeName;
+ msg += " to this data type ";
+ msg += uri;
+ msg += "#";
+ msg += inTypeName;
+ SDO_THROW_EXCEPTION("addPropertyToType",
+ SDOIllegalArgumentException, msg.c_str());
+ }
+
+ fullTypeName = getFullTypeName(propTypeUri, propTypeName);
+ typeIter2 = types.find(fullTypeName);
+ if (fullTypeName)delete fullTypeName;
+
+ if (typeIter2 == types.end())
+ {
+ string msg("Type not found: ");
+ if (propTypeUri != 0)msg += propTypeUri;
+ msg += " ";
+ if (propTypeName != 0)msg += propTypeName;
+ SDO_THROW_EXCEPTION("addPropertyToType",
+ SDOTypeNotFoundException, msg.c_str());
+ }
+
+ // Check if its a ChangeSummary
+ if (propTypeUri != 0 && !strcmp(propTypeUri,Type::SDOTypeNamespaceURI.c_str()) &&
+ !strcmp(propTypeName,"ChangeSummary") )
+ {
+ if (checkForValidChangeSummary(typeIter->second))
+ {
+ // The change summary is allowable if we got to here - force the right params.
+ // we will not use this property - its just for compatibility.
+ // we have to use getChangeSummary to get the change summary,
+ // and isChangeSummaryType to see if this is a type which may have
+ // a change summary.
+ (typeIter->second)->addChangeSummary();
+ // dont even show the property - its not needed
+ //((typeIter->second)->addProperty(propname, *(typeIter2->second),false,true, false));
+
+ }
+ return;
+ }
+
+
+ if ((typeIter->second)->isDataType())
+ {
+ string msg("Cannot add property to a data type : ");
+ msg += (typeIter->second)->getName();
+ SDO_THROW_EXCEPTION("addPropertyToType",
+ SDOIllegalArgumentException, msg.c_str());
+ // cannot add a property to a primitive
+ }
+
+ // @PGR@ containment should be ignored for DataType
+/* if ((typeIter2->second)->isDataType() && cont == true)
+ {
+ string msg("Data types may not be containment : ");
+ msg += (typeIter2->second)->getName();
+ SDO_THROW_EXCEPTION("addPropertyToType",
+ SDOIllegalArgumentException, msg.c_str());
+ // cannot try to make a property containment on a data type
+ }
+*/
+ ((typeIter->second)->addProperty(propname, *(typeIter2->second),many,rdonly, cont));
+ return;
+}
+
+void DataFactoryImpl::addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool many,
+ bool rdonly,
+ bool cont)
+{
+ addPropertyToType(uri.c_str(),
+ inTypeName.c_str(),
+ propname.c_str(),
+ propTypeUri.c_str(),
+ propTypeName.c_str(),
+ many,
+ rdonly,
+ cont);
+}
+
+// ===================================================================
+// addPropertyToType - adds a Property to an existing Type
+// ===================================================================
+
+void DataFactoryImpl::addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const Type& tprop,
+ bool many)
+{
+ addPropertyToType(uri,
+ inTypeName,
+ propname,
+ tprop,
+ many,
+ false,
+ !tprop.isDataType());
+}
+
+void DataFactoryImpl::addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const Type& tprop,
+ bool many)
+{
+ addPropertyToType(uri.c_str(),
+ inTypeName.c_str(),
+ propname.c_str(),
+ tprop,
+ many,
+ false,
+ !tprop.isDataType());
+}
+
+void DataFactoryImpl::addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const Type& tprop,
+ bool many,
+ bool rdonly,
+ bool cont)
+{
+ addPropertyToType(uri,
+ inTypeName,
+ propname,
+ tprop.getURI(),
+ tprop.getName(),
+ many,
+ rdonly, cont);
+}
+
+void DataFactoryImpl::addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const Type& tprop,
+ bool many,
+ bool rdonly,
+ bool cont)
+{
+ addPropertyToType(uri.c_str(),
+ inTypeName.c_str(),
+ propname.c_str(),
+ tprop.getURI(),
+ tprop.getName(),
+ many,
+ rdonly,
+ cont);
+}
+
+// ===================================================================
+// addPropertyToType - adds a Property to an existing Type
+// ===================================================================
+void DataFactoryImpl::addPropertyToType(const Type& cont,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool many)
+{
+ addPropertyToType(cont.getURI(),
+ cont.getName(),
+ propname,
+ propTypeUri,
+ propTypeName,
+ many);
+}
+
+void DataFactoryImpl::addPropertyToType(const Type& cont,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool many)
+{
+ addPropertyToType(cont.getURI(),
+ cont.getName(),
+ propname.c_str(),
+ propTypeUri.c_str(),
+ propTypeName.c_str(),
+ many);
+}
+
+void DataFactoryImpl::addPropertyToType(const Type& cont,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool many,
+ bool rdonly,
+ bool contain)
+{
+ addPropertyToType(cont.getURI(),
+ cont.getName(),
+ propname,
+ propTypeUri,
+ propTypeName,
+ many,
+ rdonly,
+ contain);
+}
+
+void DataFactoryImpl::addPropertyToType(const Type& cont,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool many,
+ bool rdonly,
+ bool contain)
+{
+ addPropertyToType(cont.getURI(),
+ cont.getName(),
+ propname.c_str(),
+ propTypeUri.c_str(),
+ propTypeName.c_str(),
+ many,
+ rdonly,
+ contain);
+}
+
+// ===================================================================
+// addPropertyToType - adds a Property to an existing Type
+// ===================================================================
+void DataFactoryImpl::addPropertyToType(const Type& tp,
+ const char* propname,
+ const Type& tprop,
+ bool many)
+{
+ addPropertyToType(tp.getURI(),
+ tp.getName(),
+ propname,
+ tprop.getURI(),
+ tprop.getName(),
+ many);
+}
+
+void DataFactoryImpl::addPropertyToType(const Type& tp,
+ const SDOString& propname,
+ const Type& tprop,
+ bool many)
+{
+ addPropertyToType(tp.getURI(),
+ tp.getName(),
+ propname.c_str(),
+ tprop.getURI(),
+ tprop.getName(),
+ many);
+}
+
+void DataFactoryImpl::addPropertyToType(const Type& tp,
+ const char* propname,
+ const Type& tprop,
+ bool many,
+ bool rdonly,
+ bool cont)
+{
+ addPropertyToType(tp.getURI(),
+ tp.getName(),
+ propname,
+ tprop.getURI(),
+ tprop.getName(),
+ many,
+ rdonly,
+ cont);
+}
+
+void DataFactoryImpl::addPropertyToType(const Type& tp,
+ const SDOString& propname,
+ const Type& tprop,
+ bool many,
+ bool rdonly,
+ bool cont)
+{
+ addPropertyToType(tp.getURI(),
+ tp.getName(),
+ propname.c_str(),
+ tprop.getURI(),
+ tprop.getName(),
+ many,
+ rdonly,
+ cont);
+}
+
+// ===================================================================
+// getFullTypeName - return the name used as a key in the types map
+// ===================================================================
+char* DataFactoryImpl::getFullTypeName(const char* uri, const char* inTypeName) const
+{
+ char* c;
+ if (uri != 0 && inTypeName != 0)
+ {
+ c = new char[strlen(uri) + strlen(inTypeName) + 2];
+ sprintf(c,"%s#%s",uri,inTypeName);
+ return c;
+ }
+ if (uri != 0)
+ {
+ c = new char[strlen(uri) + 2];
+ sprintf(c,"%s#",uri);
+ return c;
+ }
+ c = new char[strlen(inTypeName) + 2];
+ sprintf(c,"#%s",inTypeName);
+ return c;
+}
+
+char* DataFactoryImpl::getFullTypeName(const SDOString& uri, const SDOString& inTypeName) const
+{
+ return getFullTypeName(uri.c_str(), inTypeName.c_str());
+}
+
+// ===================================================================
+// getFullTypeName - return the name used as a key in the types map
+// ===================================================================
+char* DataFactoryImpl::getAliasTypeName(const char* uri, const char* inTypeName) const
+{
+ char* c;
+ if (uri != 0 && inTypeName != 0)
+ {
+ c = new char[strlen(uri) + strlen(inTypeName) + 9];
+ sprintf(c,"ALIAS::%s#%s",uri,inTypeName);
+ return c;
+ }
+ if (uri != 0)
+ {
+ c = new char[strlen(uri) + 9];
+ sprintf(c,"ALIAS::%s#",uri);
+ return c;
+ }
+ c = new char[strlen(inTypeName) + 9];
+ sprintf(c,"ALIAS::#%s",inTypeName);
+ return c;
+}
+
+char* DataFactoryImpl::getAliasTypeName(const SDOString& uri, const SDOString& inTypeName) const
+{
+ return getAliasTypeName(uri.c_str(), inTypeName.c_str());
+}
+
+// ===================================================================
+// getType - return a pointer to the required Type
+// ===================================================================
+const Type& DataFactoryImpl::getType(const char* uri, const char* inTypeName) const
+{
+
+ const Type* type = findType(uri, inTypeName);
+
+ if (type == 0)
+ {
+ string msg("Type not found :");
+ if (uri != 0) msg += uri;
+ msg += " ";
+ if (inTypeName != 0) msg += inTypeName;
+ SDO_THROW_EXCEPTION("getType" ,
+ SDOTypeNotFoundException, msg.c_str());
+ }
+
+ return *type;
+}
+
+const Type& DataFactoryImpl::getType(const SDOString& uri, const SDOString& inTypeName) const
+{
+ return getType(uri.c_str(), inTypeName.c_str());
+}
+
+// ===================================================================
+// setBaseType - sets the type from which this type inherits properties
+// ===================================================================
+
+void DataFactoryImpl::setBaseType( const Type& type,
+ const Type& base, bool isRestriction)
+{
+ setBaseType(type.getURI(),type.getName(),base.getURI(), base.getName(),
+ isRestriction);
+}
+
+// ===================================================================
+// setBaseType - sets the type from which this type inherits properties
+// ===================================================================
+
+void DataFactoryImpl::setBaseType( const char* typeuri,
+ const char* typenam,
+ const char* baseuri,
+ const char* basename,
+ bool isRestriction )
+{
+ const TypeImpl* base = findTypeImpl(baseuri, basename);
+ if (base == 0)
+ {
+ string msg("Type not found :");
+ if (baseuri != 0) msg += baseuri;
+ msg += " ";
+ if (basename != 0) msg += basename;
+ SDO_THROW_EXCEPTION("setBaseType" ,
+ SDOTypeNotFoundException, msg.c_str());
+ }
+
+ TYPES_MAP::const_iterator typeIter;
+
+ char* fullTypeName = getFullTypeName(typeuri, typenam);
+ typeIter = types.find(fullTypeName);
+ if (fullTypeName)delete fullTypeName;
+
+ if(typeIter == types.end())
+ {
+ string msg("Type not found :");
+ if (typeuri != 0) msg += typeuri;
+ msg += " ";
+ if (typenam != 0) msg += typenam;
+ SDO_THROW_EXCEPTION("setBaseType" ,
+ SDOTypeNotFoundException, msg.c_str());
+ }
+
+ (typeIter->second)->setBaseType(base, isRestriction);
+}
+
+void DataFactoryImpl::setBaseType(const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& baseuri,
+ const SDOString& basename,
+ bool isRestriction)
+{
+ setBaseType(typeuri.c_str(),
+ typenam.c_str(),
+ baseuri.c_str(),
+ basename.c_str(),
+ isRestriction);
+}
+
+
+// ===================================================================
+// setPropertySubstitute - additional type for a property
+// ===================================================================
+
+ void DataFactoryImpl::setPropertySubstitute(
+ const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* subname,
+ const char* subTypeUri,
+ const char* subTypeName)
+ {
+ const TypeImpl* cont = findTypeImpl(uri, inTypeName);
+ if (cont == 0)
+ {
+ string msg("Type not found :");
+ if (uri != 0) msg += uri;
+ msg += " ";
+ if (inTypeName != 0) msg += inTypeName;
+ SDO_THROW_EXCEPTION("setPropertySubstitute" ,
+ SDOTypeNotFoundException, msg.c_str());
+ }
+ PropertyImpl* pi = cont->getPropertyImpl(propname);
+ const Type& tsub = getType(subTypeUri,
+ subTypeName);
+ if (pi != 0)pi->setSubstitution(this,subname,tsub);
+ }
+
+ void DataFactoryImpl::setPropertySubstitute(
+ const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& subname,
+ const SDOString& subTypeUri,
+ const SDOString& subTypeName)
+ {
+ setPropertySubstitute(uri.c_str(),
+ inTypeName.c_str(),
+ propname.c_str(),
+ subname.c_str(),
+ subTypeUri.c_str(),
+ subTypeName.c_str());
+ }
+
+ void DataFactoryImpl::setPropertySubstitute(
+ const Type& containertype,
+ const char* propname,
+ const char* subname,
+ const Type& subtype)
+ {
+ setPropertySubstitute(
+ containertype.getURI(),
+ containertype.getName(),
+ propname,subname,
+ subtype.getURI(),subtype.getName());
+ }
+
+ void DataFactoryImpl::setPropertySubstitute(
+ const Type& containertype,
+ const SDOString& propname,
+ const SDOString& subname,
+ const Type& subtype)
+ {
+ setPropertySubstitute(containertype, propname.c_str(), subname.c_str(), subtype);
+ }
+// ===================================================================
+// setDefault - sets the default value for a property of a type
+// ===================================================================
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname, bool b )
+ {
+ setDefault(t.getURI(), t.getName(), propname, b);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname, bool b )
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), b);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , char c)
+
+ {
+ setDefault(t.getURI(), t.getName(), propname, c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , char c)
+
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , wchar_t c)
+ {
+ setDefault(t.getURI(), t.getName(), propname, c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , wchar_t c)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , char* c)
+ {
+ setDefault(t.getURI(), t.getName(), propname, c);
+ }
+
+// #pragma message( "GMW: Unimplemented method, writable string parameter" )
+// void DataFactoryImpl::setDefault(
+// const Type& t, const SDOString& propname , SDOString& c)
+// {
+// setDefault(t.getURI(), t.getName(), propname.c_str(), c.c_str());
+// }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , short s)
+ {
+ setDefault(t.getURI(), t.getName(), propname, s);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , short s)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), s);
+ }
+
+#if __WORDSIZE !=64
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , long l)
+ {
+ setDefault(t.getURI(), t.getName(), propname, l);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , long l)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), l);
+ }
+
+#endif
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , int64_t i)
+ {
+ setDefault(t.getURI(), t.getName(), propname, i);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , int64_t i)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), i);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , float f)
+ {
+ setDefault(t.getURI(), t.getName(), propname, f);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , float f)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), f);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , long double d)
+ {
+ setDefault(t.getURI(), t.getName(), propname, d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , long double d)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , const SDODate d)
+ {
+ setDefault(t.getURI(), t.getName(), propname, d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , const SDODate d)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , const wchar_t* c, unsigned int len)
+ {
+ setDefault(t.getURI(), t.getName(), propname, c, len);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , const wchar_t* c, unsigned int len)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), c, len);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const char* propname , const char* c, unsigned int len)
+ {
+ setDefault(t.getURI(), t.getName(), propname, c, len);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const Type& t, const SDOString& propname , const SDOString& c, unsigned int len)
+ {
+ setDefault(t.getURI(), t.getName(), propname.c_str(), c.c_str(), len);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname, bool b )
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(b);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname, bool b )
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), b);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , char c)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , char c)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , wchar_t c)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , wchar_t c)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), c);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , char* c)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(c);
+ }
+
+// #pragma message( "GMW: Unimplemented method, writable string parameter" )
+// void DataFactoryImpl::setDefault(
+// const SDOString& typuri, const SDOString& typnam,
+// const SDOString& propname , SDOString& c)
+// {
+// setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), c.c_str());
+// }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , short s)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(s);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , short s)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), s);
+ }
+
+#if __WORDSIZE !=64
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , long l)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(l);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , long l)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), l);
+ }
+
+#endif
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , int64_t i)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(i);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , int64_t i)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), i);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , float f)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(f);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , float f)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), f);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , long double d)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , long double d)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , const SDODate d)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , const SDODate d)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), d);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , const wchar_t* c, unsigned int len)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(c,len);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , const wchar_t* c, unsigned int len)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), c, len);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const char* typuri, const char* typnam,
+ const char* propname , const char* c, unsigned int len)
+ {
+ const TypeImpl* ti = findTypeImpl(typuri,typnam);
+ PropertyImpl* pi = ti->getPropertyImpl(propname);
+ if (pi != 0)pi->setDefault(c,len);
+ }
+
+ void DataFactoryImpl::setDefault(
+ const SDOString& typuri, const SDOString& typnam,
+ const SDOString& propname , const SDOString& c, unsigned int len)
+ {
+ setDefault(typuri.c_str(), typnam.c_str(), propname.c_str(), c.c_str(), len);
+ }
+
+ void DataFactoryImpl::setOpposite(
+ const Type& typ,
+ const char* propnam,
+ const Type& opptyp,
+ const char* opppropnam)
+ {
+ SDO_THROW_EXCEPTION("setOpposite" ,
+ SDOUnsupportedOperationException, " Not implemented");
+ }
+
+ void DataFactoryImpl::setOpposite(
+ const Type& typ,
+ const SDOString& propnam,
+ const Type& opptyp,
+ const SDOString& opppropnam)
+ {
+ setOpposite(typ, propnam.c_str(), opptyp, opppropnam.c_str());
+ }
+
+// ===================================================================
+// getTypeImpl - return a pointer to the required TypeImpl
+// ===================================================================
+const TypeImpl& DataFactoryImpl::getTypeImpl(const char* uri, const char* inTypeName) const
+{
+ const TypeImpl* type = findTypeImpl(uri, inTypeName);
+
+ if (type == 0)
+ {
+ string msg("Type not found :");
+ if (uri != 0)msg += uri;
+ msg += " ";
+ if (inTypeName != 0)msg += inTypeName;
+ SDO_THROW_EXCEPTION("getTypeImpl" ,
+ SDOTypeNotFoundException, msg.c_str());
+ }
+
+ return *type;
+}
+
+const TypeImpl& DataFactoryImpl::getTypeImpl(const SDOString& uri, const SDOString& inTypeName) const
+{
+ return getTypeImpl(uri.c_str(), inTypeName.c_str());
+}
+
+// ===================================================================
+// findType
+// ===================================================================
+
+const Type* DataFactoryImpl::findType(const char* uri, const char* inTypeName) const
+{
+ return (Type*)findTypeImpl(uri,inTypeName);
+}
+
+const Type* DataFactoryImpl::findType(const SDOString uri, const SDOString inTypeName) const
+{
+ return (Type*) findTypeImpl(uri.c_str(), inTypeName.c_str());
+}
+
+// ===================================================================
+// findTypeImpl
+// ===================================================================
+
+const TypeImpl* DataFactoryImpl::findTypeImpl(const SDOString& uri, const SDOString& inTypeName) const
+{
+ return findTypeImpl(uri.c_str(), inTypeName.c_str());
+}
+
+const TypeImpl* DataFactoryImpl::findTypeImpl(const char* uri, const char* inTypeName) const
+{
+ char* fullTypeName = getFullTypeName(uri, inTypeName);
+ TYPES_MAP::const_iterator typeIter;
+ typeIter = types.find(fullTypeName);
+ if (fullTypeName)delete fullTypeName;
+ if(typeIter != types.end())
+ {
+ return typeIter->second;
+ }
+ else
+ {
+ // try alias names
+ fullTypeName = getAliasTypeName(uri, inTypeName);
+ typeIter = types.find(fullTypeName);
+ if (fullTypeName)delete fullTypeName;
+ if(typeIter != types.end())
+ {
+ return typeIter->second;
+ }
+ }
+ return 0;
+}
+
+// ===================================================================
+// setAlias - sets a new alias for this type
+// ===================================================================
+
+void DataFactoryImpl::setAlias(const char* typeuri,
+ const char* typenam,
+ const char* alias)
+{
+
+ char* fullTypeName = getFullTypeName(typeuri, typenam);
+ TYPES_MAP::iterator typeIter;
+ typeIter = types.find(fullTypeName);
+ if (fullTypeName)delete fullTypeName;
+ if(typeIter != types.end())
+ {
+ (typeIter->second)->setAlias(alias);
+ fullTypeName = getAliasTypeName(typeuri, alias);
+ types[fullTypeName] = typeIter->second;
+ }
+
+}
+
+void DataFactoryImpl::setAlias(const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& alias)
+{
+ setAlias(typeuri.c_str(), typenam.c_str(), alias.c_str());
+}
+
+// ===================================================================
+// setAlias - sets a new alias for this type
+// ===================================================================
+
+void DataFactoryImpl::setAlias(const char* typeuri,
+ const char* typenam,
+ const char* propname,
+ const char* alias)
+{
+ const TypeImpl& t = getTypeImpl(typeuri, typenam);
+ PropertyImpl* p = t.getPropertyImpl(propname);
+ if (p != 0)p->setAlias(alias);
+
+}
+
+void DataFactoryImpl::setAlias(const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& propname,
+ const SDOString& alias)
+{
+ setAlias(typeuri.c_str(), typenam.c_str(), propname.c_str(), alias.c_str());
+}
+
+// ===================================================================
+// getTypes - gets the full list of types for this factory
+// ===================================================================
+
+TypeList DataFactoryImpl::getTypes() const
+{
+ TYPES_MAP::const_iterator typeIter;
+
+
+ std::vector<const Type*> typeVector;
+
+ for (typeIter = types.begin() ; typeIter != types.end();
+ ++typeIter) {
+ if (strncmp((typeIter->first).c_str(),"ALIAS::", 7)) {
+ typeVector.insert(typeVector.end(),typeIter->second);
+ }
+ }
+
+
+ return typeVector;
+}
+
+
+// ===================================================================
+// resolve - resolves the type and includes all the properties from
+// the supertype. After this has been called, no further changes
+// to the type hierarchy are allowed.
+// ===================================================================
+
+void DataFactoryImpl::resolve()
+{
+ if (isResolved) return;
+
+ TYPES_MAP::iterator typeIter;
+ for (typeIter = types.begin() ; typeIter != types.end();
+ ++typeIter)
+ {
+ (typeIter->second)->initCompoundProperties();
+ (typeIter->second)->validateChangeSummary();
+ }
+
+ isResolved = true;
+}
+
+// ===================================================================
+// create - creates a data object from the types available.
+// This first resolves the type hierarchy, and thus no further changes
+// to the type hierarchy are allowed.
+// ===================================================================
+
+
+RefCountingPointer<DataObject> DataFactoryImpl::create(const char* uri, const char* typeName)
+{
+
+ if (!isResolved)
+ {
+ // Allow creation of types and properties before resolve.
+ if (uri != 0 && !strcmp(uri,Type::SDOTypeNamespaceURI.c_str())) {
+ if (!strcmp(typeName,"Type") || !strcmp(typeName,"Property"))
+ {
+ DataObject* dob = (DataObject*)(new DataObjectImpl(this, getTypeImpl(uri, typeName)));
+ return dob;
+ }
+ }
+ resolve();
+ }
+
+ const TypeImpl* ti = findTypeImpl(uri,typeName);
+ if (ti == 0)
+ {
+ string msg("Instantiation of unknown type :");
+ if (uri != 0) msg += uri;
+ msg += " ";
+ if (typeName != 0)msg += typeName;
+ SDO_THROW_EXCEPTION("create" ,
+ SDOTypeNotFoundException, msg.c_str());
+ }
+
+ if (ti->isAbstractType())
+ {
+ string msg("Instantiation of abstract type :");
+ if (uri != 0)msg += uri;
+ msg += " ";
+ if (typeName != 0)msg += typeName;
+ SDO_THROW_EXCEPTION("create" ,
+ SDOUnsupportedOperationException, msg.c_str());
+ }
+
+ DataObject* dob = (DataObject*)(new DataObjectImpl(this, getTypeImpl(uri, typeName)));
+ return dob;
+}
+
+// ===================================================================
+// create - creates a data object from the types available.
+// This first resolves the type hierarchy, and thus no further changes
+// to the type hierarchy are allowed.
+// ===================================================================
+
+
+RefCountingPointer<DataObject> DataFactoryImpl::create(const SDOString& uri, const SDOString& typeName)
+{
+ return create(uri.c_str(), typeName.c_str());
+}
+
+// ===================================================================
+// The openProperties map is a list of the curently present open
+// properties as used by this factory. It will cause the
+// open properties to be written out as attributes and elements
+// of the root data object when a graph is serialized.
+// ===================================================================
+ const propertyMap& DataFactoryImpl::getOpenProperties()
+ {
+ return openProperties;
+ }
+
+ void DataFactoryImpl::addOpenProperty(const PropertyImpl& prop)
+ {
+ propertyMap::iterator i;
+ while ((i = openProperties.find(prop.getName())) !=
+ openProperties.end())
+ {
+ openProperties.erase(i);
+ }
+ openProperties.insert(make_pair(prop.getName(),prop));
+ }
+
+ void DataFactoryImpl::removeOpenProperty(const SDOString& name)
+ {
+ removeOpenProperty(name.c_str());
+ }
+ void DataFactoryImpl::removeOpenProperty(const char* name)
+ {
+ propertyMap::iterator i =
+ openProperties.find(name);
+ if (i != openProperties.end())
+ {
+ openProperties.erase(i);
+ }
+ }
+
+
+// ===================================================================
+// create - creates a data object from the types available.
+// This first resolves the type hierarchy, and thus no further changes
+// to the type hierarchy are allowed.
+// ===================================================================
+
+RefCountingPointer<DataObject> DataFactoryImpl::create(const Type& type)
+{
+ return create( type.getURI(), type.getName());
+}
+
+
+// ===================================================================
+// setDASValue - Set a value on a Type
+// ===================================================================
+void DataFactoryImpl::setDASValue(const Type& type,
+ const char* name,
+ DASValue* value)
+{
+ setDASValue(type.getURI(), type.getName(), name, value);
+}
+
+void DataFactoryImpl::setDASValue(const Type& type,
+ const SDOString& name,
+ DASValue* value)
+{
+ setDASValue(type.getURI(), type.getName(), name.c_str(), value);
+}
+
+void DataFactoryImpl::setDASValue(const char* typeuri,
+ const char* typenam,
+ const char* name,
+ DASValue* value)
+{
+ TypeImpl* type = (TypeImpl*)findTypeImpl(typeuri, typenam);
+ if (type != NULL)
+ {
+ type->setDASValue(name, value);
+ }
+}
+
+void DataFactoryImpl::setDASValue(const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& name,
+ DASValue* value)
+{
+ setDASValue(typeuri.c_str(), typenam.c_str(), name.c_str(), value);
+}
+
+// ===================================================================
+// getDASValue - retrieve a value from a Type
+// ===================================================================
+
+DASValue* DataFactoryImpl::getDASValue(const Type& type,
+ const char* name) const
+{
+ return getDASValue(type.getURI(), type.getName(), name);
+}
+
+DASValue* DataFactoryImpl::getDASValue(const Type& type,
+ const SDOString& name) const
+{
+ return getDASValue(type.getURI(), type.getName(), name.c_str());
+}
+
+DASValue* DataFactoryImpl::getDASValue(const char* typeuri,
+ const char* typenam,
+ const char* name) const
+{
+ TypeImpl* type = (TypeImpl*)findTypeImpl(typeuri, typenam);
+ if (type != NULL)
+ {
+ return type->getDASValue(name);
+ }
+
+ return NULL;
+}
+
+DASValue* DataFactoryImpl::getDASValue(const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& name) const
+{
+ return getDASValue(typeuri.c_str(), typenam.c_str(), name.c_str());
+}
+
+// ===================================================================
+// setDASValue - Set a value on a Property
+// ===================================================================
+void DataFactoryImpl::setDASValue(
+ const Type& type,
+ const char* propertyName,
+ const char* name,
+ DASValue* value)
+{
+ setDASValue(type.getURI(), type.getName(), propertyName, name, value);
+}
+
+void DataFactoryImpl::setDASValue(
+ const Type& type,
+ const SDOString& propertyName,
+ const SDOString& name,
+ DASValue* value)
+{
+ setDASValue(type.getURI(), type.getName(), propertyName.c_str(), name.c_str(), value);
+}
+
+void DataFactoryImpl::setDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* propertyName,
+ const char* name,
+ DASValue* value)
+{
+ const TypeImpl* type = findTypeImpl(typeuri, typenam);
+ if (type != NULL)
+ {
+ PropertyImpl* prop = type->getPropertyImplPure(propertyName);
+ if (prop != 0)prop->setDASValue(name, value);
+ }
+}
+
+void DataFactoryImpl::setDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& propertyName,
+ const SDOString& name,
+ DASValue* value)
+{
+ setDASValue(typeuri.c_str(), typenam.c_str(), propertyName.c_str(), name.c_str(), value);
+}
+
+// ===================================================================
+// getDASValue - retrieve a value from a Property
+// ===================================================================
+DASValue* DataFactoryImpl::getDASValue(
+ const Type& type,
+ const char* propertyName,
+ const char* name) const
+{
+ return getDASValue(type.getURI(), type.getName(), propertyName, name);
+}
+
+DASValue* DataFactoryImpl::getDASValue(
+ const Type& type,
+ const SDOString& propertyName,
+ const SDOString& name) const
+{
+ return getDASValue(type.getURI(), type.getName(), propertyName.c_str(), name.c_str());
+}
+
+DASValue* DataFactoryImpl::getDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* propertyName,
+ const char* name) const
+{
+ const TypeImpl* type = findTypeImpl(typeuri, typenam);
+ if (type != NULL)
+ {
+ try
+ {
+ PropertyImpl* prop = type->getPropertyImpl(propertyName);
+ if (prop != 0)return prop->getDASValue(name);
+ }
+ catch (const SDOPropertyNotFoundException&)
+ {
+ // Ignore - return null
+ }
+ }
+
+ return NULL;
+}
+
+DASValue* DataFactoryImpl::getDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& propertyName,
+ const SDOString& name) const
+{
+ return getDASValue(typeuri.c_str(), typenam.c_str(), propertyName.c_str(), name.c_str());
+}
+
+bool DataFactoryImpl::compareTypes(const TypeImpl* t1, const Type& t2)
+{
+ PropertyList pl = t2.getProperties();
+ for (int i=0;i<pl.size();i++)
+ {
+ PropertyImpl* p = t1->getPropertyImpl(i);
+ if (p == 0) return false;
+ if (p->isMany() != pl[i].isMany()) return false;
+ if (p->isContainment() != pl[i].isContainment()) return false;
+ if (strcmp( p->getType().getURI(),
+ pl[i].getType().getURI())) return false;
+ if (strcmp( p->getType().getName(),
+ pl[i].getType().getName())) return false;
+ }
+ return true;
+
+}
+bool DataFactoryImpl::checkType(const Type& t)
+{
+ const TypeImpl* t2 = findTypeImpl(t.getURI(),
+ t.getName());
+
+ if (t2 == 0) return false;
+
+ if (!compareTypes(t2,t)) return false;
+
+ PropertyList pl = t.getProperties();
+ for (int i=0;i<pl.size();i++)
+ {
+ if (pl[i].getType().isDataObjectType())
+ {
+ if (!checkType(pl[i].getType())) return false;
+ }
+ }
+ return true;
+}
+
+
+// only checks the tree dirctly descended from this object if the
+// object is specified, otherwise validates the whole factory
+
+bool DataFactoryImpl::isCompatible(DataFactory* df, DataObject* d)
+{
+ if (d == 0)
+ {
+ TypeList tl = df->getTypes();
+ for (int j=0;j<tl.size();j++)
+ {
+ const TypeImpl* t = findTypeImpl(tl[j].getURI(),
+ tl[j].getName());
+
+ if (t == 0) return false;
+ if (!compareTypes(t,tl[j]))return false;
+ }
+ return true;
+ }
+ else
+ {
+ return checkType(d->getType());
+ }
+}
+
+bool DataFactoryImpl::generateInterface(const char* fileroot, const char* factoryname)
+{
+
+ FILE* header;
+ FILE* body;
+
+ if ((fileroot == 0) || (strlen(fileroot) == 0)) return false;
+
+ if (factoryname == 0 || (strlen(factoryname) == 0)) return false;
+
+
+ char *headername = new char[strlen(fileroot) + 5];
+ char *bodyname = new char[strlen(fileroot) + 5];
+ strcpy(headername,fileroot);
+ strcpy(bodyname,fileroot);
+ strcat(headername,".h");
+ strcat(bodyname,".cpp");
+
+ // here we should check the files - and if they are present with
+ // contents we should read them, and merge the new generated code
+ // I think the way to do that is to allow sections in between comment
+ // pairs in three locations:
+ // a) outside any method in the CPP file.
+ // b) in the header file anywhere.
+ // c) inside method definitions in cpp, either before, or after the
+ // entire generated contents.
+ //
+ //
+
+ header = fopen(headername,"w+");
+ if (header == 0) return false;
+
+ body = fopen(bodyname,"w+");
+ if (body == 0) return false;
+
+
+ fprintf(header,"/*******************************************\n");
+ fprintf(header," * Generated Typesafe Interface Header *\n");
+ fprintf(header," *******************************************/\n\n\n");
+ fprintf(header,"#include \"commonj/sdo/SDO.h\"\n");
+ fprintf(header,"using namespace commonj::sdo;\n\n\n");
+
+ fprintf(body,"/*******************************************\n");
+ fprintf(body," * Generated Typesafe Interface Body *\n");
+ fprintf(body," *******************************************/\n\n\n");
+ fprintf(body,"#include \"%s\"\n",headername);
+ fprintf(body,"using namespace commonj::sdo;\n\n\n");
+
+ delete headername;
+ delete bodyname;
+
+ try {
+
+ int nscount;
+
+ TypeList tl = getTypes();
+
+ // forward declarations and smart pointers
+
+ fprintf(header,"/*******************************************\n");
+ fprintf(header," * Forward declarations and smart pointers *\n");
+ fprintf(header," *******************************************/\n\n\n");
+
+ int i;
+ for (i=0;i<tl.size();i++)
+ {
+ nscount = 0;
+
+ if (!strcmp(tl[i].getURI(),"commonj.sdo")) continue;
+
+ const char *uri = tl[i].getURI();
+ char *c = (char*)strchr(uri,'.');
+
+ if (c == 0)
+ {
+ fprintf(header,"namespace %s{\n",uri);
+ nscount = 1;
+ }
+ else
+ {
+ char* buf = new char[strlen(uri) + 1];
+ strcpy(buf, uri);
+ c = buf;
+ char* c1;
+ do {
+ c1 = strchr(c,'.');
+ if (c1) *c1 = 0;
+ fprintf(header,"namespace %s{\n", c);
+ nscount++;
+ if (c1) c = c1+1;
+ } while (c1 != 0);
+ delete buf;
+ }
+
+ const char* name = tl[i].getName();
+
+ fprintf(header," class %s;\n",name);
+ fprintf(header," typedef RefCountingPointer<%s> %sPtr;\n",
+ name, name);
+
+ for (int i=0;i<nscount;i++)
+ {
+ fprintf(header,"}\n");
+ }
+ }
+ fprintf(header,"\n\n");
+ fprintf(header,"/*******************************************\n");
+ fprintf(header," * The Data factory *\n");
+ fprintf(header," *******************************************/\n\n\n");
+
+ fprintf(header,"class %sDataFactory {\n", factoryname);
+ fprintf(header," public:\n");
+ fprintf(header," static %sDataFactory* get%sDataFactory();\n",
+ factoryname, factoryname);
+
+ for (i=0;i<tl.size();i++)
+ {
+
+ if (!strcmp(tl[i].getURI(),"commonj.sdo")) continue;
+
+ const char *uri = tl[i].getURI();
+ const char *name = tl[i].getName();
+ char* the_uri = (char*) strchr(uri,'.');
+
+ if (the_uri == 0)
+ {
+ the_uri = new char[strlen(uri) + 1];
+ strcpy(the_uri,uri);
+ }
+ else
+ {
+ the_uri = new char[2 * strlen(uri) + 1];
+ int jj=0;
+ for (int ii=0;ii<strlen(uri);ii++)
+ {
+ if (uri[ii] == '.')
+ {
+ the_uri[jj++]=':';
+ the_uri[jj++]=':';
+ }
+ else
+ {
+ the_uri[jj++] = uri[ii];
+ }
+ }
+ the_uri[jj] = 0;
+ }
+
+ fprintf(header," %s::%sPtr create%s();\n", the_uri, name, name);
+
+ fprintf(body,"%s::%sPtr %sDataFactory::create%s()\n",the_uri, name, factoryname, name);
+ fprintf(body,"{\n");
+ fprintf(body," DataObjectPtr dob = the_factory->create(\"%s\",\"%s\");\n",
+ tl[i].getURI(),name);
+ fprintf(body," %s::%s* the_ob = new %s::%s(dob);\n",the_uri,name,the_uri,name);
+ fprintf(body," return the_ob;\n");
+ fprintf(body,"}\n\n");
+
+ delete the_uri;
+
+ }
+
+ fprintf(header," DataFactory* getDataFactory()\n");
+ fprintf(header," {\n");
+ fprintf(header," return (DataFactory*)the_factory;\n");
+ fprintf(header," }\n");
+ fprintf(header," private:\n");
+ fprintf(header," DataFactoryPtr the_factory;\n");
+ fprintf(header,"};\n");
+
+ fprintf(header,"\n\n");
+
+ fprintf(body,"%sDataFactory* %sDataFactory::get%sDataFactory()\n",
+ factoryname,factoryname,factoryname);
+ fprintf(body,"{\n");
+ fprintf(body," %sDataFactory* t = new %sDataFactory();\n",
+ factoryname, factoryname);
+ fprintf(body," t->the_factory = DataFactory::getDataFactory();\n");
+ fprintf(body," return t;\n");
+ fprintf(body,"}\n\n");
+
+
+ fprintf(header,"/*******************************************\n");
+ fprintf(header," * DataObject Type definitions *\n");
+ fprintf(header," *******************************************/\n\n\n");
+
+
+ for (i=0;i<tl.size();i++)
+ {
+ nscount = 0;
+
+ if (!strcmp(tl[i].getURI(),"commonj.sdo")) continue;
+ const char *uri = tl[i].getURI();
+ char *c = (char*) strchr(uri,'.');
+
+ if (c == 0)
+ {
+ fprintf(header,"namespace %s{\n",uri);
+ fprintf(body, "namespace %s{\n",uri);
+ nscount = 1;
+ }
+ else
+ {
+ char* buf = new char[strlen(uri) + 1];
+ strcpy(buf, uri);
+ c = buf;
+ char* c1;
+ do {
+ c1 = strchr(c,'.');
+ if (c1) *c1 = 0;
+ fprintf(header,"namespace %s{\n", c);
+ fprintf(body, "namespace %s{\n", c);
+ nscount++;
+ if (c1) c = c1+1;
+ } while (c1 != 0);
+ delete buf;
+ }
+
+
+ const char* name = tl[i].getName();
+
+ fprintf(header," class %s :public RefCountingObject {\n", name);
+ fprintf(header," public:\n");
+ fprintf(header," %s(DataObject* d);",name);
+
+ // construction from a data object
+
+ fprintf(body,"%s::%s(DataObject* d)\n",name,name);
+ fprintf(body,"{\n");
+ fprintf(body," the_object = d;\n");
+ fprintf(body," the_object->setUserData((void*)this);\n");
+ fprintf(body,"}\n\n\n");
+
+
+
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ const char* pname = pl[j].getName();
+
+ if (pl[j].isMany())
+ {
+ fprintf(header," DataObjectList& get%s();\n",pname);
+ fprintf(body, "DataObjectList& %s::get%s\n{\n",name,pname);
+ fprintf(body, " return the_object->getList(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ }
+ else
+ {
+ if (pl[j].getType().isDataType())
+ {
+ switch (pl[j].getTypeEnum())
+ {
+ case Type::BooleanType:
+ fprintf(header," bool get%s();\n",pname);
+ fprintf(body, "bool %s::get%s\n(){\n",name, pname);
+ fprintf(body, " return the_object->getBoolean(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(bool b);\n",pname);
+ fprintf(body, "void %s::set%s(bool b)\n{\n",name, pname);
+ fprintf(body, " the_object->setBoolean(\"%s\",b);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::ByteType:
+
+ fprintf(header," char get%s();\n",pname);
+ fprintf(body, "char %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getByte(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(char c);\n",pname);
+ fprintf(body, "void %s::set%s(char c)\n{\n",name, pname);
+ fprintf(body, " the_object->setByte(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::BytesType:
+
+ fprintf(header," unsigned int get%s(char *buf, unsigned int len);\n",pname);
+ fprintf(body, "unsigned int %s::get%s(char *buf, unsigned int len)\n{\n",name,
+ pname);
+ fprintf(body, " return the_object->getBytes(\"%s\", buf,len);\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(char *buf,unsigned int len);\n",pname);
+ fprintf(body, "void %s::set%s(char *buf, unsigned int len)\n{\n",name,
+ pname);
+ fprintf(body, " the_object->setBytes(\"%s\", buf,len);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::CharacterType:
+
+ fprintf(header," wchar_t get%s();\n",pname);
+ fprintf(body, "wchar_t %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getCharacter(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(wchar_t c);\n",pname);
+ fprintf(body, "void %s::set%s(wchar_t c)\n{\n",name, pname);
+ fprintf(body, " the_object->setCharacter(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::DateType:
+
+ fprintf(header," SDODate get%s();\n",pname);
+ fprintf(body, "SDODate %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getDate(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(const SDODate c);\n",pname);
+ fprintf(body, "void %s::set%s(const SDODate c)\n{\n",name, pname);
+ fprintf(body, " the_object->setDate(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::DoubleType:
+
+ fprintf(header," long double get%s();\n",pname);
+ fprintf(body, "long double %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getDouble(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(long double c);\n",pname);
+ fprintf(body, "void %s::set%s(long double c)\n{\n",name, pname);
+ fprintf(body, " the_object->setDouble(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::FloatType:
+
+ fprintf(header," float get%s();\n",pname);
+ fprintf(body, "float %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getFloat(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(float c);\n",pname);
+ fprintf(body, "void %s::set%s(float c)\n{\n",name, pname);
+ fprintf(body, " the_object->setFloat(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::IntegerType:
+
+ fprintf(header," long get%s();\n",pname);
+ fprintf(body, "long %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getInteger(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(long c);\n",pname);
+ fprintf(body, "void %s::set%s(long c)\n{\n",name, pname);
+ fprintf(body, " the_object->setInteger(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::LongType:
+
+ fprintf(header," int64_t get%s();\n",pname);
+ fprintf(body, "int64_t %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getLong(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(int64_t c);\n",pname);
+ fprintf(body, "void %s::set%s(int64_t c)\n{\n",name, pname);
+ fprintf(body, " the_object->setLong(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::ShortType:
+
+ fprintf(header," short get%s();\n",pname);
+ fprintf(body, "short %s::get%s\n{\n",name, pname);
+ fprintf(body, " return the_object->getShort(\"%s\");\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(short c);\n",pname);
+ fprintf(body, "void %s::set%s(short c)\n{\n",name, pname);
+ fprintf(body, " the_object->setShort(\"%s\",c);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ case Type::StringType:
+ case Type::UriType:
+
+ fprintf(header," unsigned int get%s(wchar_t *buf, unsigned int len);\n",pname);
+ fprintf(body, "unsigned int %s::get%s(wchar_t *buf, unsigned int len)\n{\n",name,
+ pname);
+ fprintf(body, " return the_object->getString(\"%s\", buf,len);\n",pname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(wchar_t *buf,unsigned int len);\n",pname);
+ fprintf(body, "void %s::set%s(wchar_t *buf, unsigned int len)\n{\n",name,
+ pname);
+ fprintf(body, " the_object->setString(\"%s\", buf,len);\nreturn;\n",pname);
+ fprintf(body, "}\n\n");
+
+ break;
+
+ default:
+ fprintf(header,"/* unknown primitive:%s */\n",pname);
+ break;
+ }
+ }
+ else
+
+ {
+ const char* ttname = pl[j].getType().getName();
+
+ fprintf(header," %sPtr get%s();\n",ttname, pname);
+
+ fprintf(body, "%sPtr %s::get%s()\n{\n",
+ ttname,
+ name,
+ pname);
+ fprintf(body, "DataObjectPtr dob = the_object->getDataObject(\"%s\");\n",pname);
+ fprintf(body, "DataObject* d = (DataObject*)dob;\n");
+ fprintf(body,"%s* value = (%s*)(d->getUserData());\n",ttname, ttname);
+ fprintf(body, " return (%s*)value;\n", ttname);
+ fprintf(body, "}\n\n");
+ fprintf(header," void set%s(%sPtr dob);\n",pname, ttname);
+ fprintf(body, "void %s::set%s(%sPtr dob)\n{\n",
+ name,pname,ttname);
+ fprintf(body,"%s* ptr = dob;\n", ttname);
+ fprintf(body,"DataObject* the_obj = ptr->getDataObject();\n");
+ fprintf(body,"the_object->setDataObject(\"%s\", the_obj);\nreturn;\n",
+ pname);
+ fprintf(body, "}\n\n");
+
+ }
+ }
+ } // for
+
+ // now print the contained data object
+
+ fprintf(header," DataObject* getDataObject()\n");
+ fprintf(header," {\n");
+ fprintf(header," return (DataObject*)the_object;\n");
+ fprintf(header," }\n");
+ fprintf(header," private:\n");
+ fprintf(header," DataObjectPtr the_object;\n");
+
+ fprintf(header,"};\n");
+ for (int i=0;i<nscount;i++)
+ {
+ fprintf(header,"}\n");
+ fprintf(body,"}\n");
+ }
+ }
+ fclose (header);
+ fclose (body);
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in code Generation" << endl;
+ cout << e << endl;
+ }
+ return true;
+}
+
+bool DataFactoryImpl::generateInterface(const SDOString& fileroot, const SDOString& factoryname)
+{
+ return generateInterface(fileroot.c_str(), factoryname.c_str());
+}
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.h
new file mode 100644
index 0000000000..046160bc71
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataFactoryImpl.h
@@ -0,0 +1,716 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/13 08:35:04 $ */
+
+#ifndef _DataFactoryIMPL_H_
+#define _DataFactoryIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/TypeImpl.h"
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/PropertyImpl.h"
+#include "commonj/sdo/SDOXMLString.h"
+
+
+#include <map>
+
+
+
+namespace commonj{
+namespace sdo{
+
+ typedef std::map<std::string, PropertyImpl> propertyMap;
+
+/**
+ * DataFactoryImpl implements the abstract class DataFactory.
+ * DataFactoryImpl holds metadata and creates DataObjects.
+ *
+ * The DataFactory holds properties and types loaded from XSD, or
+ * created using the DataFactory API.
+ */
+class DataFactoryImpl : public DataFactory
+{
+public:
+ DataFactoryImpl();
+ virtual ~DataFactoryImpl();
+
+ DataFactoryImpl(const DataFactoryImpl& inmdg);
+ DataFactoryImpl& operator=(const DataFactoryImpl& inmdg);
+
+ virtual void addType(const char* uri, const char* inTypeName,
+ bool isSeqenced = false,
+ bool isOpen = false,
+ bool isAbstract = false,
+ bool isDataType = false
+ );
+
+ virtual void addType(const SDOString& uri, const SDOString& inTypeName,
+ bool isSeqenced = false,
+ bool isOpen = false,
+ bool isAbstract = false,
+ bool isDataType = false
+ );
+
+ virtual void addType(const char* uri, const char* inTypeName,
+ bool isSeqenced ,
+ bool isOpen ,
+ bool isAbstract ,
+ bool isDataType ,
+ bool isFromList );
+
+ virtual void addType(const SDOString& uri, const SDOString& inTypeName,
+ bool isSeqenced ,
+ bool isOpen ,
+ bool isAbstract ,
+ bool isDataType ,
+ bool isFromList );
+
+ virtual void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const Type& propType,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const Type& type,
+ const char* propname,
+ const Type& propType,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const Type& type,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany = false);
+
+ virtual void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany ,
+ bool isReadOnly,
+ bool isContainment);
+
+ virtual void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany ,
+ bool isReadOnly,
+ bool isContainment);
+
+ virtual void addPropertyToType(const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const Type& propType,
+ bool isMany,
+ bool isReadOnly,
+ bool isContainment);
+
+ virtual void addPropertyToType(const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany,
+ bool isReadOnly,
+ bool isContainment);
+
+ virtual void addPropertyToType(const Type& type,
+ const char* propname,
+ const Type& propType,
+ bool isMany,
+ bool isReadOnly,
+ bool isContainment);
+
+ virtual void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const Type& propType,
+ bool isMany,
+ bool isReadOnly,
+ bool isContainment);
+
+ virtual void addPropertyToType(const Type& type,
+ const char* propname,
+ const char* propTypeUri,
+ const char* propTypeName,
+ bool isMany,
+ bool isReadOnly,
+ bool isContainment);
+
+ virtual void addPropertyToType(const Type& type,
+ const SDOString& propname,
+ const SDOString& propTypeUri,
+ const SDOString& propTypeName,
+ bool isMany,
+ bool isReadOnly,
+ bool isContainment);
+
+
+ virtual void setBaseType( const Type& type,
+ const Type& base,
+ bool isRestriction = false);
+
+ virtual void setBaseType( const char* typeuri,
+ const char* typenam,
+ const char* baseuri,
+ const char* basename,
+ bool isRestriction = false);
+
+ virtual void setBaseType( const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& baseuri,
+ const SDOString& basename,
+ bool isRestriction = false);
+
+ virtual const Type& getType(const char* uri, const char* inTypeName) const;
+
+ virtual const Type& getType(const SDOString& uri, const SDOString& inTypeName) const;
+
+ virtual TypeList getTypes() const;
+
+ virtual DataObjectPtr create(const char* uri, const char* typeName) ;
+
+ virtual DataObjectPtr create(const SDOString& uri, const SDOString& typeName) ;
+
+ virtual DataObjectPtr create(const Type& type) ;
+
+ virtual void setAlias(const char* typeuri,
+ const char* typenam,
+ const char* alias) ;
+
+ virtual void setAlias(const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& alias) ;
+
+ virtual void setAlias(const char* typeuri,
+ const char* typname,
+ const char* propname,
+ const char* alias) ;
+
+ virtual void setAlias(const SDOString& typeuri,
+ const SDOString& typname,
+ const SDOString& propname,
+ const SDOString& alias) ;
+
+ virtual void setOpposite (const Type& type,
+ const char* propname,
+ const Type& opptype,
+ const char* opppropname) ;
+
+ virtual void setOpposite (const Type& type,
+ const SDOString& propname,
+ const Type& opptype,
+ const SDOString& opppropname) ;
+
+
+ virtual void setPropertySubstitute(
+ const char* uri,
+ const char* inTypeName,
+ const char* propname,
+ const char* subname,
+ const char* subTypeUri,
+ const char* subTypeName);
+
+ virtual void setPropertySubstitute(
+ const SDOString& uri,
+ const SDOString& inTypeName,
+ const SDOString& propname,
+ const SDOString& subname,
+ const SDOString& subTypeUri,
+ const SDOString& subTypeName);
+
+ virtual void setPropertySubstitute(
+ const Type& containertype,
+ const char* propname,
+ const char* subname,
+ const Type& subtype);
+
+ virtual void setPropertySubstitute(
+ const Type& containertype,
+ const SDOString& propname,
+ const SDOString& subname,
+ const Type& subtype);
+
+ ////////////////////////////////////////////////////////
+ virtual void setDefault(
+ const Type& t,
+ const char* propname,
+ bool b ) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname,
+ bool b ) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ char c) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ char c) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ wchar_t c) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ wchar_t c) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ char* c) ;
+
+// #pragma message( "GMW: Unimplemented method, writable string parameter" )
+// virtual void setDefault(
+// const Type& t,
+// const SDOString& propname ,
+// SDOString& c) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ short s) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ short s) ;
+
+
+
+#if __WORDSIZE !=64
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ long l) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ long l) ;
+
+#endif
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ int64_t i) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ int64_t i) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ float f) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ float f) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ long double d) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ long double d) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ const SDODate d) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ const SDODate d) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ const wchar_t* c,
+ unsigned int len) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ const wchar_t* c,
+ unsigned int len) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const char* propname ,
+ const char* c,
+ unsigned int len) ;
+
+ virtual void setDefault(
+ const Type& t,
+ const SDOString& propname ,
+ const SDOString& c,
+ unsigned int len) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname,
+ bool b ) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname,
+ bool b ) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ char c) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ char c) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ wchar_t c) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ wchar_t c) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ char* c) ;
+
+// #pragma message( "GMW: Unimplemented method, writable string parameter" )
+// virtual void setDefault(
+// const SDOString& typuri,
+// const SDOString& typnam,
+// const SDOString& propname ,
+// SDOString& c) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ short s) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ short s) ;
+
+#if __WORDSIZE !=64
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ long l) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ long l) ;
+
+#endif
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ int64_t i) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ int64_t i) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ float f) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ float f) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ long double d) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ long double d) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ const SDODate d) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ const SDODate d) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ const wchar_t* c,
+ unsigned int len) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ const wchar_t* c,
+ unsigned int len) ;
+
+ virtual void setDefault(
+ const char* typuri,
+ const char* typnam,
+ const char* propname ,
+ const char* c,
+ unsigned int len) ;
+
+ virtual void setDefault(
+ const SDOString& typuri,
+ const SDOString& typnam,
+ const SDOString& propname ,
+ const SDOString& c,
+ unsigned int len) ;
+
+ virtual void setDASValue(
+ const Type& type,
+ const char* name,
+ DASValue* value);
+
+ virtual void setDASValue(
+ const Type& type,
+ const SDOString& name,
+ DASValue* value);
+
+ virtual void setDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* name,
+ DASValue* value);
+
+ virtual void setDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& name,
+ DASValue* value);
+
+ virtual DASValue* getDASValue(
+ const Type& type,
+ const char* name) const;
+
+ virtual DASValue* getDASValue(
+ const Type& type,
+ const SDOString& name) const;
+
+ virtual DASValue* getDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* name) const;
+
+ virtual DASValue* getDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& name) const;
+
+ virtual void setDASValue(
+ const Type& type,
+ const char* propertyName,
+ const char* name,
+ DASValue* value);
+
+ virtual void setDASValue(
+ const Type& type,
+ const SDOString& propertyName,
+ const SDOString& name,
+ DASValue* value);
+
+ virtual void setDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* propertyName,
+ const char* name,
+ DASValue* value);
+
+ virtual void setDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& propertyName,
+ const SDOString& name,
+ DASValue* value);
+
+ virtual DASValue* getDASValue(
+ const Type& type,
+ const char* propertyName,
+ const char* name) const;
+
+ virtual DASValue* getDASValue(
+ const Type& type,
+ const SDOString& propertyName,
+ const SDOString& name) const;
+
+ virtual DASValue* getDASValue(
+ const char* typeuri,
+ const char* typenam,
+ const char* propertyName,
+ const char* name) const;
+
+ virtual DASValue* getDASValue(
+ const SDOString& typeuri,
+ const SDOString& typenam,
+ const SDOString& propertyName,
+ const SDOString& name) const;
+
+ virtual void resolve();
+
+// TODO: Remove char* form of method since it is not exposed to users
+ const Type* findType (const char* uri, const char* inTypeName) const;
+ const Type* findType(const SDOString uri, const SDOString inTypeName) const;
+
+// TODO: Remove char* form of method since it is not exposed to users
+ const TypeImpl* findTypeImpl (const char* uri, const char* inTypeName) const;
+ const TypeImpl* findTypeImpl(const SDOString& uri, const SDOString& inTypeName) const;
+
+ void addOpenProperty(const PropertyImpl& prop);
+// TODO: Remove char* form of method since it is not exposed to users
+ void removeOpenProperty(const char* name);
+ void removeOpenProperty(const SDOString& name);
+ const propertyMap& getOpenProperties();
+// TODO: Remove char* form of method since it is not exposed to users
+ virtual const TypeImpl& getTypeImpl(const char* uri, const char* inTypeName) const;
+ virtual const TypeImpl& getTypeImpl(const SDOString& uri, const SDOString& inTypeName) const;
+ virtual const SDOString& getRootElementName() const;
+// TODO: Remove char* form of method since it is not exposed to users
+ virtual void setRootElementName(const char* ren);
+ virtual void setRootElementName(const SDOString& ren);
+ virtual bool checkType(const Type& t);
+ virtual bool isCompatible(DataFactory* df, DataObject* d);
+ virtual bool compareTypes(const TypeImpl* t1, const Type& t2);
+
+ virtual bool generateInterface(const char* fileroot, const char* factoryname);
+
+ virtual bool generateInterface(const SDOString& fileroot, const SDOString& factoryname);
+
+private:
+ typedef std::map<std::string, TypeImpl*> TYPES_MAP;
+ TYPES_MAP types;
+
+ std::vector<DataFactory*> compatibleFactories;
+
+ SDOString rootElementName;
+
+ propertyMap openProperties;
+
+ // Need to validate and 'lock' the data model for base types to
+ // work properly.
+
+ bool isResolved;
+
+ bool recursiveCheck(TypeImpl* cs, TypeImpl* t);
+ bool checkForValidChangeSummary(TypeImpl* t);
+
+ typedef std::vector<TypeImpl*> TYPES_VECTOR;
+ TYPES_VECTOR cstypes;
+
+// TODO: Remove char* form of method since it is not exposed to users
+ char* getFullTypeName(const char* uri, const char* inTypeName) const;
+ char* getFullTypeName(const SDOString& uri, const SDOString& inTypeName) const;
+// TODO: Remove char* form of method since it is not exposed to users
+ char* getAliasTypeName(const char* uri, const char* inTypeName) const;
+ char* getAliasTypeName(const SDOString& uri, const SDOString& inTypeName) const;
+
+ void copyTypes(const DataFactoryImpl& inmdg);
+};
+};
+};
+#endif // _DataFactoryIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.cpp
new file mode 100644
index 0000000000..a367853f06
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.cpp
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/disable_warn.h"
+#include "commonj/sdo/DataGraph.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+namespace commonj{
+ namespace sdo {
+
+ DataGraph::~DataGraph()
+ {
+ }
+
+
+ };
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.h
new file mode 100644
index 0000000000..715223992a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraph.h
@@ -0,0 +1,99 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _DATAGRAPH_H_
+#define _DATAGRAPH_H_
+
+#include "commonj/sdo/RefCountingObject.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/DataObject.h"
+
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * DataGraph holds a whole graph of data objects, starting from
+ * a single root. This class is not currently used in the C++
+ * implementation, but will be required by DAS implementations.
+ */
+
+class DataGraph : public RefCountingObject
+{
+ public:
+ virtual ~DataGraph();
+
+ /**
+ *
+ * Gets the root data object of this graph.
+ */
+
+
+ virtual SDO_API DataObjectPtr getRootObject() = 0;
+
+ /**
+ *
+ * gets the name of the element from which the root
+ * object was loaded (The XML definition).
+ */
+ virtual SDO_API const char* getRootElementName() = 0;
+
+ /**
+ * Sets the Root data object.
+ *
+ */
+ virtual SDO_API void setRootObject(DataObjectPtr dob) = 0;
+
+ /**
+ * Creates a root data object - used by DAS implementations.
+ *
+ */
+
+ virtual SDO_API DataObjectPtr createRootObject(const char* uri,
+ const char* name) = 0;
+
+ /**
+ * Creates a root data object - used by DAS implementations.
+ *
+ */
+
+ virtual SDO_API DataObjectPtr createRootObject(const Type& t) = 0;
+
+ /**
+ * Gets the change summary if there is one.
+ *
+ */
+
+ virtual SDO_API ChangeSummaryPtr getChangeSummary() = 0;
+
+ /**
+ * Gets a type from the data factory.
+ *
+ */
+
+ virtual SDO_API const Type& getType(const char* uri,
+ const char* name) = 0;
+
+
+};
+};
+};
+
+#endif //_DATAGRAPH_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.cpp
new file mode 100644
index 0000000000..636dbed25f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.cpp
@@ -0,0 +1,117 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/DataGraphImpl.h"
+#include "commonj/sdo/DataObjectImpl.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+
+
+namespace commonj{
+ namespace sdo {
+
+/**
+ * DataGraphImpl implements DataGraph.
+ * DataGraph holds a whole graph of data objects, starting from
+ * a single root. This class is not currently used in the C++
+ * implementation, but will be required by DAS implementations.
+ */
+ DataGraphImpl::~DataGraphImpl()
+ {
+ }
+
+ DataGraphImpl::DataGraphImpl(DataFactoryPtr fac)
+ {
+ factory = fac;
+ root = 0;
+ }
+
+
+ DataObjectPtr DataGraphImpl::getRootObject()
+ {
+ return root;
+ }
+
+ const char* DataGraphImpl::getRootElementName()
+ {
+ if (root == 0) return 0;
+ return root->getInstanceProperties()[0].getName();
+ }
+
+ void DataGraphImpl::setRootObject(DataObjectPtr dob)
+ {
+ if (root != 0)
+ {
+ SDO_THROW_EXCEPTION("setRootObject",SDOUnsupportedOperationException,
+ "Root data object already exists");
+ }
+ root = dob;
+ }
+
+
+ DataObjectPtr DataGraphImpl::createRootObject(const char* uri,
+ const char* name)
+ {
+ if (root != 0)
+ {
+ SDO_THROW_EXCEPTION("createRootObject",SDOUnsupportedOperationException,
+ "Root data object already exists");
+ }
+ root = factory->create(uri,name);
+ if (root->getInstanceProperties()[0].getType().isDataType())
+ {
+ SDO_THROW_EXCEPTION("createRootObject",SDOUnsupportedOperationException,
+ "Root data object cannot have a datatype property at element 0");
+ }
+ return root;
+ }
+
+
+ DataObjectPtr DataGraphImpl::createRootObject(const Type& t)
+ {
+ if (root != 0)
+ {
+ SDO_THROW_EXCEPTION("createRootObject",SDOUnsupportedOperationException,
+ "Root data object already exists");
+ }
+ root = factory->create(t);
+ if (root->getInstanceProperties()[0].getType().isDataType())
+ {
+ SDO_THROW_EXCEPTION("createRootObject",SDOUnsupportedOperationException,
+ "Root data object cannot have a datatype property at element 0");
+ }
+ return root;
+ }
+
+
+ ChangeSummaryPtr DataGraphImpl::getChangeSummary()
+ {
+ if (!root) return 0;
+ return root->getChangeSummary();
+ }
+
+
+ const Type& DataGraphImpl::getType(const char* uri,
+ const char* name)
+ {
+ return factory->getType(uri,name);
+ }
+
+ };
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.h
new file mode 100644
index 0000000000..15cc994171
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataGraphImpl.h
@@ -0,0 +1,106 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#ifndef _DATAGRAPHIMPL_H_
+#define _DATAGRAPHIMPL_H_
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/DataGraph.h"
+#include "commonj/sdo/disable_warn.h"
+
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * DataGraphImpl implements the abstract class DataGraph.
+ * DataGraph holds a whole graph of data objects, starting from
+ * a single root. This class is not currently used in the C++
+ * implementation, but will be required by DAS implementations.
+ */
+
+class DataGraphImpl : public DataGraph
+{
+ public:
+ virtual ~DataGraphImpl();
+
+ SDO_API DataGraphImpl(DataFactoryPtr fac);
+
+ /**
+ * Sets the root data object.
+ *
+ */
+
+ virtual SDO_API void setRootObject(DataObjectPtr dob);
+
+ /**
+ * Gets the root data object.
+ *
+ */
+
+ virtual DataObjectPtr getRootObject();
+
+ /**
+ * Gets the name of the root data element (from the XML
+ * description).
+ *
+ */
+
+ virtual const char* getRootElementName();
+
+ /**
+ * Creates the root data object - for use by DAS implementations
+ *
+ */
+
+ virtual DataObjectPtr createRootObject(const char* uri,
+ const char* name);
+
+ /**
+ * Creates the root data object - for use by DAS implementations
+ *
+ */
+
+
+ virtual DataObjectPtr createRootObject(const Type& t);
+
+ /**
+ *
+ * Gets the change summary if there is one.
+ */
+
+ virtual ChangeSummaryPtr getChangeSummary();
+
+ /**
+ *
+ * Gets a type from the data factory.
+ */
+
+ virtual const Type& getType(const char* uri,
+ const char* name);
+
+ private:
+
+ DataFactoryPtr factory;
+ DataObjectPtr root;
+
+};
+};
+};
+
+#endif //_DATAGRAPHIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.cpp
new file mode 100644
index 0000000000..190da0649e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.cpp
@@ -0,0 +1,31 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "commonj/sdo/DataObject.h"
+
+namespace commonj{
+namespace sdo{
+
+
+ DataObject::~DataObject()
+ {
+ }
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.h
new file mode 100644
index 0000000000..0e538b27ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObject.h
@@ -0,0 +1,550 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/02 16:41:30 $ */
+
+#ifndef _DATAOBJECT_H_
+#define _DATAOBJECT_H_
+#include "commonj/sdo/export.h"
+
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/DataObjectList.h"
+#include "commonj/sdo/PropertyList.h"
+
+
+namespace commonj{
+namespace sdo{
+
+class DataGraph;
+class DataObjectList;
+class DataFactory;
+class ChangeSummary;
+
+
+ /**
+ * DataObjects are the non-primitive members of a Data graph.
+ *<p>
+ * A data object is a representation of some structured data.
+ * it is the fundamental component in the SDO (Service Data Objects) package.
+ * Data objects support reflection, path-based accesss, convenience creation
+ * and deletion methods,and the ability to be part of a data graph.
+ * Each data object holds its data as a series of properties.
+ * Properties can be accessed by name, property index, or using the property
+ * meta object itself.
+ * <p>
+ * A data object can also contain references to other data objects, through
+ * reference-type properties.
+ * <p>
+ * A data object has a series of convenience accessors for its properties.
+ * These methods either use a path (String), a property index,
+ * or the property's meta object itself, to identify the property.
+ * Some examples of the path-based accessors are as follows:
+ * <p>
+ * DataObjectPtr company = ...;<br>
+ * company->getString("name");<br>
+ * company->setString("name", "acme");<br>
+ * company->getString("department.0/name")<br>
+ * company->getString("department[1]/name")<br>
+ * (Note .n indexes from 0, whilst [] indexes from 1.<br>
+ * company->getDataObject("department[number=123]") returns the department where number=123<br>
+ * company->getDataObject("..") returns the containing data object<br>
+ * company->getDataObject("/") returns the root containing data object<br>
+ * There are specific accessors for the primitive types and commonly used
+ * data types like String.
+ */
+
+class DataObject : public RefCountingObject
+{
+ public:
+ virtual ~DataObject();
+
+ /**
+ *
+ * Introspection - properties and types
+ */
+
+ /** getPropertyIndex gets the unique index of a property
+ *
+ * A property of a data object has a unique index associated with it.
+ * This method gets a property index for this object from the property,
+ * or throw SDOPropertyNotFoundException if the property is not part
+ * of this data object.
+ */
+
+ virtual unsigned int SDO_API getPropertyIndex(const Property& p) = 0;
+
+
+ /** getInstanceProperties gets the props of the current object.
+ *
+ * Returns a read-only List of the Properties currently used in this DataObject.
+ * This list will contain all of the properties in getType().getProperties()
+ * and any properties where isSet(property) is true.
+ * For example, properties resulting from the use of
+ * open or mixed XML content are present if allowed by the Type.
+ * The list does not contain duplicates.
+ * The order of the properties in the list begins with getType().getProperties()
+ * and the order of the remaining properties is determined by the implementation.
+ * The same list will be returned unless the DataObject is updated so that
+ * the contents of the list change
+ * Returns the list of Properties currently used in this DataObject.
+ */
+
+ virtual SDO_API PropertyList getInstanceProperties() = 0;
+
+ /**
+ * See if the property currently exists
+ */
+
+ virtual SDO_API bool hasProperty(const char* name) = 0;
+ virtual SDO_API bool hasProperty(const SDOString& name) = 0;
+ /**
+ * These are just like getType().getProperty(), but may return
+ * values other than the property list for open types.
+ */
+
+ virtual const Property& getProperty(unsigned int index) = 0;
+
+ virtual const Property& getProperty(const char* prop) = 0;
+ virtual const Property& getProperty(const SDOString& prop) = 0;
+
+
+ /**
+ * return the data factory which created this object
+ */
+
+ virtual SDO_API DataFactory* getDataFactory() = 0;
+
+ /** getContainer get the containing object
+ *
+ * Returns the containing data object
+ * or 0 if there is no container.
+ */
+
+ virtual SDO_API DataObjectPtr getContainer() = 0;
+
+ /** getContainmentProperty returns the property containing this object
+ *
+ * Return the Property of the data object containing this data object
+ * or throw an SDOPropertyNotFoundException if there is no container.
+ */
+
+ virtual SDO_API const Property& getContainmentProperty() = 0;
+
+ /** getType returns the data object's type.
+ *
+ * getType returns the data object's type.
+ * The type defines the properties available for reflective access.
+ */
+
+ virtual SDO_API const Type& getType() = 0;
+
+ /* getTypeEnum returns an enumerator for the type
+ *
+ * Returns an enumerator for the type for easy switching on basic types.
+ * The enumerator is part of the Type class
+ */
+
+ virtual SDO_API const Type::Types getTypeEnum() = 0;
+
+
+
+
+
+ /** getDataObject returns a data object by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API DataObjectPtr getDataObject(const SDOString& path) = 0;
+ virtual SDO_API DataObjectPtr getDataObject(const char* path) = 0;
+ virtual SDO_API DataObjectPtr getDataObject(unsigned int propertyIndex) = 0;
+ virtual SDO_API DataObjectPtr getDataObject(const Property& property) = 0;
+
+ /** setDataObject sets a value by path, index or property
+ *
+ * Sets a property of either this object or an object reachable from it,
+ * as identified by the specified path,
+ * to the specified value.
+ */
+
+
+ virtual SDO_API void setDataObject(const char* path, DataObjectPtr value) = 0;
+ virtual SDO_API void setDataObject(const SDOString& path, DataObjectPtr value) = 0;
+ virtual SDO_API void setDataObject(unsigned int propertyIndex, DataObjectPtr value) = 0;
+ virtual SDO_API void setDataObject(const Property& property, DataObjectPtr value) = 0;
+
+ /** getBoolean returns a boolean by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API bool getBoolean(const char* path) = 0;
+ virtual SDO_API bool getBoolean(const SDOString& path) = 0;
+ virtual SDO_API bool getBoolean(unsigned int propindex) = 0;
+ virtual SDO_API bool getBoolean(const Property& p) = 0;
+
+ virtual SDO_API void setBoolean(const char* path, bool b) = 0;
+ virtual SDO_API void setBoolean(unsigned int propindex, bool b) = 0;
+ virtual SDO_API void setBoolean(const Property& p, bool b) = 0;
+
+ /** getByte returns a char by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API char getByte(const char* path) = 0;
+ virtual SDO_API char getByte(unsigned int propindex) = 0;
+ virtual SDO_API char getByte(const Property& p) = 0;
+
+ virtual SDO_API void setByte(const char* path, char c) = 0;
+ virtual SDO_API void setByte(unsigned int propindex, char c) = 0;
+ virtual SDO_API void setByte(const Property& p, char c) = 0;
+
+ /** getCharacter returns a wchar_t by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API wchar_t getCharacter(const char* path) = 0;
+ virtual SDO_API wchar_t getCharacter(unsigned int propindex) = 0;
+ virtual SDO_API wchar_t getCharacter(const Property& p) = 0;
+
+ virtual SDO_API void setCharacter(const char* path, wchar_t c) = 0;
+ virtual SDO_API void setCharacter(unsigned int propindex, wchar_t c) = 0;
+ virtual SDO_API void setCharacter(const Property& p, wchar_t c) = 0;
+
+
+ /** getlength returns the length of a string
+ *
+ * Specific to Bytes and Characters data objects. This returns the
+ * length of the buffer required to hold the contents of the object.
+ * len = do->getLength("name");
+ * buf = new char[len];
+ * reallen = do->getBytes("name",buf,len);
+ */
+ virtual SDO_API unsigned int getLength(const char* path) = 0;
+ virtual SDO_API unsigned int getLength(unsigned int propindex) = 0;
+ virtual SDO_API unsigned int getLength(const Property& p) = 0;
+ virtual SDO_API unsigned int getLength() = 0;
+
+
+ /** getBytes returns a byte buffer
+ *
+ * A DataObject of type Bytes holds an array of bytes as its value. These
+ * methods transfer the contents of that buffer into an array of chars allocated
+ * by the users program. The return value is the number of bytes actually
+ * copied.
+ * The byte array is not necessarily null terminated. If a null terminated
+ * C style string is required, then getCString is an alternative.
+ * The third paarameter is the length of the allocated buffer, which may be more
+ * than the length of the byte array. If the length specified is less than the
+ * length of the byte array, then only a portion of the
+ * byte array is returned.
+ */
+
+
+ virtual SDO_API unsigned int getBytes(const char* path, char* buf, unsigned int max) = 0;
+ virtual SDO_API unsigned int getBytes(unsigned int propindex, char* buf, unsigned int max) = 0;
+ virtual SDO_API unsigned int getBytes(const Property& p, char* buf, unsigned int max) = 0;
+
+ virtual SDO_API void setBytes(const char* path, const char* c, unsigned int length) = 0;
+ virtual SDO_API void setBytes(unsigned int propindex, const char* c, unsigned int length) = 0;
+ virtual SDO_API void setBytes(const Property& p, const char* c, unsigned int length) = 0;
+
+ /** getString returns a wide char buffer
+ *
+ * A DataObject of type String holds an array of wide characters as its value. These
+ * methods transfer the contents of that buffer into an array of wchar_t allocated
+ * by the users program. The return value is the number of wchar_t actually
+ * copied.
+ * The array is not necessarily null terminated.
+ * The third paarameter is the length of the allocated buffer, which may be more
+ * than the length of the array. If the length specified is less than the
+ * length of the array, then only a portion of the array is returned.
+ */
+
+ virtual SDO_API unsigned int getString(const char* path , wchar_t* c, unsigned int max) = 0;
+ virtual SDO_API unsigned int getString(unsigned int propindex, wchar_t* c, unsigned int max) = 0;
+ virtual SDO_API unsigned int getString(const Property& p, wchar_t* c, unsigned int max) = 0;
+
+ virtual SDO_API void setString(const char* path, const wchar_t* c, unsigned int length) = 0;
+ virtual SDO_API void setString(unsigned int propindex, const wchar_t* c, unsigned int length) = 0;
+ virtual SDO_API void setString(const Property& p, const wchar_t* c, unsigned int length) = 0;
+
+ /** getDate returns an SDODate by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+ virtual SDO_API const SDODate getDate(const char* path) = 0;
+ virtual SDO_API const SDODate getDate(unsigned int propindex) = 0;
+ virtual SDO_API const SDODate getDate(const Property& p) = 0;
+
+ virtual SDO_API void setDate(const char* path, const SDODate d) = 0;
+ virtual SDO_API void setDate(unsigned int propindex, const SDODate d) = 0;
+ virtual SDO_API void setDate(const Property& p, const SDODate d) = 0;
+
+ /** getDouble returns a long double by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API long double getDouble(const char* path) = 0;
+ virtual SDO_API long double getDouble(unsigned int propindex) = 0;
+ virtual SDO_API long double getDouble(const Property& p) = 0;
+
+ virtual SDO_API void setDouble(const char* path, long double d) = 0;
+ virtual SDO_API void setDouble(unsigned int propindex, long double d) = 0;
+ virtual SDO_API void setDouble(const Property& p, long double d) = 0;
+
+ /** getFloat returns a float by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API float getFloat(const char* path) = 0;
+ virtual SDO_API float getFloat(unsigned int propindex) = 0;
+ virtual SDO_API float getFloat(const Property& p) = 0;
+
+ virtual SDO_API void setFloat(const char* path, float f) = 0;
+ virtual SDO_API void setFloat(unsigned int propindex, float f) = 0;
+ virtual SDO_API void setFloat(const Property& p, float f) = 0;
+
+ /** getInteger returns a long by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API long getInteger(const char* path) = 0;
+ virtual SDO_API long getInteger(unsigned int propindex) = 0;
+ virtual SDO_API long getInteger(const Property& p) = 0;
+
+ virtual SDO_API void setInteger(const char* path, long i) = 0;
+ virtual SDO_API void setInteger(unsigned int propindex, long i) = 0;
+ virtual SDO_API void setInteger(const Property& p, long i) = 0;
+
+ /** getLong returns a int64_t by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API int64_t getLong(const char* path) = 0;
+ virtual SDO_API int64_t getLong(unsigned int propindex) = 0;
+ virtual SDO_API int64_t getLong(const Property& p) = 0;
+
+ virtual SDO_API void setLong(const char* path, int64_t l) = 0;
+ virtual SDO_API void setLong(unsigned int propindex, int64_t l) = 0;
+ virtual SDO_API void setLong(const Property& p, int64_t l) = 0;
+
+ /** getShort returns a short by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API short getShort(const char* path) = 0;
+ virtual SDO_API short getShort(unsigned int propindex) = 0;
+ virtual SDO_API short getShort(const Property& p) = 0;
+
+ virtual SDO_API void setShort(const char* path, short s) = 0;
+ virtual SDO_API void setShort(unsigned int propindex, short s) = 0;
+ virtual SDO_API void setShort(const Property& p, short s) = 0;
+
+
+ /** getCString returns a null terminated string by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual SDO_API const char* getCString(const char* path) = 0;
+ virtual SDO_API const char* getCString(unsigned int propertyIndex) = 0;
+ virtual SDO_API const char* getCString(const Property& prop) = 0;
+
+ virtual SDO_API void setCString(const char* path, const char* value) = 0;
+ virtual SDO_API void setCString(unsigned int propertyIndex, const char* value) = 0;
+ virtual SDO_API void setCString (const Property& prop, const char* value) = 0;
+
+
+ /** setNull sets a data object value to null.
+ *
+ * A DataObjectType or DataType value may be set or unset. If it is set, then
+ * it may have a value, or it may be set to null. A distinction is drawn between
+ * being unset, having the default value, being set and being null.
+ * When the value of an integer (for example) is returned as zero, it could have
+ * been set to zero, or it could be null. Use isNull() to verify.
+ */
+
+ virtual SDO_API void setNull(const char* path) = 0;
+ virtual SDO_API void setNull(unsigned int propertyIndex) = 0;
+ virtual SDO_API void setNull(const Property& prop) = 0;
+
+ virtual SDO_API bool isNull(const char* path) = 0;
+ virtual SDO_API bool isNull(unsigned int propertyIndex) = 0;
+ virtual SDO_API bool isNull(const Property& prop) = 0;
+
+ /** isSet test whether the value has been set
+ *
+ * Returns whether a property of either this object or an object reachable
+ * from it, as identified by the specified path,
+ * is considered to be set.
+ */
+
+ virtual SDO_API bool isSet(const char* path) = 0;
+ virtual SDO_API bool isSet(unsigned int propertyIndex) = 0;
+ virtual SDO_API bool isSet(const Property& property) = 0;
+
+
+ /** isValid shows true if the value is set or defaulted.
+ *
+ * A property can be set, null, or have a default value - all
+ * of these are valid. It can also be unset, and have no default
+ * in which case this returns false.
+ */
+
+ virtual SDO_API bool isValid(const char* path) = 0;
+ virtual SDO_API bool isValid(unsigned int propertyIndex) = 0;
+ virtual SDO_API bool isValid(const Property& property ) =0;
+
+ /** unset unsets a value previously set.
+ *
+ * unsets a property of either this object or an object reachable
+ * from it, as identified by the specified path.
+ */
+
+ virtual SDO_API void unset(const char* path) = 0;
+ virtual SDO_API void unset(unsigned int propertyIndex) = 0;
+ virtual SDO_API void unset(const Property& property) = 0;
+
+ /** setUserData sets a reserved field in the data object.
+ *
+ * Each data object has precisely one 32 bit slot available to
+ * be used by applications. This is not part of the data, its
+ * just a place to store anything for later retrieval.
+ */
+
+ virtual SDO_API void setUserData(const char* path,void* value) = 0;
+ virtual SDO_API void setUserData(unsigned int propertyIndex, void* value) = 0;
+ virtual SDO_API void setUserData(const Property& property, void* value) = 0;
+ virtual SDO_API void setUserData(void* value) = 0;
+ virtual SDO_API void* getUserData(const char* path) = 0;
+ virtual SDO_API void* getUserData(unsigned int propertyIndex) = 0;
+ virtual SDO_API void* getUserData(const Property& property) = 0;
+ virtual SDO_API void* getUserData() = 0;
+
+
+ /** getSequence returns the sequence for a data object
+ *
+ * Returns the value of a Sequence property identified by
+ * the specified path. See Sequence.
+ */
+
+ virtual SDO_API SequencePtr getSequence() = 0;
+ virtual SDO_API SequencePtr getSequence(const char* path) = 0;
+ virtual SDO_API SequencePtr getSequence(unsigned int propertyIndex) = 0;
+ virtual SDO_API SequencePtr getSequence(const Property& property) = 0;
+
+
+
+ /** createDataObject creates a data object value
+ *
+ * Returns a new data object contained by this object using the
+ * specified property,which must be a containment property.
+ * The type of the created object is the declared type
+ * of the specified property.
+ * If the property is many valued, this method adds an element to the
+ * list, otherwise it sets the value, removing any old value.
+ */
+
+ virtual SDO_API DataObjectPtr createDataObject(const char* propertyName) = 0;
+ virtual SDO_API DataObjectPtr createDataObject(unsigned int propertyIndex) = 0;
+ virtual SDO_API DataObjectPtr createDataObject(const Property& property) = 0;
+
+
+
+ /** detach detaches an object from the graph
+ *
+ * This method removes the current data object from the graph, but does
+ * not destroy it. The DataObject can be re-attached to the graph later.
+ */
+
+ virtual SDO_API void detach() = 0;
+
+ /** clear unsets all the properties
+ *
+ * This method unsets all the properties, and deletes all the data object
+ * propertiy values from this data object.
+ */
+
+ virtual SDO_API void clear() = 0;
+
+
+ /** getList gets the value of a many-valued property
+ *
+ * Many valued properties are returned as lists of DataObjects.
+ * These lists may contain primitives or data objects, but they behave
+ * like data objects.
+ * Getting a many valued integer consists of getting the list, then
+ * using the DataObjectList API to getInteger() for each list element.
+ */
+
+ virtual SDO_API DataObjectList& getList(const char* path) = 0;
+ virtual SDO_API DataObjectList& getList(unsigned int propIndex) = 0;
+ virtual SDO_API DataObjectList& getList(const Property& p) = 0;
+ virtual DataObjectList& getList() = 0;
+
+
+ /** getChangeSummary get the applicable change summary
+ *
+ * This method gets the applicable change summary for a data object.
+ * The summary is not necessarily attached to the data object, it may be
+ * the summary for a parent data object. No object with a summary attached
+ * may be a child of another object with a summary attached.
+ * See the ChangeSummary API for details of using the change sumamry.
+ */
+
+ virtual SDO_SPI ChangeSummaryPtr getChangeSummary() = 0;
+ virtual SDO_SPI ChangeSummaryPtr getChangeSummary(const char* path) = 0;
+ virtual SDO_SPI ChangeSummaryPtr getChangeSummary(unsigned int propIndex) = 0;
+ virtual SDO_SPI ChangeSummaryPtr getChangeSummary(const Property& prop) = 0;
+
+ /** objectToXPath - utility to find the xpath from the root.
+ *
+ * objectToXPath returns a string which could be used to locate this data
+ * object from the root data object of the graph.
+ */
+
+ virtual SDO_SPI const char* objectToXPath() = 0;
+
+
+};
+};
+};
+
+#endif //_DATAOBJECT_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.cpp
new file mode 100644
index 0000000000..0188c26d6d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.cpp
@@ -0,0 +1,4307 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+
+#include "commonj/sdo/disable_warn.h"
+#include "commonj/sdo/DataObjectImpl.h"
+
+
+
+#include "commonj/sdo/SDORuntimeException.h"
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeList.h"
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/SequenceImpl.h"
+
+#include "commonj/sdo/PropertyList.h"
+
+#include "commonj/sdo/Logging.h"
+
+#include "commonj/sdo/TypeImpl.h"
+
+#include "commonj/sdo/ChangeSummaryImpl.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+
+#include <string>
+#include <stdio.h>
+using std::string;
+
+
+
+
+namespace commonj{
+namespace sdo {
+
+ /**
+ * RDO is an internal class holding a property value
+ */
+
+ rdo::rdo(unsigned int infirst, DataObjectImpl* insecond)
+ : first(infirst), second(insecond)
+ {
+ }
+
+ rdo::rdo()
+ {
+ first = 0;
+ second = 0;
+ }
+
+ rdo::rdo (const rdo& inrdo)
+ {
+ first = inrdo.first;
+ second = inrdo.second;
+ }
+
+ rdo::~rdo()
+ {
+ }
+
+
+/** @def getPrimitive
+ *
+ * A macro for the getting of primitive values from a data object
+ */
+
+#define getPrimitive(primval,retval,defval)\
+ retval DataObjectImpl::get ##primval (unsigned int propertyIndex)\
+ {\
+ validateIndex(propertyIndex);\
+ PropertyImpl* p = getPropertyImpl(propertyIndex);\
+ if (p != 0 ) \
+ {\
+ if (p->isMany() || p->getTypeImpl()->isFromList())\
+ {\
+ string msg("Get value not available on many valued property:");\
+ msg += p->getName();\
+ SDO_THROW_EXCEPTION("get value", SDOUnsupportedOperationException,\
+ msg.c_str());\
+ }\
+ DataObjectImpl* d = getDataObjectImpl(propertyIndex);\
+ if (d != 0) \
+ {\
+ if (d->isNull())return (retval)0;\
+ return d->get ##primval ();\
+ }\
+ if (isSet(propertyIndex)) return (retval)0;\
+ return p->get ##primval ##Default();\
+ }\
+ return (retval)0;\
+ }
+
+/** @def getCharsBasic
+ *
+ * A macro for the getting of primitive characters from a data object
+ */
+
+#define getCharsBasic(primval,retval,defval)\
+ unsigned int DataObjectImpl::get ##primval (unsigned int propertyIndex, retval valptr , unsigned int max)\
+ {\
+ validateIndex(propertyIndex);\
+ PropertyImpl* p = getPropertyImpl(propertyIndex);\
+ if (p != 0) \
+ {\
+ if (p->isMany()|| p->getTypeImpl()->isFromList())\
+ {\
+ string msg("Get value not available on many valued property:");\
+ msg += p->getName();\
+ SDO_THROW_EXCEPTION("character getter", SDOUnsupportedOperationException,\
+ msg.c_str());\
+ }\
+ DataObjectImpl* d = getDataObjectImpl(propertyIndex);\
+ if (d != 0) \
+ { \
+ if (d->isNull()) return 0;\
+ return d->get ##primval ( valptr , max);\
+ }\
+ if (isSet(propertyIndex))return 0;\
+ return p->get ##primval ##Default( valptr , max);\
+ }\
+ return 0;\
+ }
+
+
+/** @def setPrimitive
+ *
+ * A macro for the setting of primitive values in a data object
+ */
+
+#define setPrimitive(primval,primtype,primnam)\
+ void DataObjectImpl::set ##primval (unsigned int propertyIndex, primtype value)\
+ {\
+ validateIndex(propertyIndex);\
+ PropertyImpl* pl = getPropertyImpl(propertyIndex);\
+ if (pl != 0) \
+ {\
+ if (pl->isMany()|| pl->getTypeImpl()->isFromList())\
+ {\
+ string msg("Set value not available on many valued property:");\
+ msg += pl->getName();\
+ SDO_THROW_EXCEPTION("set value",SDOUnsupportedOperationException,\
+ msg.c_str());\
+ }\
+ PropertyValueMap::iterator i;\
+ for (i = PropertyValues.begin(); i != PropertyValues.end();++i)\
+ {\
+ if ((*i).first == propertyIndex)\
+ {\
+ logChange(propertyIndex);\
+ (*i).second->unsetNull();\
+ (*i).second->set ##primval (value);\
+ return;\
+ }\
+ }\
+ DataFactory* df = getDataFactory();\
+ DataObjectImpl* b = new DataObjectImpl(df, df->getType(Type::SDOTypeNamespaceURI, primnam));\
+ b->setContainer(this);\
+ b->setApplicableChangeSummary();\
+ logChange(propertyIndex);\
+ PropertyValues.insert(PropertyValues.end(), rdo(propertyIndex,b));\
+ b->set ##primval (value);\
+ }\
+ return;\
+ }
+
+
+/** @def setCharsBasic
+ *
+ * A macro for the setting of primitive characters in a data object
+ */
+
+#define setCharsBasic(primval,primtype,primnam)\
+ void DataObjectImpl::set ##primval (unsigned int propertyIndex, primtype value, unsigned int len)\
+ {\
+ validateIndex(propertyIndex);\
+ PropertyImpl* pl = getPropertyImpl(propertyIndex);\
+ if (pl != 0) \
+ {\
+ if (pl->isMany()|| pl->getTypeImpl()->isFromList())\
+ {\
+ string msg("Set value not available on many valued property:");\
+ msg += pl->getName();\
+ SDO_THROW_EXCEPTION("setter",SDOUnsupportedOperationException,\
+ msg.c_str());\
+ }\
+ PropertyValueMap::iterator i;\
+ for (i = PropertyValues.begin(); i != PropertyValues.end();++i)\
+ {\
+ if ((*i).first == propertyIndex)\
+ {\
+ logChange(propertyIndex);\
+ (*i).second->unsetNull();\
+ (*i).second->set ##primval (value, len);\
+ return;\
+ }\
+ }\
+ DataFactory* df = getDataFactory();\
+ DataObjectImpl* b = new DataObjectImpl(df, df->getType(Type::SDOTypeNamespaceURI, primnam));\
+ b->setContainer(this);\
+ b->setApplicableChangeSummary();\
+ logChange(propertyIndex);\
+ PropertyValues.insert(PropertyValues.end(),rdo(propertyIndex,b));\
+ b->set ##primval (value, len);\
+ }\
+ return;\
+ }
+
+
+/** @def getPrimitiveFromPath
+ *
+ * A macro for the getting of primitive values from a data object by path
+ */
+
+#define getPrimitiveFromPath(primval, retval, defval)\
+ retval DataObjectImpl::get ##primval (const char* path)\
+ {\
+ DataObjectImpl* d;\
+ char *spath = 0;\
+ char* prop = 0;\
+ try {\
+ spath = DataObjectImpl::stripPath(path);\
+ prop = findPropertyContainer(spath,&d);\
+ if (spath){\
+ delete spath;\
+ spath = 0;\
+ }\
+ if (d != 0) {\
+ if (prop == 0 || (strlen(prop) == 0)) {\
+ return d->get ##primval ();\
+ }\
+ else {\
+ PropertyImpl* p = d->getPropertyImpl(prop);\
+ if (p != 0) \
+ {\
+ if (p->isMany()|| p->getTypeImpl()->isFromList())\
+ {\
+ long l;\
+ DataObjectImpl* doi = d->findDataObject(prop,&l);\
+ delete prop;\
+ prop = 0;\
+ if (doi != 0) {\
+ return doi->get ## primval();\
+ }\
+ string msg("Get value - index out of range:");\
+ msg += path;\
+ SDO_THROW_EXCEPTION("getter", SDOIndexOutOfRangeException,\
+ msg.c_str());\
+ }\
+ else\
+ {\
+ delete prop;\
+ prop = 0;\
+ if (!d->isSet(*p)) {\
+ return p->get ##primval ##Default();\
+ }\
+ return d->get ##primval (*p);\
+ }\
+ }\
+ }\
+ if (prop) {\
+ delete prop;\
+ prop = 0;\
+ }\
+ }\
+ string msg("Get value - path not found");\
+ SDO_THROW_EXCEPTION("getter", SDOPathNotFoundException,\
+ msg.c_str());\
+ }\
+ catch (SDORuntimeException e) {\
+ if (spath)delete spath;\
+ if (prop) delete prop;\
+ SDO_RETHROW_EXCEPTION("getter", e);\
+ }\
+ }
+
+#define getPrimitiveFromPathUsingSDOString(primval, retval, defval)\
+ retval DataObjectImpl::get ##primval (const SDOString& path)\
+ {\
+ DataObjectImpl* d;\
+ SDOString spath;\
+ SDOString prop;\
+ try {\
+ DataObjectImpl::stripPath(path, spath);\
+ prop = findPropertyContainer(spath, &d);\
+ if (d != 0) {\
+ if (prop.empty()) {\
+ return d->get ##primval ();\
+ }\
+ else {\
+ PropertyImpl* p = d->getPropertyImpl(prop);\
+ if (p != 0) \
+ {\
+ if (p->isMany()|| p->getTypeImpl()->isFromList())\
+ {\
+ long l;\
+ DataObjectImpl* doi = d->findDataObject(prop,&l);\
+ if (doi != 0) {\
+ return doi->get ## primval();\
+ }\
+ string msg("Get value - index out of range:");\
+ msg += path;\
+ SDO_THROW_EXCEPTION("getter", SDOIndexOutOfRangeException,\
+ msg.c_str());\
+ }\
+ else\
+ {\
+ if (!d->isSet(*p)) {\
+ return p->get ##primval ##Default();\
+ }\
+ return d->get ##primval (*p);\
+ }\
+ }\
+ }\
+ }\
+ string msg("Get value - path not found");\
+ SDO_THROW_EXCEPTION("getter", SDOPathNotFoundException,\
+ msg.c_str());\
+ }\
+ catch (SDORuntimeException e) {\
+ SDO_RETHROW_EXCEPTION("getter", e);\
+ }\
+ }
+
+/** @def getCharsFromPath
+ *
+ * A macro for the getting of primitive characters from a data object by path
+ */
+
+#define getCharsFromPath(primval, retval, defval)\
+ unsigned int DataObjectImpl::get ##primval (const char* path, retval valptr , unsigned int max)\
+ {\
+ DataObjectImpl* d;\
+ char *spath = 0;\
+ char* prop = 0;\
+ try {\
+ spath = DataObjectImpl::stripPath(path);\
+ prop = findPropertyContainer(spath,&d);\
+ if (spath){\
+ delete spath;\
+ spath = 0;\
+ }\
+ if (d != 0) {\
+ if (prop == 0 || (strlen(prop) == 0)) {\
+ return d->get ##primval ( valptr , max);\
+ }\
+ else {\
+ PropertyImpl* p = d->getPropertyImpl(prop);\
+ if (p != 0)\
+ {\
+ if (p->isMany() || p->getTypeImpl()->isFromList())\
+ {\
+ long l;\
+ DataObjectImpl* doi = d->findDataObject(prop,&l);\
+ delete prop;\
+ prop = 0;\
+ if (doi != 0) {\
+ return doi->get ## primval (valptr, max);\
+ }\
+ string msg("Get value - index out of range");\
+ msg += path;\
+ SDO_THROW_EXCEPTION("getChars", SDOIndexOutOfRangeException,\
+ msg.c_str());\
+ }\
+ else { \
+ delete prop;\
+ prop = 0;\
+ if (!d->isSet(*p)) {\
+ return p->get ##primval ##Default( valptr , max );\
+ }\
+ return d->get ##primval (*p, valptr , max);\
+ }\
+ }\
+ }\
+ if (prop) {\
+ delete prop;\
+ prop = 0;\
+ }\
+ }\
+ string msg("Get value - path not found");\
+ SDO_THROW_EXCEPTION("getCString", SDOPathNotFoundException,\
+ msg.c_str());\
+ }\
+ catch (SDORuntimeException e) {\
+ if (spath)delete spath;\
+ if (prop) delete prop;\
+ SDO_RETHROW_EXCEPTION("character getter", e);\
+ }\
+ }
+
+
+
+/** @def setPrimitiveFromPath
+ *
+ * A macro for the setting of primitive values in a data object by path
+ */
+
+#define setPrimitiveFromPath(primval,setval,platval)\
+ void DataObjectImpl::set ##primval (const char* path, setval value)\
+ {\
+ DataObjectImpl *d;\
+ char* spath = 0;\
+ char* prop = 0;\
+ try {\
+ spath = DataObjectImpl::stripPath(path);\
+ prop = findPropertyContainer(spath,&d);\
+ if (spath) {\
+ delete spath;\
+ spath = 0;\
+ }\
+ if (d != 0)\
+ {\
+ if (prop == 0 || (strlen(prop) == 0)) {\
+ d->set ##primval (value);\
+ }\
+ else {\
+ const PropertyImpl* p = d->getPropertyImpl(prop);\
+ if (p == 0 && d->getType().isOpenType()) \
+ {\
+ p = d->define ##primval (prop);\
+ }\
+ if (p == 0)\
+ {\
+ string msg("Set value - path not found");\
+ SDO_THROW_EXCEPTION("setter", SDOPathNotFoundException,\
+ msg.c_str());\
+ }\
+ if (p->isMany()|| p->getTypeImpl()->isFromList())\
+ {\
+ long l;\
+ DataObjectList& dol = d->getList((Property&)*p);\
+ DataObjectImpl* doi = d->findDataObject(prop,&l);\
+ delete prop;\
+ prop = 0;\
+ if (doi != 0) {\
+ doi->set ## primval (value);\
+ }\
+ else {\
+ dol.append(( platval) value);\
+ }\
+ }\
+ else {\
+ delete prop;\
+ prop = 0;\
+ d->set ##primval ((Property&)*p,value);\
+ }\
+ }\
+ }\
+ if (prop){\
+ delete prop;\
+ prop = 0;\
+ }\
+ }\
+ catch (SDORuntimeException e) {\
+ if (spath) delete spath;\
+ if (prop) delete prop;\
+ SDO_RETHROW_EXCEPTION("setter",e);\
+ }\
+ }
+
+/** @def setCharsFromPath
+ *
+ * A macro for the setting of primitive characters in a data object by path
+ */
+
+#define setCharsFromPath(primval,setval)\
+ void DataObjectImpl::set ##primval (const char* path, setval value, unsigned int len)\
+ {\
+ DataObjectImpl *d;\
+ char* spath = 0;\
+ char* prop = 0;\
+ try {\
+ spath = DataObjectImpl::stripPath(path);\
+ prop = findPropertyContainer(spath,&d);\
+ if (spath) {\
+ delete spath;\
+ spath = 0;\
+ }\
+ if (d != 0)\
+ {\
+ if (prop == 0 || (strlen(prop) == 0)) {\
+ d->set ##primval (value, len);\
+ }\
+ else {\
+ const PropertyImpl* p = d->getPropertyImpl(prop);\
+ if (p == 0 && d->getType().isOpenType())\
+ {\
+ p = d->define ##primval (prop);\
+ }\
+ if (p == 0)\
+ {\
+ string msg("Set value - path not found");\
+ SDO_THROW_EXCEPTION("setter", SDOPathNotFoundException,\
+ msg.c_str());\
+ }\
+ if (p->isMany()|| p->getTypeImpl()->isFromList())\
+ {\
+ long l;\
+ DataObjectList& dol = d->getList((Property&)*p);\
+ DataObjectImpl* doi = d->findDataObject(prop,&l);\
+ delete prop;\
+ prop = 0;\
+ if (doi != 0) {\
+ doi->set ## primval (value, len);\
+ }\
+ else {\
+ dol.append(value,len);\
+ }\
+ }\
+ else { \
+ delete prop;\
+ prop = 0;\
+ d->set ##primval ((Property&)*p,value, len);\
+ }\
+ }\
+ }\
+ if (prop){\
+ delete prop;\
+ prop = 0;\
+ }\
+ }\
+ catch (SDORuntimeException e) {\
+ if (spath) delete spath;\
+ if (prop) delete prop;\
+ SDO_RETHROW_EXCEPTION("setter",e);\
+ }\
+ }
+
+
+
+
+/** @def getPrimitiveFromProperty
+ *
+ * A macro for the getting of primitive values in a data object by property
+ */
+
+#define getPrimitiveFromProperty(primval,retval)\
+ retval DataObjectImpl::get ##primval (const Property& property)\
+ {\
+ return get ##primval (getPropertyIndex(property));\
+ }
+
+
+/** @def getCharsFromProperty
+ *
+ * A macro for the getting of primitive characters in a data object by property
+ */
+
+#define getCharsFromProperty(primval,retval)\
+ unsigned int DataObjectImpl::get ##primval (const Property& property, retval val, unsigned int max)\
+ {\
+ return get ##primval (getPropertyIndex(property), val, max);\
+ }
+
+
+/** @def setPrimitiveFromProperty
+ *
+ * A macro for the setting of primitive values in a data object by property
+ */
+
+#define setPrimitiveFromProperty(primval,primtype)\
+ void DataObjectImpl::set ##primval (const Property& property, primtype value)\
+ {\
+ set ##primval (getPropertyIndex(property),value);\
+ }
+
+/** @def setCharsFromProperty
+ *
+ * A macro for the setting of primitive characters in a data object by property
+ */
+
+#define setCharsFromProperty(primval,primtype)\
+ void DataObjectImpl::set ##primval (const Property& property, primtype value, unsigned int len)\
+ {\
+ set ##primval (getPropertyIndex(property),value, len);\
+ }
+
+
+
+ /** DataObject
+ * DataObjects are the non-primitive members of a Data graph.
+ *
+ * A data object is a representation of some structured data.
+ * it is the fundamental component in the SDO (Service Data Objects) package.
+ * Data objects support reflection, path-based accesss, convenience creation
+ * and deletion methods,and the ability to be part of a data graph.
+ * Each data object holds its data as a series of properties.
+ * Properties can be accessed by name, property index, or using the property
+ * meta object itself.
+ * A data object can also contain references to other data objects, through
+ * reference-type properties.
+ * A data object has a series of convenience accessors for its properties.
+ * These methods either use a path (String), a property index,
+ * or the property's meta object itself, to identify the property.
+ * Some examples of the path-based accessors are as follows:
+ * DataObjectPtr company = ...;
+ * company->getString("name");
+ * company->setString("name", "acme");
+ * company->getString("department.0/name")
+ * .n indexes from 0.
+ * company->getString("department[1]/name") [] indexes from 1.
+ * company->getDataObject("department[number=123]") returns the department where number=123
+ * company->getDataObject("..") returns the containing data object
+ * company->getDataObject("/") returns the root containing data object
+ * There are specific accessors for the primitive types and commonly used
+ * data types like String.
+ */
+
+
+void DataObjectImpl::handlePropertyNotSet(const char* name)
+{
+ // change of behaviour - no longer throw for this.
+
+// string msg("Get value on unset and undefaulted property:");
+// msg += name;
+// SDO_THROW_EXCEPTION("get value", SDOPropertyNotSetException,
+// msg.c_str());
+}
+
+
+
+ // setters and getters from a path specification
+
+ getCharsFromPath(String, wchar_t* , 0);
+ getCharsFromPath(Bytes, char* , 0);
+ setCharsFromPath(String, const wchar_t*);
+ setCharsFromPath(Bytes, const char*);
+ getCharsFromProperty(String,wchar_t*);
+ getCharsFromProperty(Bytes,char*);
+ setCharsFromProperty(String,const wchar_t*);
+ setCharsFromProperty(Bytes,const char*);
+ getCharsBasic(String,wchar_t*,0);
+ getCharsBasic(Bytes,char*,0);
+ setCharsBasic(String,const wchar_t*,"String");
+ setCharsBasic(Bytes,const char*,"Bytes");
+
+
+ // Convenience methods for string/bytes length
+
+ unsigned int DataObjectImpl::getLength(const Property& p)
+ {
+ switch (p.getType().getTypeEnum()) {
+ case Type::BooleanType:
+ return BOOL_SIZE;
+ case Type::CharacterType:
+ case Type::ByteType:
+ return BYTE_SIZE;
+ case Type::ShortType:
+ case Type::IntegerType:
+ case Type::LongType:
+ return MAX_LONG_SIZE;
+ case Type::FloatType:
+ return MAX_FLOAT_SIZE;
+ case Type::DoubleType:
+ return MAX_DOUBLE_SIZE;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::UriType:
+ case Type::StringType:
+ return getString(p,0,0);
+ case Type::BytesType:
+ return getBytes(p,0,0);
+ default:
+ return 0;
+ }
+ }
+
+ unsigned int DataObjectImpl::getLength()
+ {
+ switch (getType().getTypeEnum()) {
+ case Type::BooleanType:
+ return BOOL_SIZE;
+ case Type::CharacterType:
+ case Type::ByteType:
+ return BYTE_SIZE;
+ case Type::ShortType:
+ case Type::IntegerType:
+ case Type::LongType:
+ return MAX_LONG_SIZE;
+ case Type::FloatType:
+ return MAX_FLOAT_SIZE;
+ case Type::DoubleType:
+ return MAX_DOUBLE_SIZE;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::UriType:
+ case Type::StringType:
+ return getString(0,0);
+ case Type::BytesType:
+ return getBytes(0,0);
+ default:
+ return 0;
+ }
+ }
+
+ unsigned int DataObjectImpl::getLength(const char* path)
+ {
+ DataObjectImpl* d;
+ char * spath = DataObjectImpl::stripPath(path);
+ char * prop = findPropertyContainer(spath,&d);
+ if (spath) delete spath;
+ if (d != 0) {
+ if (prop == 0 || (strlen(prop) == 0)) {
+ return 0;
+ }
+ else
+ {
+ const Property& p = d->getProperty(prop);
+ delete prop;
+ return getLength(p);
+ }
+ }
+ else
+ {
+ if (prop)
+ {
+ const Property& p = getProperty(prop);
+ delete prop;
+
+ return getLength(p);
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ }
+
+ unsigned int DataObjectImpl::getLength(unsigned int index)
+ {
+ return getLength(getProperty(index));
+ }
+
+ bool DataObjectImpl::getBoolean(const char* path)
+ {
+ return getBoolean(SDOString(path));
+ }
+
+ // getPrimitiveFromPath(Boolean,bool,false); // Provides DataObjectImpl::getBoolean(const char*)
+ getPrimitiveFromPathUsingSDOString(Boolean,bool,false); // Provides DataObjectImpl::getBoolean(const SDOString&)
+ getPrimitiveFromPath(Byte,char,0);
+ getPrimitiveFromPath(Character,wchar_t,0);
+ getPrimitiveFromPath(Short,short,0);
+ getPrimitiveFromPath(Integer,long,0);
+ getPrimitiveFromPath(Long,int64_t,0L);
+ getPrimitiveFromPath(Double,long double,0.0);
+ getPrimitiveFromPath(Float,float,0.0);
+ getPrimitiveFromPath(Date,const SDODate,0);
+
+
+ setPrimitiveFromPath(Boolean,bool, bool);
+ setPrimitiveFromPath(Byte,char, char);
+ setPrimitiveFromPath(Character,wchar_t, wchar_t);
+ setPrimitiveFromPath(Short,short, short);
+#if __WORDSIZE ==64
+ setPrimitiveFromPath(Integer,long, int64_t);
+#else
+ setPrimitiveFromPath(Integer,long, long);
+#endif
+ setPrimitiveFromPath(Long,int64_t, int64_t);
+ setPrimitiveFromPath(Float,float, float);
+ setPrimitiveFromPath(Double,long double, long double);
+ setPrimitiveFromPath(Date,const SDODate, const SDODate);
+
+
+ getPrimitiveFromProperty(Boolean,bool);
+ getPrimitiveFromProperty(Byte,char);
+ getPrimitiveFromProperty(Character,wchar_t);
+ getPrimitiveFromProperty(Short,short);
+ getPrimitiveFromProperty(Integer,long);
+ getPrimitiveFromProperty(Long,int64_t);
+ getPrimitiveFromProperty(Double,long double);
+ getPrimitiveFromProperty(Float,float);
+ getPrimitiveFromProperty(Date,const SDODate);
+
+ setPrimitiveFromProperty(Boolean,bool);
+ setPrimitiveFromProperty(Byte,char);
+ setPrimitiveFromProperty(Character,wchar_t);
+ setPrimitiveFromProperty(Short,short);
+ setPrimitiveFromProperty(Integer,long);
+ setPrimitiveFromProperty(Long,int64_t);
+ setPrimitiveFromProperty(Float,float);
+ setPrimitiveFromProperty(Double,long double);
+ setPrimitiveFromProperty(Date,const SDODate);
+
+ getPrimitive(Boolean,bool,false);
+ getPrimitive(Byte,char,0);
+ getPrimitive(Character,wchar_t,0);
+ getPrimitive(Short,short,0);
+ getPrimitive(Integer,long,0);
+ getPrimitive(Long,int64_t,0L);
+ getPrimitive(Double,long double,0.0);
+ getPrimitive(Float,float,0.0);
+ getPrimitive(Date,const SDODate,0);
+
+ setPrimitive(Boolean,bool,"Boolean");
+ setPrimitive(Byte,char, "Byte");
+ setPrimitive(Character,wchar_t,"Character");
+ setPrimitive(Short,short,"Short");
+ setPrimitive(Integer,long,"Integer");
+ setPrimitive(Long,int64_t,"Long");
+ setPrimitive(Float,float,"Float");
+ setPrimitive(Double,long double,"Double");
+ setPrimitive(Date,const SDODate,"Date");
+
+
+
+ // open type support
+
+ const PropertyImpl* DataObjectImpl::defineProperty(const char* propname,
+ const Type& t)
+ {
+ openProperties.insert(
+ openProperties.end(), PropertyImpl(getType(),propname,
+ (TypeImpl&)t, false, false, true));
+ DataFactory* df = factory;
+ ((DataFactoryImpl*)df)->addOpenProperty(
+ PropertyImpl(getType(),propname,
+ (TypeImpl&)t, false, false, true));
+
+ return getPropertyImpl(propname);
+ }
+ const PropertyImpl* DataObjectImpl::defineProperty(const SDOString& propname,
+ const Type& t)
+ {
+ openProperties.insert(openProperties.end(),
+ PropertyImpl(getType(),
+ propname,
+ (TypeImpl&)t,
+ false,
+ false,
+ true));
+ DataFactory* df = factory;
+ ((DataFactoryImpl*)df)->addOpenProperty(PropertyImpl(getType(),
+ propname,
+ (TypeImpl&)t,
+ false,
+ false,
+ true));
+
+ return getPropertyImpl(propname);
+ }
+
+ void DataObjectImpl::undefineProperty(unsigned int index)
+ {
+ int point = index - openBase;
+ if (point < 0 || point >= openProperties.size()) return;
+
+ // downgrade all the property settings above this one
+
+ PropertyValueMap::iterator pit;
+ for (pit = PropertyValues.begin(); pit != PropertyValues.end();++pit)
+ {
+ if ((*pit).first > index)
+ {
+ if (getPropertyImpl((*pit).first)->isMany())
+ {
+ DataObjectListImpl* dl = (*pit).second->getListImpl();
+ if (dl != 0) dl->decrementPindex();
+ }
+ (*pit).first-=1;
+ }
+ }
+
+ // then remove this property from the list
+
+ std::list<PropertyImpl>::iterator it =
+ openProperties.begin();
+ for (int i=0;i<point;i++)++it; /* there must be a better way */
+
+ DataFactory* df = factory;
+ ((DataFactoryImpl*)df)->removeOpenProperty((*it).getName());
+
+ openProperties.erase(it);
+
+ return;
+ }
+
+ const PropertyImpl* DataObjectImpl::defineList(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "OpenDataObject");
+ openProperties.insert(
+ openProperties.end(), PropertyImpl(getType(),propname,
+ (TypeImpl&)t, true, false, true));
+
+ DataFactory* df = factory;
+ ((DataFactoryImpl*)df)->addOpenProperty(PropertyImpl(getType(),propname,
+ (TypeImpl&)t, true, false, true));
+
+ return getPropertyImpl(propname);
+ }
+
+ const PropertyImpl* DataObjectImpl::defineBoolean(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Boolean");
+ return defineProperty(propname,t);
+ }
+
+ const PropertyImpl* DataObjectImpl::defineByte(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Byte");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineCharacter(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Character");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineString(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "String");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineBytes(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Bytes");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineShort(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Short");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineInteger(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Integer");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineLong(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Long");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineFloat(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Float");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineDouble(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Double");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineDate(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Date");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineCString(const char* propname)
+ {
+ const Type& t = factory->getType(Type::SDOTypeNamespaceURI, "Bytes");
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineDataObject(const char* propname,
+ const Type& t)
+ {
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineDataObject(const SDOString& propname,
+ const Type& t)
+ {
+ return defineProperty(propname,t);
+ }
+ const PropertyImpl* DataObjectImpl::defineDataObject(const char* propname,
+ const char* typeURI, const char* typeName)
+ {
+ const Type& t = factory->getType(typeURI, typeName);
+ return defineProperty(propname,t);
+ }
+
+ // Used to return empty values - remove when defaults are there.
+ const char* DataObjectImpl::emptyString = "";
+
+ // Useful for debug, so not included in the macros above - but
+ // could be.
+ // getters and setters for strings
+
+ const char* DataObjectImpl::getCString(unsigned int propertyIndex)
+ {
+ validateIndex(propertyIndex);
+ if ((getProperty(propertyIndex).isMany())
+ || getPropertyImpl(propertyIndex)->getTypeImpl()->isFromList())
+ {
+
+ string msg("Get value not available on many valued property:");
+ msg += getProperty(propertyIndex).getName();
+ SDO_THROW_EXCEPTION("getCString", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ DataObjectImpl* d = getDataObjectImpl(propertyIndex);
+ if (d != 0) {
+ if (!d->isNull()) return d->getCString ();
+ return 0;
+ }
+ PropertyImpl* p = (PropertyImpl*)getPropertyImpl(propertyIndex);
+ if (p != 0)
+ {
+ if (isSet(propertyIndex)) return 0;
+ //if (p->isDefaulted())
+ //{
+ return p->getCStringDefault();
+ //}
+ //else
+ //{
+ // handlePropertyNotSet(p->getName());
+ //}
+ }
+ return 0;
+ }
+
+
+ void DataObjectImpl::setCString (unsigned int propertyIndex, const char* value)
+ {
+ validateIndex(propertyIndex);
+ PropertyValueMap::iterator i;
+ if ((getProperty(propertyIndex).isMany())
+ || getPropertyImpl(propertyIndex)->getTypeImpl()->isFromList())
+ {
+ string msg("Set value not available on many valued property:");
+ msg += getProperty(propertyIndex).getName();
+ SDO_THROW_EXCEPTION("setString", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ for (i = PropertyValues.begin(); i != PropertyValues.end();++i)
+ {
+ if ((*i).first == propertyIndex)
+ {
+ logChange(propertyIndex);
+ (*i).second->unsetNull();
+ (*i).second->setCString(value);
+ return;
+ }
+ }
+ DataFactory* df = getDataFactory();
+ DataObjectImpl* b = new DataObjectImpl(df, df->getType(Type::SDOTypeNamespaceURI,"String"));
+ b->setContainer(this);
+ b->setApplicableChangeSummary();
+ logChange(propertyIndex);
+ PropertyValues.insert(PropertyValues.end(),rdo(propertyIndex,b));
+ b->setCString(value);
+ return;
+ }
+
+
+ const char* DataObjectImpl::getCString (const char* path)
+ {
+ DataObjectImpl* d = 0;
+ char* spath = 0;
+ char *prop = 0;
+ try {
+ spath = DataObjectImpl::stripPath(path);
+ prop = findPropertyContainer(spath,&d);
+ if (spath) {
+ delete spath;
+ spath = 0;
+ }
+ if (d != 0) {
+ if (prop == 0 || (strlen(prop) == 0)) {
+ return d->getCString();
+ }
+ else {
+ PropertyImpl* p = d->getPropertyImpl(prop);
+ if (p != 0)
+ {
+ if (p->isMany()|| p->getTypeImpl()->isFromList())
+ {
+ long l;
+ DataObjectImpl* doi = d->findDataObject(prop,&l);
+ delete prop;
+ prop = 0;
+ if (doi != 0) {
+ return doi->getCString();
+ }
+ string msg("Get CString - index out of range");
+ msg += path;
+ SDO_THROW_EXCEPTION("getter", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+ else {
+ delete prop;
+ prop = 0;
+ if (!d->isSet(*p)) {
+ //if (p->isDefaulted())
+ //{
+ return p->getCStringDefault();
+ //}
+ //else
+ //{
+ // handlePropertyNotSet(p->getName());
+ //}
+ }
+ return d->getCString(*p);
+ }
+ }
+ }
+ }
+ if (prop){
+ delete prop;
+ prop = 0;
+ }
+ string msg("Get CString - object not found");
+ SDO_THROW_EXCEPTION("getCString", SDOPathNotFoundException,
+ msg.c_str());
+ }
+ catch (SDORuntimeException e) {
+ if (spath) delete spath;
+ if (prop) delete prop;
+ SDO_RETHROW_EXCEPTION("getCString",e);
+ }
+ }
+
+
+
+ void DataObjectImpl::setCString(const char* path, const char* value)
+ {
+ DataObjectImpl *d = 0;
+ char* spath = 0;
+ char* prop = 0;
+ try {
+ spath = DataObjectImpl::stripPath(path);
+ prop = findPropertyContainer(spath,&d);
+ if (spath) {
+ delete spath;
+ spath = 0;
+ }
+ if (d != 0) {
+ if (prop == 0 || (strlen(prop) == 0)) {
+ d->setCString(value);
+ }
+ else {
+ const PropertyImpl* p = d->getPropertyImpl(prop);
+ if (p == 0 && d->getType().isOpenType())
+ {
+ p = d->defineBytes(prop);
+ }
+ if (p != 0)
+ {
+ if (p->isMany()|| p->getTypeImpl()->isFromList()) {
+ long l;
+ DataObjectList& dol = d->getList((Property&)*p);
+ DataObjectImpl* doi = d->findDataObject(prop,&l);
+ if (doi != 0)
+ {
+ doi->setCString(value);
+ }
+ else
+ {
+ dol.append(value);
+ }
+ }
+ else {
+ d->setCString((Property&)*p,value);
+ }
+ }
+ delete prop;
+ prop = 0;
+ }
+ }
+ if (prop) {
+ delete prop;
+ prop = 0;
+ }
+ }
+ catch (SDORuntimeException e) {
+ if (spath) delete spath;
+ if (prop) delete prop;
+ SDO_RETHROW_EXCEPTION("setCString",e);
+ }
+ }
+
+
+
+ const char* DataObjectImpl::getCString (const Property& property)
+ {
+ return getCString(getPropertyIndex(property));
+ }
+
+
+ void DataObjectImpl::setCString(const Property& property, const char* value)
+ {
+ setCString(getPropertyIndex(property),value);
+ }
+
+ // null support
+
+ bool DataObjectImpl::isNull(const unsigned int propertyIndex)
+ {
+ validateIndex(propertyIndex);
+ if ((getProperty(propertyIndex).isMany()))
+ {
+ return false;
+ }
+
+ PropertyValueMap::iterator i;
+ for (i = PropertyValues.begin(); i != PropertyValues.end();++i)
+ {
+ if ((*i).first == propertyIndex)
+ {
+ return (*i).second->isNull();
+ }
+ }
+ return false;
+ }
+
+ bool DataObjectImpl::isNull(const Property& property)
+ {
+ return isNull(getPropertyIndex(property));
+ }
+
+ bool DataObjectImpl::isNull(const char* path)
+ {
+ DataObjectImpl *d = 0;
+ char* spath = 0;
+ char* prop = 0;
+ try {
+ spath = DataObjectImpl::stripPath(path);
+ prop = findPropertyContainer(spath,&d);
+ if (spath) {
+ delete spath;
+ spath = 0;
+ }
+ if (d != 0) {
+ if (prop == 0 || (strlen(prop) == 0)) {
+ return d->isNull();
+ }
+ else {
+ const Property& p = d->getProperty(prop);
+ delete prop;
+ return d->isNull(p);
+ }
+ }
+ if (prop) {
+ delete prop;
+ prop = 0;
+ }
+ return false;
+ }
+ catch (SDORuntimeException e) {
+ if (spath) delete spath;
+ if (prop) delete prop;
+ SDO_RETHROW_EXCEPTION("isNull",e);
+ }
+
+ }
+ void DataObjectImpl::setNull(const unsigned int propertyIndex)
+ {
+ validateIndex(propertyIndex);
+ if ((getProperty(propertyIndex).isMany()))
+ {
+ string msg("Setting a list to null is not supported:");
+ msg += getProperty(propertyIndex).getName();
+ SDO_THROW_EXCEPTION("setNull", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ PropertyValueMap::iterator i;
+ for (i = PropertyValues.begin(); i != PropertyValues.end();++i)
+ {
+ if ((*i).first == propertyIndex)
+ {
+ logChange(propertyIndex);
+ (*i).second->setNull();
+ return;
+ }
+ }
+ // The property was not set yet...
+ logChange(propertyIndex);
+ DataFactory* df = getDataFactory();
+ DataObjectImpl* b = new DataObjectImpl(df,
+ getProperty(propertyIndex).getType());
+ b->setContainer(this);
+ b->setApplicableChangeSummary();
+ PropertyValues.insert(PropertyValues.end(),rdo(propertyIndex,b));
+ b->setNull();
+
+
+ }
+ void DataObjectImpl::setNull(const Property& property)
+ {
+ setNull(getPropertyIndex(property));
+ }
+
+ void DataObjectImpl::setNull(const char* path)
+ {
+ DataObjectImpl *d = 0;
+ char* spath = 0;
+ char* prop = 0, *pc = 0;
+ try {
+ spath = DataObjectImpl::stripPath(path);
+ prop = findPropertyContainer(spath,&d);
+ if (spath) {
+ delete spath;
+ spath = 0;
+ }
+ if (d != 0) {
+ if (prop == 0 || (strlen(prop) == 0)) {
+ try {
+ DataObjectImpl* cont = d->getContainerImpl();
+ if (cont != 0)
+ {
+ pc = (char*) strrchr(path,'/');
+ if (pc != 0)pc++;
+ }
+ const Property& pcont = cont->getProperty(pc);
+ cont->logChange(pcont);
+ }
+ catch (SDORuntimeException&)
+ {
+ }
+ d->setNull();
+ }
+ else {
+ const PropertyImpl* p = d->getPropertyImpl(prop);
+ if (p == 0)
+ {
+ if(d->getType().isOpenType())
+ {
+ string msg("Cannot set unassigned open property to null:");
+ msg += prop;
+ SDO_THROW_EXCEPTION("setNull", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ else
+ {
+ string msg("Property Not Found:");
+ msg += prop;
+ SDO_THROW_EXCEPTION("setNull", SDOPropertyNotFoundException,
+ msg.c_str());
+ }
+ }
+ delete prop;
+ d->setNull((Property&)*p);
+ return;
+ }
+ }
+ if (prop) {
+ delete prop;
+ prop = 0;
+ }
+ return;
+ }
+ catch (SDORuntimeException e) {
+ if (spath) delete spath;
+ if (prop) delete prop;
+ SDO_RETHROW_EXCEPTION("setNull",e);
+ }
+
+ }
+
+
+
+ // getters and setters for a List data object
+
+ DataObjectList& DataObjectImpl::getList(const char* path)
+ {
+ DataObjectImpl *d;
+ char* spath = DataObjectImpl::stripPath(path);
+ char* prop = findPropertyContainer(spath,&d);
+ if (spath) delete spath;
+ if (d != 0) {
+ if (prop == 0 || (strlen(prop) == 0)) {
+ return d->getList();
+ }
+ else {
+ const PropertyImpl* p = d->getPropertyImpl(prop);
+ if (p == 0 && d->getType().isOpenType())
+ {
+ p = d->defineList(prop);
+ }
+ if (p != 0)
+ {
+ delete prop;
+ return d->getList((Property&)*p);
+ }
+ }
+ }
+ if (prop) delete prop;
+
+ string msg("Invalid path:");
+ msg += path;
+ SDO_THROW_EXCEPTION("getList",SDOPathNotFoundException, msg.c_str());
+
+ }
+
+
+
+ DataObjectList& DataObjectImpl::getList(unsigned int propIndex)
+ {
+ if (!(getProperty(propIndex).isMany()))
+ {
+ if (!getPropertyImpl(propIndex)->getTypeImpl()->isFromList())
+ {
+ string msg("Get list not available on single valued property:");
+ msg += getProperty(propIndex).getName();
+ SDO_THROW_EXCEPTION("getList", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ }
+ DataObjectImpl* d = getDataObjectImpl(propIndex);
+ if (d == 0)
+ {
+ string msg("Property Not Found:");
+ msg += getType().getProperty(propIndex).getName();
+ SDO_THROW_EXCEPTION("getList", SDOPropertyNotFoundException,
+ msg.c_str());
+ }
+ return d->getList();
+ }
+
+ DataObjectList& DataObjectImpl::getList(const Property& p)
+ {
+ if (!p.isMany())
+ {
+ PropertyImpl* pi = (PropertyImpl*)&p;
+ if (!pi->getTypeImpl()->isFromList())
+ {
+ string msg("Get list not available on single valued property:");
+ msg += p.getName();
+ SDO_THROW_EXCEPTION("getList", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ }
+
+ int propIndex = getPropertyIndex(p);
+ DataObjectImpl* d = getDataObjectImpl(propIndex);
+ if (d == 0) {
+ // There is no list yet, so we need to create an
+ // empty data object to hold the list
+ DataFactory* df = getDataFactory();
+ d = new DataObjectImpl(df, df->getType(Type::SDOTypeNamespaceURI,"DataObject"));
+ PropertyValues.insert(PropertyValues.end(),rdo(propIndex,d));
+ d->setContainer(this);
+ d->setApplicableChangeSummary();
+
+ DataObjectListImpl* list = new DataObjectListImpl(df,this,
+ propIndex,p.getType().getURI(),p.getType().getName());
+ d->setList(list);
+
+ }
+ return d->getList();
+ }
+
+
+
+ DataObjectList& DataObjectImpl::getList()
+ {
+ if (getTypeImpl().isFromList())
+ {
+ return getList("values");
+ }
+ return *listValue;
+ }
+
+ DataObjectListImpl* DataObjectImpl::getListImpl()
+ {
+ if (getTypeImpl().isFromList())
+ {
+ DataObjectList& dl = getList("values");
+ return (DataObjectListImpl*)&dl;
+ }
+ return listValue;
+ }
+
+
+
+ /////////////////////////////////////////////////////////////////////////////
+ // Utilities
+ /////////////////////////////////////////////////////////////////////////////
+
+
+ // get an index, or throw if the prop is not part of this DO
+
+ unsigned int DataObjectImpl::getPropertyIndex(const Property& p)
+ {
+ PropertyList props = getType().getProperties();
+
+ for (int i = 0; i < props.size() ; ++i)
+ {
+ if (!strcmp(props[i].getName(),p.getName()) )
+ {
+ return i;
+ }
+ }
+ if (getType().isOpenType())
+ {
+ std::list<PropertyImpl>::iterator j;
+ int count = 0;
+ for (j = openProperties.begin() ;
+ j != openProperties.end() ; ++j)
+ {
+ if (!strcmp((*j).getName(),p.getName()))
+ {
+ return count+openBase;
+ }
+ count++;
+ }
+ }
+ string msg("Cannot find property:");
+ msg += p.getName();
+ SDO_THROW_EXCEPTION("getPropertyIndex", SDOPropertyNotFoundException,
+ msg.c_str());
+ }
+
+ const Property& DataObjectImpl::getProperty(unsigned int index)
+ {
+ PropertyImpl* pi = getPropertyImpl(index);
+ if (pi == 0)
+ {
+ string msg("Index out of range");
+ SDO_THROW_EXCEPTION("getProperty", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+ return (Property&)*pi;
+ }
+
+ /**
+ * See if the property currently exists
+ */
+
+ bool DataObjectImpl::hasProperty(const char* name)
+ {
+ PropertyImpl* pi = getPropertyImpl(name);
+ if (pi == 0) return false;
+ return true;
+ }
+
+ bool DataObjectImpl::hasProperty(const SDOString& name)
+ {
+ PropertyImpl* pi = getPropertyImpl(name);
+ if (pi == 0) return false;
+ return true;
+ }
+
+
+ PropertyImpl* DataObjectImpl::getPropertyImpl(unsigned int index)
+ {
+ PropertyList props = getType().getProperties();
+ if (index < props.size())
+ {
+ return (PropertyImpl*)&props[index];
+ }
+
+ if (getType().isOpenType())
+ {
+ if (index >= openBase && index - openBase < openProperties.size())
+ {
+ std::list<PropertyImpl>::iterator j;
+ int val = 0;
+ j = openProperties.begin();
+ while (val < index-openBase && j != openProperties.end())
+ {
+ val++;
+ j++;
+ }
+ if (j != openProperties.end()) return &(*j);
+ }
+ }
+ return 0;
+ }
+
+
+ //////////////////////////////////////////////////////////////////////
+ // TODO - this is rubbish, but gets us by until XPATH is done
+ // trip the path down to characters which I am going to
+ // recognise later (a-z, A-Z _ [ ] .)
+ //////////////////////////////////////////////////////////////////////
+
+ const char* DataObjectImpl::templateString =
+ " /abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890=[]._#";
+
+ char* DataObjectImpl::stripPath(const char* path)
+ {
+ int pos = 0;
+ char* s = 0;
+ if (path == 0) return s;
+
+ s = new char[strlen(path)+1];
+
+ for (int i=0;i < strlen(path); i++)
+ {
+ if (strchr(templateString,path[i]) != 0) {
+ s[pos++] = path[i];
+ }
+ }
+ s[pos++] = 0;
+ return s;
+ }
+
+ void DataObjectImpl::stripPath(const SDOString& path, SDOString& result)
+ {
+ result.erase();
+ result.reserve(path.length());
+
+ size_t start = 0;
+ size_t position = path.find_first_not_of(templateString);
+
+ while (position != string::npos)
+ {
+ result.append(path, start, (position - start));
+ start = ++position;
+ position = path.find_first_not_of(templateString, position);
+ }
+
+ result.append(path, start, string::npos);
+
+ return;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // Find a data object or return 0 if not found
+ //////////////////////////////////////////////////////////////////////
+
+ DataObjectImpl* DataObjectImpl::findDataObject(char* token, long* index)
+ {
+ // name , name[int], name[x=y] name.int
+ char c = 0;
+ char* beginbrace = strchr(token,'[');
+ char* endbrace = strchr(token,']');
+ char* dot = strchr(token,'.');
+ char* breaker = 0;
+
+
+ if (dot != 0)
+ {
+ if (beginbrace != 0)
+ {
+ breaker = (beginbrace < dot)? beginbrace:dot;
+ }
+ else
+ {
+ breaker = dot;
+ }
+ }
+ else
+ {
+ breaker = beginbrace;
+ }
+
+ if (breaker == 0){
+ // its this object, and a property thereof
+ *index = -1;
+ const Property& p = getProperty(token);
+ return getDataObjectImpl(p);
+
+ }
+
+ c = *breaker;
+ *breaker = 0;
+ const Property& p = getProperty(token);
+ *breaker = c;
+
+
+ breaker++;
+
+ if (endbrace != 0)
+ {
+ *endbrace = 0;
+ }
+
+ char* eq = strchr(breaker,'=');
+
+ if (eq == 0)
+ {
+ int val = atoi(breaker);
+ DataObjectList& list = getList(p);
+
+ // The spec says that depts[1] is the first element,
+ // as is depts.0
+
+ if (beginbrace != 0)val--;
+
+ if (endbrace != 0)*endbrace = ']';
+
+ if (val >=0 && val < list.size())
+ {
+ DataObject* dob = list[val];
+ *index = val;
+ return (DataObjectImpl*)dob;
+ }
+ *index = -1;
+ return 0;
+ }
+ *eq = 0;
+ // breaker is now propname
+ eq++;
+ // eq is now propval
+
+ DataObjectList& list = getList(p);
+ for (int li = 0 ; li < list.size() ; ++li)
+ {
+ // TODO comparison for double not ok
+
+ const Type & t = list[li]->getType();
+ const Property& p = list[li]->getProperty(breaker);
+ int ok = 0;
+
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ {
+ // getCString will return "true" or "false"
+ if (!strcmp(eq,list[li]->getCString(p))) ok = 1;
+ }
+ break;
+
+ case Type::ByteType:
+ {
+ char cc = (char)eq[0];
+ // getByte return a char
+ if (cc == list[li]->getByte(p)) ok = 1;
+ }
+ break;
+
+ case Type::CharacterType:
+ {
+ wchar_t wc = (wchar_t)((wchar_t*)eq)[0];
+ // TODO - this is not a very accesible way of storing a wchar
+ if (wc == list[li]->getCharacter(p)) ok = 1;
+ }
+ break;
+
+ case Type::IntegerType:
+ {
+ long ic = atol(eq);
+ if (ic == list[li]->getInteger(p)) ok = 1;
+ }
+ break;
+
+ case Type::DateType:
+ {
+ long dc = atol(eq);
+ if (dc == (long)(list[li]->getDate(p).getTime())) ok = 1;
+ }
+ break;
+
+ case Type::DoubleType:
+ {
+ // TODO - double needs a bigger size than float
+ long double ldc = (long double)atof(eq);
+ if (ldc == list[li]->getDouble(p)) ok = 1;
+ }
+ break;
+
+ case Type::FloatType:
+ {
+ float fc = atof(eq);
+ if (fc == list[li]->getFloat(p)) ok = 1;
+ }
+ break;
+
+ case Type::LongType:
+ {
+#if defined(WIN32) || defined (_WINDOWS)
+ int64_t lic = (int64_t)_atoi64(eq);
+#else
+ int64_t lic = (int64_t)strtoll(eq, NULL, 0);
+#endif
+
+ if (lic == list[li]->getLong(p)) ok = 1;
+ }
+ break;
+
+ case Type::ShortType:
+ {
+ short sic = atoi(eq);
+ if (sic == list[li]->getShort(p)) ok = 1;
+ }
+ break;
+
+
+ case Type::BytesType:
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ {
+
+ if (!strcmp(eq, list[li]->getCString(p))) ok = 1;
+ // try with quotes too
+ char *firstquote = strchr(eq,'"');
+ char *firstsingle = strchr(eq,'\'');
+ char searchchar = 0;
+
+ if (firstsingle == 0)
+ {
+ if (firstquote != 0)
+ {
+ searchchar = '"';
+ }
+ }
+ else
+ {
+ if (firstquote != 0 && firstquote < firstsingle)
+ {
+ searchchar = '"';
+ }
+ else
+ {
+ searchchar = '\'';
+ firstquote = firstsingle;
+ }
+ }
+
+ if (searchchar != 0)
+ {
+ char* ender = strchr(firstquote+1,searchchar);
+ if (ender != 0)
+ {
+ *ender = 0;
+ if (!strcmp(firstquote+1, list[li]->getCString(p))) ok = 1;
+ *ender = searchchar;
+ }
+ }
+ }
+ break;
+
+ case Type::DataObjectType:
+ break;
+
+ default:
+ break;
+ }
+
+ if (ok == 1)
+ {
+ *--eq='=';
+ if (endbrace != 0)*endbrace = ']';
+ DataObject* dob = list[li];
+ *index = li;
+ return (DataObjectImpl*)dob;
+ }
+ }
+ if (endbrace != 0)*endbrace = ']';
+ *--eq='=';
+ return 0;
+ }
+DataObjectImpl* DataObjectImpl::findDataObject(const SDOString& token, long* index)
+{
+ // name , name[int], name[x=y] name.int
+ // char c = 0;
+ size_t beginbrace = token.find('[');
+ size_t dot = token.find('.');
+ size_t breaker = 0;
+
+// char* beginbrace = strchr(token,'[');
+// char* endbrace = strchr(token,']');
+// char* dot = strchr(token,'.');
+// char* breaker = 0;
+
+ if (dot != string::npos)
+ {
+ if (beginbrace != string::npos)
+ {
+ breaker = (beginbrace < dot) ? beginbrace : dot;
+ }
+ else
+ {
+ breaker = dot;
+ }
+ }
+ else
+ {
+ breaker = beginbrace;
+ }
+
+ if (breaker == string::npos){
+ // its this object, and a property thereof
+ *index = -1;
+ const Property& p = getProperty(token);
+ return getDataObjectImpl(p);
+ }
+
+ // We did find a breaker character.
+ const Property& p = getProperty(SDOString(token, 0, breaker));
+
+ breaker++;
+
+ size_t endbrace = token.find(']');
+ SDOString breakerStr = token.substr(breaker, (endbrace - breaker));
+ // Search for the first occurence of an = sign starting at the previously
+ // identified "breaker" character and ending at the endbrace just found. We
+ // need to make a new SDOString to contain that substring.
+
+ size_t eq = breakerStr.find('=');
+
+ if (eq == string::npos)
+ {
+ // There is no "=" sign
+ int val = atoi(breakerStr.c_str());
+ DataObjectList& list = getList(p);
+
+ // The spec says that depts[1] is the first element, as is depts.0
+ if (beginbrace != string::npos) val--;
+
+ if (val >=0 && val < list.size())
+ {
+ DataObject* dob = list[val];
+ *index = val;
+ return (DataObjectImpl*)dob;
+ }
+ *index = -1;
+ return 0;
+ }
+
+ // We did find an "=" sign.
+ // *eq = 0;
+ SDOString PropertyName = token.substr(breaker, (eq - breaker));
+ // breaker is now propname
+ eq++;
+ SDOString PropertyValue = token.substr(eq, (endbrace - eq));
+ // eq is now propval
+
+ DataObjectList& list = getList(p);
+ for (int li = 0 ; li < list.size() ; ++li)
+ {
+ // TODO comparison for double not ok
+
+ const Type & t = list[li]->getType();
+ const Property& p = list[li]->getProperty(PropertyName);
+ int ok = 0;
+
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ {
+ // getCString will return "true" or "false"
+ if (!strcmp(PropertyValue.c_str(), list[li]->getCString(p))) ok = 1;
+ }
+ break;
+
+ case Type::ByteType:
+ {
+ char cc = PropertyValue[0];
+ // getByte return a char
+ if (cc == list[li]->getByte(p)) ok = 1;
+ }
+ break;
+
+ case Type::CharacterType:
+ {
+ wchar_t wc = *((wchar_t*) PropertyValue.c_str());
+ // wchar_t wc = (wchar_t)((wchar_t*)eq)[0];
+ // TODO - this is not a very accesible way of storing a wchar
+ if (wc == list[li]->getCharacter(p)) ok = 1;
+ }
+ break;
+
+ case Type::IntegerType:
+ {
+ long ic = atol(PropertyValue.c_str());
+ if (ic == list[li]->getInteger(p)) ok = 1;
+ }
+ break;
+
+ case Type::DateType:
+ {
+ long dc = atol(PropertyValue.c_str());
+ if (dc == (long)(list[li]->getDate(p).getTime())) ok = 1;
+ }
+ break;
+
+ case Type::DoubleType:
+ {
+ // TODO - double needs a bigger size than float
+ long double ldc = (long double)atof(PropertyValue.c_str());
+ if (ldc == list[li]->getDouble(p)) ok = 1;
+ }
+ break;
+
+ case Type::FloatType:
+ {
+ float fc = atof(PropertyValue.c_str());
+ if (fc == list[li]->getFloat(p)) ok = 1;
+ }
+ break;
+
+ case Type::LongType:
+ {
+#if defined(WIN32) || defined (_WINDOWS)
+ int64_t lic = (int64_t)_atoi64(PropertyValue.c_str());
+#else
+ int64_t lic = (int64_t)strtoll(PropertyValue.c_str(), NULL, 0);
+#endif
+
+ if (lic == list[li]->getLong(p)) ok = 1;
+ }
+ break;
+
+ case Type::ShortType:
+ {
+ short sic = atoi(PropertyValue.c_str());
+ if (sic == list[li]->getShort(p)) ok = 1;
+ }
+ break;
+
+ case Type::BytesType:
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ {
+
+ if (!strcmp(PropertyValue.c_str(), list[li]->getCString(p))) ok = 1;
+ // try with quotes too
+ size_t firstquote = PropertyValue.find('"');
+ size_t firstsingle = PropertyValue.find('\'');
+
+ char searchchar = 0;
+
+ if (firstsingle == string::npos)
+ {
+ if (firstquote != string::npos)
+ {
+ searchchar = '"';
+ }
+ }
+ else
+ {
+ if (firstquote != string::npos && firstquote < firstsingle)
+ {
+ searchchar = '"';
+ }
+ else
+ {
+ searchchar = '\'';
+ firstquote = firstsingle;
+ }
+ }
+
+ if (searchchar != 0)
+ {
+ size_t ender = PropertyValue.find(searchchar, firstquote + 1);
+ if (ender != string::npos)
+ {
+ if (!strcmp(PropertyValue.substr(firstquote + 1, ender - firstquote).c_str(), list[li]->getCString(p)))
+ ok = 1;
+ }
+ }
+ }
+ break;
+
+ case Type::DataObjectType:
+ break;
+
+ default:
+ break;
+ }
+
+ if (ok == 1)
+ {
+ DataObject* dob = list[li];
+ *index = li;
+ return (DataObjectImpl*)dob;
+ }
+ }
+ return 0;
+}
+
+
+ //////////////////////////////////////////////////////////////////////
+ // Find a data object and a property name within it.
+ //////////////////////////////////////////////////////////////////////
+
+ char* DataObjectImpl::findPropertyContainer(const char* path, DataObjectImpl** din)
+ {
+
+ // initially check for "#/" which indicates that we need to find the root
+ // object first
+ if (path == 0) return 0;
+
+ if (strlen(path) <= 2)
+ {
+ if (path[0] == '#')
+ {
+ DataObjectImpl* root = this;
+ while (root->getContainerImpl() != 0)
+ {
+ root = root->getContainerImpl();
+ }
+ *din = root;
+ return 0;
+ }
+ }
+
+ if (path[0] == '#' && path[1] == '/')
+ {
+ DataObjectImpl* root = this;
+ while (root->getContainerImpl() != 0)
+ {
+ root = root->getContainerImpl();
+ }
+ return root->findPropertyContainer(&path[2],din);
+ }
+
+ DataObjectImpl* d;
+ char* i = (char*) strchr(path,'/');
+ char* remaining = 0;
+ char* token = 0;
+
+ if (i != 0)
+ {
+ int j = strlen(path) - strlen(i);
+ if (j > 0)
+ {
+ token = new char[j + 1];
+ strncpy(token,path, j);
+ token[j] = 0;
+ }
+ if (strlen(i) > 1)
+ {
+ remaining = new char[strlen(i)];
+ strcpy(remaining, i+1);
+ }
+ }
+ else
+ {
+ remaining = new char[strlen(path) + 1];
+ strcpy(remaining,path);
+ }
+
+ if (token == 0)
+ {
+ if (remaining != 0 && !strcmp(remaining,".."))
+ {
+ /* Its the container itself */
+ *din = getContainerImpl();
+ delete remaining;
+ return 0;
+ }
+
+ /* Its this data object - property could be empty or
+ valid or invalid - user must check */
+ *din = this;
+ return remaining;
+ }
+
+ if (!strcmp(token,"..")) {
+ /* Its derived from the container */
+ d = getContainerImpl();
+ /* carry on trying to find a property */
+ if (d != 0) {
+ char* ret = d->findPropertyContainer(remaining, din);
+ delete token;
+ if (remaining) delete remaining;
+ return ret;
+ }
+ /* Give up - no container */
+ delete token;
+ if (remaining) delete remaining;
+ *din = 0;
+ return 0;
+ }
+
+
+ /* Try to find a property ....*/
+ long l;
+ d = findDataObject(token,&l);
+ if (d != 0) {
+ char* ret = d->findPropertyContainer(remaining,din);
+ delete token;
+ if (remaining) delete remaining;
+ return ret;
+ }
+
+ /* Give up its not in the tree */
+
+ delete token;
+ if (remaining) delete remaining;
+ *din = 0;
+ return 0;
+ }
+ SDOString DataObjectImpl::findPropertyContainer(const SDOString& path, DataObjectImpl** din)
+ {
+ // initially check for "#/" which indicates that we need to find the root object first
+ if (path.empty()) return 0;
+
+ if (path.length() <= 2)
+ {
+ if (path[0] == '#')
+ {
+ DataObjectImpl* root = this;
+ while (root->getContainerImpl() != 0)
+ {
+ root = root->getContainerImpl();
+ }
+ *din = root;
+ return SDOString();
+ }
+ }
+
+ if (path[0] == '#' && path[1] == '/')
+ {
+ DataObjectImpl* root = this;
+ while (root->getContainerImpl() != 0)
+ {
+ root = root->getContainerImpl();
+ }
+ return root->findPropertyContainer(SDOString(path, 2), din);
+ }
+
+ DataObjectImpl* d;
+ size_t slashPos = path.find('/'); // i is the subscript of the found character
+ SDOString remaining;
+ SDOString token;
+
+ if (slashPos != string::npos) // If we found a slash character
+ {
+ if (slashPos > 0) // If there is something before the slash
+ {
+ token.assign(path, 0, slashPos);
+ }
+ if ((path.length() - slashPos) > 1) // If there is something after the slash
+ {
+ remaining.assign(path, slashPos + 1, string::npos);
+ }
+ }
+ else
+ {
+ remaining = path;
+ }
+
+ if (token.empty())
+ {
+ if (remaining == "..")
+ {
+ /* Its the container itself */
+ *din = getContainerImpl();
+ return SDOString();
+ }
+
+ /* Its this data object - property could be empty or
+ valid or invalid - user must check */
+ *din = this;
+ return remaining;
+ }
+
+ if (token == "..") {
+ /* Its derived from the container */
+ d = getContainerImpl();
+ /* carry on trying to find a property */
+ if (d != 0) {
+ return d->findPropertyContainer(remaining, din);
+ }
+ /* Give up - no container */
+ *din = 0;
+ return 0;
+ }
+
+ /* Try to find a property ....*/
+ long l;
+ d = findDataObject(token, &l);
+ if (d != 0) {
+ return d->findPropertyContainer(remaining, din);
+ }
+
+ /* Give up its not in the tree */
+ *din = 0;
+ return 0;
+ }
+
+
+
+
+ // Returns a read-only List of the Properties currently used in thIs DataObject.
+ // ThIs list will contain all of the properties in getType().getProperties()
+ // and any properties where isSet(property) is true.
+ // For example, properties resulting from the use of
+ // open or mixed XML content are present if allowed by the Type.
+ // The list does not contain duplicates.
+ // The order of the properties in the list begins with getType().getProperties()
+ // and the order of the remaining properties is determined by the implementation.
+ // The same list will be returned unless the DataObject is updated so that
+ // the contents of the list change
+ // @return the list of Properties currently used in thIs DataObject.
+
+ PropertyList /* Property */ DataObjectImpl::getInstanceProperties()
+ {
+ std::vector<PropertyImpl*> theVec;
+ PropertyList propList = getType().getProperties();
+ for (int i = 0 ; i < propList.size() ; ++i)
+ {
+ Property& p = propList[i];
+ theVec.insert(theVec.end(),(PropertyImpl*)&p);
+ }
+ std::list<PropertyImpl>::iterator j;
+ for (j = openProperties.begin() ;
+ j != openProperties.end() ; ++j)
+ {
+ theVec.insert(theVec.end(),&(*j));
+ }
+ return PropertyList(theVec);
+ }
+
+ void DataObjectImpl::setInstancePropertyType(unsigned int index,
+ const Type* t)
+ {
+ if (index >= openBase && index - openBase < openProperties.size())
+ {
+ std::list<PropertyImpl>::iterator j;
+ unsigned int count = openBase;
+ for (j = openProperties.begin() ;
+ j != openProperties.end() ; ++j)
+ {
+ if (count == index)
+ {
+ openProperties.insert(j,
+ PropertyImpl(getType(),
+ (*j).getName(),
+ (TypeImpl&)*t,
+ (*j).isMany(),
+ (*j).isReadOnly(),
+ (*j).isContainment()));
+
+ DataFactory* df = factory;
+ ((DataFactoryImpl*)df)->addOpenProperty(
+ PropertyImpl(getType(),
+ (*j).getName(),
+ (TypeImpl&)*t,
+ (*j).isMany(),
+ (*j).isReadOnly(),
+ (*j).isContainment()));
+
+ openProperties.erase(j);
+
+ return;
+ }
+ count++;
+ }
+ }
+ return;
+ }
+
+ // Returns the Sequence for thIs DataObject.
+ // When Type.isSequencedType() == true,
+ // the Sequence of a DataObject corresponds to the
+ // XML elements representing the values of its properties.
+ // Updates through DataObject and the Lists or Sequences returned
+ // from DataObject operate on the same data.
+ // When Type.isSequencedType() == false, null is returned.
+ // @return the <code>Sequence</code> or null.
+
+ SequenceImpl* DataObjectImpl::getSequenceImpl()
+ {
+
+ return sequence;
+ }
+
+ SequencePtr DataObjectImpl::getSequence()
+ {
+ return (SequencePtr)sequence;
+ }
+
+ SequencePtr DataObjectImpl::getSequence(const char* path)
+ {
+ DataObject* d = (DataObject*)getDataObject(path);
+ if (d) return d->getSequence();
+ return 0;
+ }
+
+ SequencePtr DataObjectImpl::getSequence(unsigned int propertyIndex)
+ {
+ DataObject* d = (DataObject*)getDataObject(propertyIndex);
+ if (d) return d->getSequence();
+ return 0;
+ }
+
+ SequencePtr DataObjectImpl::getSequence(const Property& property)
+ {
+ DataObject* d = (DataObject*)getDataObject(property);
+ if (d) return d->getSequence();
+ return 0;
+ }
+
+
+
+ ChangeSummaryPtr DataObjectImpl::getChangeSummary(const char* path)
+ {
+ DataObjectImpl* d = getDataObjectImpl(path);
+ return d->getChangeSummary();
+ }
+
+ ChangeSummaryPtr DataObjectImpl::getChangeSummary(unsigned int propIndex)
+ {
+ DataObjectImpl* d = getDataObjectImpl(propIndex);
+ return d->getChangeSummary();
+ }
+
+ ChangeSummaryPtr DataObjectImpl::getChangeSummary(const Property& prop)
+ {
+ DataObjectImpl* d = getDataObjectImpl(prop);
+ return d->getChangeSummary();
+
+ }
+
+ ChangeSummaryPtr DataObjectImpl::getChangeSummary()
+ {
+ if (getType().isChangeSummaryType())
+ {
+ return (ChangeSummaryPtr)localCS;
+ }
+ // The changesummaryobject MUST be a change summary type
+ // but as an additional check against looping, I will use
+ // a redundent getSummary() method.
+ // TODO - remove this.
+ if (changesummaryobject != 0) return
+ (ChangeSummaryPtr)(changesummaryobject->getSummary());
+ return 0;
+ }
+
+
+ ChangeSummaryImpl* DataObjectImpl::getChangeSummaryImpl()
+ {
+ if (getType().isChangeSummaryType())
+ {
+ return localCS;
+ }
+ // The changesummaryobject MUST be a change summary type
+ // but as an additional check against looping, I will use
+ // a redundent getSummary() method.
+ // TODO - remove this.
+ if (changesummaryobject != 0) return changesummaryobject->getSummary();
+ return 0;
+ }
+
+ ChangeSummaryImpl* DataObjectImpl::getSummary()
+ {
+ return localCS;
+ }
+
+ // sets a property of either this object or an object reachable from it,
+ // as identified by the specified path,
+ // to the specified value.
+ // @param path the path to a valid object and property.
+ // @param value the new value for the property.
+
+ void DataObjectImpl::setDataObject(const char* path, DataObjectPtr value)
+ {
+ DataObjectImpl* d;
+ char* prop = findPropertyContainer(path, &d);
+ if (d != 0)
+ {
+ if (prop != 0) {
+ const PropertyImpl* p = d->getPropertyImpl(prop);
+ if (p == 0 && d->getType().isOpenType())
+ {
+ if (value != 0)
+ {
+ p = d->defineDataObject(prop, value->getType());
+ }
+ }
+ if (p != 0)
+ {
+ if (p->isMany())
+ {
+ DataObjectList& dol = d->getList((Property&)*p);
+ long index;
+ DataObjectImpl* dx = d->findDataObject(prop,&index);
+ if (index >= 0)
+ {
+ if(index < dol.size())
+ {
+ dol.setDataObject((unsigned int)index,value);
+ }
+ else
+ {
+ dol.append(value);
+ }
+ delete prop;
+ return;
+ }
+ string msg("Set of data object on many valued item");
+ msg += path;
+ SDO_THROW_EXCEPTION("setDataObject", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ else
+ {
+ d->setDataObject((Property&)*p,value);
+ delete(prop);
+ return;
+ }
+ }
+ }
+ }
+ if (prop != 0)delete prop;
+
+ string msg("Path not valid:");
+ msg += path;
+ SDO_THROW_EXCEPTION("setDataObject", SDOPathNotFoundException,
+ msg.c_str());
+ }
+
+void DataObjectImpl::setDataObject(const SDOString& path, DataObjectPtr value)
+{
+ DataObjectImpl* d;
+ SDOString prop = findPropertyContainer(path, &d);
+ if (d != 0)
+ {
+ if (!prop.empty()) {
+ const PropertyImpl* p = d->getPropertyImpl(prop);
+ if (p == 0 && d->getType().isOpenType())
+ {
+ if (value != 0)
+ {
+ p = d->defineDataObject(prop, value->getType());
+ }
+ }
+ if (p != 0)
+ {
+ if (p->isMany())
+ {
+ DataObjectList& dol = d->getList((Property&)*p);
+ long index;
+ DataObjectImpl* dx = d->findDataObject(prop,&index);
+ if (index >= 0)
+ {
+ if(index < dol.size())
+ {
+ dol.setDataObject((unsigned int)index,value);
+ }
+ else
+ {
+ dol.append(value);
+ }
+ return;
+ }
+ string msg("Set of data object on many valued item");
+ msg += path;
+ SDO_THROW_EXCEPTION("setDataObject", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ else
+ {
+ d->setDataObject((Property&)*p,value);
+ return;
+ }
+ }
+ }
+ }
+
+ string msg("Path not valid:");
+ msg += path;
+ SDO_THROW_EXCEPTION("setDataObject", SDOPathNotFoundException,
+ msg.c_str());
+}
+
+ void DataObjectImpl::validateIndex(unsigned int index)
+ {
+ PropertyList pl = getType().getProperties();
+
+ if (index >= pl.size()) {
+
+ // open type support
+ if (getType().isOpenType())
+ {
+ if (index < openBase + openProperties.size())
+ {
+ return;
+ }
+ }
+
+ string msg("Index of property out of range:");
+ msg += index;
+ SDO_THROW_EXCEPTION("Index Validation", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+ }
+
+ void DataObjectImpl::transferChildren(DataObject* d, DataFactory* f)
+ {
+ bool isData = false;
+ PropertyList pl = d->getInstanceProperties();
+ for (int i=0;i<pl.size();i++)
+ {
+ // even primitives need their DF fixed up
+ if (pl[i].getType().isDataType())
+ {
+ isData = true;
+ }
+
+ if (!d->isSet(pl[i]) || d->isNull(pl[i]))
+ {
+ continue;
+ }
+ if (pl[i].isMany())
+ {
+ DataObjectList& dl = d->getList(pl[i]);
+ for (int j=0;j<dl.size();j++)
+ {
+
+ DataObject* d2 = dl[j];
+ if (d2) {
+ ((DataObjectImpl*)d2)->setDataFactory(f);
+ if (!isData)transferChildren(d2,f);
+ }
+ }
+ }
+ else
+ {
+ DataObject* d3 = d->getDataObject(pl[i]);
+ if (d3)
+ {
+ ((DataObjectImpl*)d3)->setDataFactory(f);
+ if (!isData)transferChildren(d3,f);
+ }
+ }
+ }
+ }
+
+
+
+ void DataObjectImpl::checkFactory(DataObjectPtr dob,
+ unsigned int propertyIndex)
+ {
+
+ DataObjectImpl* d = (DataObjectImpl*)(DataObject*)dob;
+
+ if (d->getDataFactory() == getDataFactory()) return;
+
+ // Temporary alteration to test the feasibility and
+ // problems associated with allowing data object 'migration'
+ // lets move this one and all its children to the factory of the
+ // new parent if the factories are compatible.
+
+ DataFactoryImpl* f = (DataFactoryImpl*)getDataFactory();
+
+ if (d->getContainer() != 0)
+ {
+ string msg("Insertion of object from another factory is only allowed if the parent is null: ");
+ const Type& t = d->getType();
+ msg += t.getURI();
+ msg += "#";
+ msg += t.getName();
+ msg += " into property ";
+ msg += getProperty(propertyIndex).getName();
+ msg += " of ";
+ msg += getType().getURI();
+ msg += "#";
+ msg += getType().getName();
+ SDO_THROW_EXCEPTION("checkFactory", SDOInvalidConversionException,
+ msg.c_str());
+ }
+
+ if (f->isCompatible(d->getDataFactory(),d))
+ {
+ d->setDataFactory(getDataFactory());
+ transferChildren(d,getDataFactory());
+ return;
+ }
+
+
+ // This is the default position....
+
+ string msg("Insertion from incompatible factory ");
+ const Type& t = d->getType();
+ msg += t.getURI();
+ msg += "#";
+ msg += t.getName();
+ msg += " into property ";
+ msg += getProperty(propertyIndex).getName();
+ msg += " of ";
+ msg += getType().getURI();
+ msg += "#";
+ msg += getType().getName();
+ SDO_THROW_EXCEPTION("checkFactory", SDOInvalidConversionException,
+ msg.c_str());
+ }
+
+
+ void DataObjectImpl::checkType( const Property& prop,
+ const Type& objectType)
+ {
+ const Type& propType = prop.getType();
+ if (propType.equals(objectType)) return;
+
+ DataFactory* df = (DataFactory*)factory;
+
+ const TypeImpl* ti = ((DataFactoryImpl*)df)->findTypeImpl
+ (objectType.getURI(),objectType.getName());
+ if (ti != 0)
+ {
+ do
+ {
+ ti = (const TypeImpl*)ti->getBaseType();
+ if (ti == 0) break;
+ if (propType.equals(*ti)) return;
+ } while (ti != 0);
+
+ // allow types of any substitutes
+ const PropertyImpl* pi =
+ getPropertyImpl(getPropertyIndex(prop));
+ if (pi != 0)
+ {
+ unsigned int subcount = pi->getSubstitutionCount();
+ for (int i=0;i<subcount;i++)
+ {
+ const Type* tsub = pi->getSubstitutionType(i);
+ if (tsub != 0 && tsub->equals(objectType)) return;
+ }
+ }
+ }
+
+ // no match..
+ string msg("Insertion of object of incompatible type ");
+ msg += objectType.getURI();
+ msg += "#";
+ msg += objectType.getName();
+ msg += " into property of type ";
+ msg += propType.getURI();
+ msg += "#";
+ msg += propType.getName();
+ SDO_THROW_EXCEPTION("TypeCheck", SDOInvalidConversionException,
+ msg.c_str());
+ }
+
+ void DataObjectImpl::setDataObject(unsigned int propertyIndex, DataObjectPtr value)
+ {
+ setDataObject(getProperty(propertyIndex), value);
+ }
+
+ void DataObjectImpl::setDataObject(const Property& prop, DataObjectPtr value)
+ {
+ unsigned int propertyIndex = getPropertyIndex(prop);
+
+
+ if (value != 0)
+ {
+ checkFactory(value, propertyIndex);
+ checkType(prop,value->getType());
+ }
+
+ validateIndex(propertyIndex);
+
+ if (prop.isReference() && value != 0)
+ {
+ // just need to make sure that the object is already part of our
+ // tree.
+ DataObjectImpl* r1 = this;
+ while (r1->getContainerImpl() != 0)
+ {
+ r1 = r1->getContainerImpl();
+ }
+ DataObjectImpl* r2 = (DataObjectImpl*)(DataObject*)value;
+ while (r2->getContainerImpl() != 0)
+ {
+ r2 = r2->getContainerImpl();
+ }
+ if (r1 != r2)
+ {
+ string msg("Set of a reference to an object outside the graph");
+ SDO_THROW_EXCEPTION("setDataObject", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ }
+
+ if ((prop.isMany()))
+ {
+ string msg("Set operation on a many valued property:");
+ msg += prop.getName();
+ SDO_THROW_EXCEPTION("setDataObject", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+
+ if (value == 0)
+ {
+ PropertyValueMap::iterator j;
+ for (j = PropertyValues.begin(); j != PropertyValues.end(); ++j)
+ {
+ if ((*j).first == propertyIndex) {
+ if (prop.isReference())
+ {
+ ((*j).second)->unsetReference(this, prop);
+ }
+ else
+ {
+ // log both deletion and change - change is not
+ // automatically recorded by deletion.
+ ((*j).second)->logDeletion();
+ }
+ logChange(prop);
+ (*j).second = RefCountingPointer<DataObjectImpl>(0);
+
+ return;
+ }
+ }
+ logChange(prop);
+ PropertyValues.insert(PropertyValues.end(),rdo(propertyIndex,(DataObjectImpl*)0));
+ return;
+ }
+
+ DataObject* dob = value;
+ PropertyValueMap::iterator i;
+ for (i = PropertyValues.begin(); i != PropertyValues.end(); ++i)
+ {
+ if ((*i).first == propertyIndex) {
+
+ if (prop.isReference())
+ {
+ ((*i).second)->unsetReference(this, prop);
+ }
+ else
+ {
+ // log both deletion and change - change is not
+ // automatically recorded by deletion.
+ ((*i).second)->logDeletion();
+ }
+ logChange(prop);
+
+ (*i).second = RefCountingPointer<DataObjectImpl>((DataObjectImpl*)dob);
+
+
+ if (prop.isReference())
+ {
+ ((DataObjectImpl*)dob)->setReference(this, prop);
+ }
+ else
+ {
+ logCreation((*i).second, this, prop);
+ }
+ return;
+ }
+ }
+ if (prop.isReference())
+ {
+ ((DataObjectImpl*)dob)->setReference(this, prop);
+ }
+ else
+ {
+ ((DataObjectImpl*)dob)->setContainer(this);
+ ((DataObjectImpl*)dob)->setApplicableChangeSummary();
+ // log creation before putting into property values.
+ // also log change - not done by logCreation
+ logCreation((DataObjectImpl*)dob, this, prop);
+ }
+
+ logChange(prop);
+
+ PropertyValues.insert(PropertyValues.end(),rdo(propertyIndex,(DataObjectImpl*)dob));
+ return;
+ }
+
+
+ bool DataObjectImpl::isValid(const char* path)
+ {
+ DataObjectImpl* d;
+ char* prop = findPropertyContainer(path,&d);
+ if (d != 0) {
+ if (prop != 0) {
+ const Property& p = d->getProperty(prop);
+ delete prop;
+ return d->isValid(p);
+ }
+ }
+ if (prop != 0)delete prop;
+ string msg("Invalid path:");
+ msg += path;
+ SDO_THROW_EXCEPTION("isSet" ,SDOPathNotFoundException,
+ msg.c_str());
+ }
+
+
+ // Returns whether a property of either this object or an object reachable
+ // from it, as identified by the specified path,
+ // is considered to be set.
+ // @param path the path to a valid Object* and property.
+
+ bool DataObjectImpl::isSet(const char* path)
+ {
+ DataObjectImpl* d;
+ char* prop = findPropertyContainer(path,&d);
+ if (d != 0) {
+ if (prop != 0) {
+ const Property& p = d->getProperty(prop);
+ delete prop;
+ return d->isSet(p);
+ }
+ }
+ if (prop != 0)delete prop;
+ string msg("Invalid path:");
+ msg += path;
+ SDO_THROW_EXCEPTION("isSet" ,SDOPathNotFoundException,
+ msg.c_str());
+ }
+
+ bool DataObjectImpl::isValid(unsigned int propertyIndex)
+ {
+ return isValid(getProperty(propertyIndex));
+ }
+
+ bool DataObjectImpl::isValid(const Property& p)
+ {
+ if (p.isDefaulted()) return true;
+ if (isSet(p))return true;
+ return false;
+ }
+
+ bool DataObjectImpl::isSet(unsigned int propertyIndex)
+ {
+ return isSet(getProperty(propertyIndex), propertyIndex);
+ }
+
+ bool DataObjectImpl::isSet(const Property& property)
+ {
+ return isSet(property, getPropertyIndex(property));
+ }
+
+ bool DataObjectImpl::isSet(const Property& prop, unsigned int propertyIndex)
+ {
+ PropertyValueMap::iterator i;
+ for (i = PropertyValues.begin(); i != PropertyValues.end(); ++i)
+ {
+ if ((*i).first == propertyIndex) {
+ if (prop.isMany())
+ {
+ DataObjectImpl* dol = (*i).second;
+ if (dol != 0 && dol->getList().size() == 0)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ return false;
+ }
+
+
+ // unSets a property of either this Object or an Object reachable from it,
+ // as identified by the specified path.
+ // @param path the path to a valid Object and property.
+ // @see #unSet(Property)
+
+ void DataObjectImpl::unset(const char* path)
+ {
+
+ DataObjectImpl* d;
+ char* prop = findPropertyContainer(path,&d);
+ if (d != 0)
+ {
+ if (prop != 0){
+ const Property& p = d->getProperty(prop);
+ if (p.isMany())
+ {
+ char *c;
+ if ((c = strchr(prop,'[')) != 0)
+ {
+ char *c1 = strchr(c,']');
+ if (c1 != 0)*c1 = 0;
+ unsigned int i = atoi(++c);
+ if (i > 0){
+ i--;
+ DataObjectList& li = d->getList(p);
+ li.remove(i);
+ }
+ delete prop;
+ return;
+ }
+ if ((c = strchr(prop,'.')) != 0)
+ {
+ unsigned int i = atoi(++c);
+ DataObjectList& li = d->getList(p);
+ li.remove(i);
+ delete prop;
+ return;
+ }
+ }
+ delete prop;
+ d->unset(p);
+ return;
+ }
+ }
+ if (prop != 0) delete prop;
+
+ string msg("Invalid path:");
+ msg += path;
+ SDO_THROW_EXCEPTION("unset", SDOPathNotFoundException,
+ msg.c_str());
+ }
+
+ void DataObjectImpl::unset(unsigned int propertyIndex)
+ {
+ unset(getProperty(propertyIndex));
+ }
+
+ void DataObjectImpl::unset(const Property& p)
+ {
+ PropertyValueMap::iterator i;
+ unsigned int index = getPropertyIndex(p);
+
+ if (getType().isSequencedType())
+ {
+ Sequence* sq = getSequence();
+ sq->removeAll(p);
+ }
+
+ for (i = PropertyValues.begin(); i != PropertyValues.end(); ++i)
+ {
+ if ((*i).first == index) {
+ DataObjectImplPtr dol = (*i).second;
+ if (p.getType().isDataType())
+ {
+ dol->clearReferences();
+ logChange(index);
+ if (p.isMany()) {
+ DataObjectList& dl = dol->getList();
+ while (dl.size() > 0)
+ {
+ RefCountingPointer<DataObject> dli = dl.remove(0);
+ }
+ }
+ else
+ {
+ PropertyValues.erase(i);
+ }
+ }
+ else {
+ // if its a reference, we dont want to delete anything
+ if (!p.isReference())
+ {
+ if (dol) {
+ dol->clearReferences();
+ if (p.isMany()) {
+ DataObjectList& dl = dol->getList();
+ while (dl.size() > 0)
+ {
+ if (p.getType().isDataObjectType())
+ {
+ DataObject* dob = dl[0];
+ ((DataObjectImpl*)dob)->logDeletion();
+ }
+ // the remove will record a change
+ // remove will also clear the container.
+ RefCountingPointer<DataObject> dli = dl.remove(0);
+ }
+ }
+ else
+ {
+ PropertyValues.erase(i);
+ dol->logDeletion();
+ logChange(index);
+ }
+ }
+ else
+ {
+ logChange(index);
+ PropertyValues.erase(i);
+ }
+ }
+ else {
+ logChange(index);
+ PropertyValues.erase(i);
+ }
+ }
+ if (getType().isOpenType() && index >= openBase)
+ {
+ if (p.isMany())
+ {
+ PropertyValues.erase(i);
+ }
+ undefineProperty(index);
+ }
+ return;
+ }
+ }
+ return;
+ }
+
+
+
+ // Returns the value of a DataObject property identified by
+ // the specified path.
+ // @param path the path to a valid object and property.
+ // @return the DataObject value of the specified property.
+
+ RefCountingPointer<DataObject> DataObjectImpl::getDataObject(const char* path)
+ {
+ DataObjectImpl* ptr = getDataObjectImpl(path);
+ return RefCountingPointer<DataObject> ((DataObject*)ptr);
+ }
+
+ RefCountingPointer<DataObject> DataObjectImpl::getDataObject(const SDOString& path)
+ {
+ DataObjectImpl* ptr = getDataObjectImpl(path);
+ return RefCountingPointer<DataObject> ((DataObject*)ptr);
+ }
+
+ DataObjectImpl* DataObjectImpl::getDataObjectImpl(const char* path)
+ {
+
+ DataObjectImpl* d = 0;
+ char* prop = findPropertyContainer(path,&d);
+ if (d != 0) {
+ if (prop != 0) {
+ if (strchr(prop,'[') || strchr(prop,'.')) {
+ /* Its a multlvalued property */
+ long l;
+ DataObjectImpl* theob = d->findDataObject(prop,&l);
+ delete prop;
+ if (theob == 0) {
+ string msg("Get DataObject - index out of range:");
+ msg += path;
+ SDO_THROW_EXCEPTION("getDataObject" ,SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+ return theob;
+ }
+ else
+ {
+ if (strlen(prop) == 0)
+ {
+ delete prop;
+ prop = 0;
+ return d;
+ }
+ const Property& p = d->getProperty(prop);
+ delete prop;
+ prop = 0;
+ return d->getDataObjectImpl(p);
+ }
+ }
+ else {
+ return d;
+ }
+ }
+ if (prop != 0)delete prop;
+
+ string msg("Invalid path:");
+ msg += path;
+ SDO_THROW_EXCEPTION("getDataObject" ,SDOPathNotFoundException,
+ msg.c_str());
+ }
+
+ // +++
+
+ DataObjectImpl* DataObjectImpl::getDataObjectImpl(const SDOString& path)
+ {
+
+ DataObjectImpl* d = 0;
+ SDOString prop = findPropertyContainer(path,&d);
+ // char* prop = findPropertyContainer(path,&d);
+ if (d != 0) {
+ if (!prop.empty()) {
+ if (prop.find_first_of("[.") != string::npos) {
+ /* Its a multlvalued property */
+ long l;
+ DataObjectImpl* theob = d->findDataObject(prop,&l);
+ if (theob == 0) {
+ string msg("Get DataObject - index out of range:");
+ msg += path;
+ SDO_THROW_EXCEPTION("getDataObject" ,SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+ return theob;
+ }
+ else
+ {
+ if (prop.length() == 0)
+ {
+ return d;
+ }
+ const Property& p = d->getProperty(prop);
+ return d->getDataObjectImpl(p);
+ }
+ }
+ else {
+ return d;
+ }
+ }
+
+ string msg("Invalid path:");
+ msg += path;
+ SDO_THROW_EXCEPTION("getDataObject" ,SDOPathNotFoundException,
+ msg.c_str());
+ }
+
+ // ---
+
+ RefCountingPointer<DataObject> DataObjectImpl::getDataObject(unsigned int propertyIndex)
+ {
+ if ((getProperty(propertyIndex).isMany()))
+ {
+ string msg("get operation on a many valued property:");
+ msg += getProperty(propertyIndex).getName();
+ SDO_THROW_EXCEPTION("getDataObject", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ DataObjectImpl* ptr = getDataObjectImpl(propertyIndex);;
+ return RefCountingPointer<DataObject>((DataObject*)ptr);
+ }
+
+ DataObjectImpl* DataObjectImpl::getDataObjectImpl(unsigned int propertyIndex)
+ {
+ PropertyValueMap::iterator i;
+ for (i = PropertyValues.begin(); i != PropertyValues.end(); ++i)
+ {
+ if ((*i).first == propertyIndex)
+ {
+ DataObject* dob = (*i).second;
+ if (dob == 0 || ((DataObjectImpl*)dob)->isNull())return 0;
+ return (DataObjectImpl*)dob;
+ }
+ }
+ return 0;
+ }
+
+
+ RefCountingPointer<DataObject> DataObjectImpl::getDataObject(const Property& property)
+ {
+ DataObjectImpl* ptr = getDataObjectImpl(property);
+ return RefCountingPointer<DataObject>((DataObject*)ptr);
+ }
+
+ DataObjectImpl* DataObjectImpl::getDataObjectImpl(const Property& property)
+ {
+ return getDataObjectImpl(getPropertyIndex(property));
+ }
+
+
+
+
+
+ // Returns a new DataObject contained by this Object using the specified property,
+ // which must be a containment property.
+ // The type of the created Object is the declared type of the specified property.
+
+ RefCountingPointer<DataObject> DataObjectImpl::createDataObject(const char* propertyName)
+ {
+ // Throws runtime exception for type or property not found
+
+ const Property& p = getProperty(propertyName);
+ return createDataObject(p);
+ }
+
+ // Returns a new DataObject contained by this Object using the specified property,
+ // which must be a containment property.
+ // The type of the created Object is the declared type of the specified property.
+
+ RefCountingPointer<DataObject> DataObjectImpl::createDataObject(unsigned int propertyIndex)
+ {
+ const Property& p = getProperty(propertyIndex);
+ return createDataObject(p);
+ }
+
+ // Returns a new DataObject contained by this Object using the specified property,
+ // which must be a containment property.
+ // The type of the created Object is the declared type of the specified property.
+
+ RefCountingPointer<DataObject> DataObjectImpl::createDataObject(const Property& property)
+ {
+ const Type& tp = property.getType();
+ return createDataObject(property,tp.getURI(), tp.getName());
+ }
+
+
+ // Returns a new DataObject contained by this Object using the specified property,
+ // which must be a containment property.
+ // The type of the created Object is the declared type of the specified property.
+
+ RefCountingPointer<DataObject> DataObjectImpl::createDataObject(const Property& property, const char* namespaceURI,
+ const char* typeName)
+ {
+ if (!property.isContainment())
+ {
+ string msg("Create data object on non-containment property:");
+ msg += property.getName();
+ SDO_THROW_EXCEPTION("createDataObject", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ DataFactory* df = getDataFactory();
+ if (property.isMany()) {
+ /* add to the list */
+ RefCountingPointer<DataObject> ptr = df->create(namespaceURI, typeName);
+ DataObject* dob = ptr;
+ ((DataObjectImpl*)dob)->setContainer(this);
+ ((DataObjectImpl*)dob)->setApplicableChangeSummary();
+
+ // log creation before adding to list - the change must record the old state
+ // of the list
+ logCreation(((DataObjectImpl*)dob), this, property);
+ //logChange(property);
+
+ DataObjectImpl* theDO = getDataObjectImpl(property);
+ if ( theDO == 0) { /* No value set yet */
+ unsigned int ind = getPropertyIndex(property);
+ RefCountingPointer<DataObject> listptr =
+ df->create(Type::SDOTypeNamespaceURI,"DataObject");
+
+ DataObject* doptr = listptr;
+ PropertyValues.insert(PropertyValues.end(),rdo(ind,(DataObjectImpl*)doptr));
+ ((DataObjectImpl*)doptr)->setContainer(this);
+ ((DataObjectImpl*)doptr)->setApplicableChangeSummary();
+
+ DataObjectListImpl* list = new DataObjectListImpl(df,
+ this, ind, namespaceURI,typeName);
+
+ ((DataObjectImpl*)doptr)->setList(list);
+ // the append will log a change to the property.
+ list->append(ptr);
+
+ // now done by list append
+ //if (getType().isSequencedType())
+ //{
+ // SequenceImpl* sq = getSequenceImpl();
+ // sq->push(property,0);
+ //}
+ }
+ else
+ {
+ DataObjectList& list = theDO->getList();
+ // the append will log a change to the property, and update the
+ // sequence
+ list.append(ptr);
+ //if (getType().isSequencedType())
+ //{
+ // SequenceImpl* sq = getSequenceImpl();
+ // sq->push(property,list.size()-1);
+ //}
+
+ }
+ return ptr;
+
+ }
+ else {
+ unset(property);
+ DataObjectImpl* ditem =
+ new DataObjectImpl(df, df->getType(namespaceURI, typeName));
+ ditem->setContainer(this);
+ ditem->setApplicableChangeSummary();
+
+ // log both creation and change - creations no longer log
+ // changes automatically.
+
+ logCreation(ditem, this, property);
+ logChange(property);
+
+ PropertyValues.insert(PropertyValues.end(),
+ rdo(getPropertyIndex(property),ditem));
+ if (getType().isSequencedType())
+ {
+ SequenceImpl* sq = getSequenceImpl();
+ sq->push(property,0);
+ }
+ return RefCountingPointer<DataObject>((DataObject*)ditem);
+ }
+ return 0;
+ }
+
+ void DataObjectImpl::setList( DataObjectList* theList)
+ {
+ listValue = (DataObjectListImpl*)theList;
+ }
+
+
+ bool DataObjectImpl::remove(DataObjectImpl* indol)
+ {
+ PropertyValueMap::iterator i;
+ for (i = PropertyValues.begin(); i != PropertyValues.end(); ++i)
+ {
+ const Property& prop = getProperty((*i).first);
+ if (prop.isMany())
+ {
+ DataObjectList& dol = ((*i).second)->getList();
+ for (int j=0;j< dol.size(); j++)
+ {
+ if (dol[j] == indol)
+ {
+ indol->logDeletion();
+ logChange(prop);
+ indol->setContainer(0);
+ dol.remove(j);
+ return true;
+ }
+ }
+ }
+ DataObjectImpl* tmp = (*i).second;
+ if (tmp == indol) {
+ indol->logDeletion();
+ logChange(prop);
+ indol->setContainer(0);
+ PropertyValues.erase(i);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ // remove this Object from its container and dont unSet all its properties.
+
+ void DataObjectImpl::detach()
+ {
+ // remove this data object from its tree
+ clearReferences();
+ if (container == 0) return;
+ container->remove(this);
+ return ;
+ }
+
+ void DataObjectImpl::clear()
+ {
+ // clear this objects state
+ PropertyValueMap::iterator i = PropertyValues.begin();
+
+ while (i != PropertyValues.end())
+ {
+ unset((*i).first);
+ i = PropertyValues.begin();
+ }
+ return ;
+ }
+
+ // Returns the containing Object
+ // of 0 if there is no container.
+
+ RefCountingPointer<DataObject> DataObjectImpl::getContainer()
+ {
+ DataObject* dob = (DataObject*)container;
+ return RefCountingPointer<DataObject> (dob);
+ }
+
+ DataObjectImpl* DataObjectImpl::getContainerImpl()
+ {
+ return container;
+ }
+
+ void DataObjectImpl::setContainer(DataObjectImpl* d)
+ {
+ container = d;
+ }
+
+ const Property* DataObjectImpl::findInProperties(DataObject* ob)
+ {
+ PropertyValueMap::iterator i;
+ for (i = PropertyValues.begin() ;i != PropertyValues.end() ; ++i)
+ {
+ if (getProperty((*i).first).isReference()) continue;
+ if (getProperty((*i).first).isMany())
+ {
+ DataObjectList& dl = ((*i).second)->getList();
+ for (int j = 0 ; j < dl.size(); j++)
+ {
+ if (dl[j] == ob)
+ {
+ return &(getProperty((*i).first));
+ }
+ }
+ }
+ else
+ {
+ if ((*i).second == ob)
+ {
+ return &(getProperty((*i).first));
+ }
+ }
+ }
+ return 0; // this can happen if the object has been detached
+
+ //string msg("Object cannot find its containing property");
+ //SDO_THROW_EXCEPTION("FindInProperties" ,SDOPropertyNotFoundException,
+ // msg.c_str());
+ }
+
+ // Return the Property of the data Object containing this data Object
+ // or 0 if there is no container.
+
+ const Property& DataObjectImpl::getContainmentProperty()
+ {
+ if (container != 0) {
+ const Property* p = container->findInProperties(this);
+ if (p != 0)return *p;
+ }
+ SDO_THROW_EXCEPTION("getContainmentProperty" ,SDOPropertyNotFoundException,
+ "Object cannot find its containment property");
+ }
+
+
+ // Returns the data Object's type.
+ // The type defines the properties available for reflective access.
+
+ const Type& DataObjectImpl::getType()
+ {
+ return (const Type&)(*ObjectType);
+ }
+
+ const Type::Types DataObjectImpl::getTypeEnum()
+ {
+ return ObjectType->getTypeEnum();
+ }
+
+ const TypeImpl& DataObjectImpl::getTypeImpl()
+ {
+ return (const TypeImpl&)*ObjectType;
+ }
+
+
+ // open type support
+
+ const Property& DataObjectImpl::getProperty(const char* prop)
+ {
+ PropertyImpl* pi = getPropertyImpl(prop);
+ if (pi == 0)
+ {
+ string msg("Cannot find property:");
+ msg += prop;
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,
+ msg.c_str());
+
+ }
+ return (Property&)*pi;
+ }
+ const Property& DataObjectImpl::getProperty(const SDOString& prop)
+ {
+ PropertyImpl* pi = getPropertyImpl(prop);
+ if (pi == 0)
+ {
+ string msg("Cannot find property:");
+ msg += prop;
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,
+ msg.c_str());
+
+ }
+ return (Property&)*pi;
+ }
+
+ PropertyImpl* DataObjectImpl::getPropertyImpl(const char* prop)
+ {
+ PropertyImpl* pi = getTypeImpl().getPropertyImpl(prop);
+ if (pi != 0) return pi;
+
+ if (getType().isOpenType())
+ {
+ std::list<PropertyImpl>::iterator j;
+ for (j=openProperties.begin();
+ j != openProperties.end(); ++j)
+ {
+ if (!strcmp((*j).getName(), prop))
+ {
+ return (PropertyImpl*)&(*j);
+ }
+ }
+ }
+ return 0;
+ }
+ PropertyImpl* DataObjectImpl::getPropertyImpl(const SDOString& prop)
+ {
+ PropertyImpl* pi = getTypeImpl().getPropertyImpl(prop);
+ if (pi != 0) return pi;
+
+ if (getType().isOpenType())
+ {
+ std::list<PropertyImpl>::iterator j;
+ for (j=openProperties.begin();
+ j != openProperties.end(); ++j)
+ {
+ if (!strcmp((*j).getName(), prop.c_str()))
+ {
+ return (PropertyImpl*)&(*j);
+ }
+ }
+ }
+ return 0;
+ }
+
+ DataFactory* DataObjectImpl::getDataFactory()
+ {
+ return factory;
+ }
+
+ void DataObjectImpl::setDataFactory(DataFactory* df)
+ {
+ ObjectType = (TypeImpl*)&(df->getType(ObjectType->getURI(),
+ ObjectType->getName()));
+ factory = df;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // These finally are the setters/getters for primitives given
+ // that the data object is a primitive type.
+ ///////////////////////////////////////////////////////////////////////////
+
+
+ bool DataObjectImpl::getBoolean()
+ {
+ return getTypeImpl().convertToBoolean(value, valuelength);
+ }
+
+
+ char DataObjectImpl::getByte()
+ {
+ return getTypeImpl().convertToByte(value,valuelength);
+
+ }
+
+
+ wchar_t DataObjectImpl::getCharacter()
+ {
+ return getTypeImpl().convertToCharacter(value,valuelength);
+
+ }
+
+ long DataObjectImpl::getInteger()
+ {
+ return getTypeImpl().convertToInteger(value,valuelength);
+
+ }
+
+
+ long double DataObjectImpl::getDouble()
+ {
+ return getTypeImpl().convertToDouble(value,valuelength);
+ }
+
+
+ float DataObjectImpl::getFloat()
+ {
+ return getTypeImpl().convertToFloat(value,valuelength);
+
+ }
+
+
+
+ int64_t DataObjectImpl::getLong()
+ {
+ return getTypeImpl().convertToLong(value,valuelength);
+
+ }
+
+
+ short DataObjectImpl::getShort()
+ {
+ return getTypeImpl().convertToShort(value,valuelength);
+
+ }
+
+ unsigned int DataObjectImpl::getString( wchar_t* outptr, unsigned int max)
+ {
+ if (outptr == 0 || max == 0) return valuelength;
+ return getTypeImpl().convertToString(value, outptr, valuelength, max);
+
+ }
+ unsigned int DataObjectImpl::getBytes( char* outptr, unsigned int max)
+ {
+ if (outptr == 0 || max == 0) return valuelength;
+ return getTypeImpl().convertToBytes(value, outptr, valuelength, max);
+
+ }
+
+ const char* DataObjectImpl::getCString()
+ {
+ return getTypeImpl().convertToCString(value, &asStringBuffer, valuelength);
+
+ }
+
+ const SDODate DataObjectImpl::getDate()
+ {
+ return getTypeImpl().convertToDate(value, valuelength); /* time_t == long*/
+
+ }
+
+ DataObjectImpl* DataObjectImpl::getDataObject()
+ {
+ return (DataObjectImpl*)getTypeImpl().convertToDataObject(value, valuelength);
+
+ }
+
+
+ void DataObjectImpl::setBoolean(bool invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+ }
+
+
+ void DataObjectImpl::setByte(char invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+
+ }
+
+
+ void DataObjectImpl::setCharacter(wchar_t invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+ }
+
+ void DataObjectImpl::setString(const wchar_t* invalue, unsigned int len)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue, len);
+ return;
+ }
+
+ void DataObjectImpl::setBytes(const char* invalue, unsigned int len)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue, len);
+ return;
+ }
+
+ void DataObjectImpl::setInteger(long invalue)
+ {
+#if __WORDSIZE ==64
+ valuelength = getTypeImpl().convert(&value,(int64_t)invalue);
+#else
+ valuelength = getTypeImpl().convert(&value,invalue);
+#endif
+ return;
+ }
+
+
+ void DataObjectImpl::setDouble(long double invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+ }
+
+ void DataObjectImpl::setFloat(float invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+
+ }
+
+
+ void DataObjectImpl::setLong(int64_t invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+ }
+
+
+ void DataObjectImpl::setShort(short invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+
+ }
+
+ void DataObjectImpl::setCString(const char* invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+ }
+
+ void DataObjectImpl::setDate(const SDODate invalue)
+ {
+ valuelength = getTypeImpl().convertDate(&value,invalue); /* time_t == long*/
+ return;
+ }
+
+ void DataObjectImpl::setDataObject(DataObject* invalue)
+ {
+ valuelength = getTypeImpl().convert(&value,invalue);
+ return;
+ }
+
+ void DataObjectImpl::setNull()
+ {
+ isnull = true;
+ }
+
+ bool DataObjectImpl::isNull()
+ {
+ return isnull;
+ }
+
+ void DataObjectImpl::unsetNull()
+ {
+ isnull = false;
+ }
+
+
+ DataObjectImpl::DataObjectImpl(const TypeImpl& t)
+ {
+ ObjectType = (TypeImpl*)&t;
+ container = 0;
+ value = 0; /* Will be initialized when used */
+ valuelength = 0;
+ asStringBuffer = 0;
+// asXPathBuffer = 0;
+ isnull = false;
+
+ // open type support
+ openBase = t.getPropertiesSize() ;
+
+ userdata = (void*)0xFFFFFFFF;
+
+ if (t.isChangeSummaryType())
+ {
+ changesummaryobject = 0;
+ localCS = new ChangeSummaryImpl();
+ }
+ else
+ {
+ changesummaryobject = 0;
+ localCS = 0;
+ }
+
+ if (getType().isSequencedType()) sequence = new SequenceImpl(this);
+ else sequence = 0;
+ }
+
+
+
+ DataObjectImpl::DataObjectImpl(DataFactory* df, const Type& t) : ObjectType((TypeImpl*)&t),
+ factory(df)
+ {
+ container = 0;
+ value = 0;
+ valuelength = 0;
+ asStringBuffer = 0;
+// asXPathBuffer = 0;
+ isnull = false;
+
+ // open type support
+ openBase = ObjectType->getPropertiesSize() ;
+
+ userdata = (void*)0xFFFFFFFF;
+
+ if (ObjectType->isChangeSummaryType())
+ {
+ changesummaryobject = 0;
+ localCS = new ChangeSummaryImpl();
+ }
+ else
+ {
+ changesummaryobject = 0;
+ localCS = 0;
+ }
+
+ if (getType().isSequencedType())
+ {
+ sequence = new SequenceImpl(this);
+ }
+ else
+ {
+ sequence = 0;
+ }
+ }
+
+ void DataObjectImpl::deleteValue()
+ {
+ switch (getTypeEnum())
+ {
+ case Type::BooleanType:
+ case Type::ByteType:
+ case Type::CharacterType:
+ case Type::IntegerType:
+ case Type::DateType:
+ case Type::DoubleType:
+ case Type::FloatType:
+ case Type::LongType:
+ case Type::ShortType:
+ case Type::BytesType:
+ delete (char*)value;
+ return;
+
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ delete (wchar_t*)value;
+ return;
+
+ case Type::DataObjectType:
+ return;
+
+ default:
+ return;
+ }
+ }
+
+ DataObjectImpl::~DataObjectImpl()
+ {
+ // We do not want to log changes to our own deletion
+ // if this DO owns the ChangeSummary. Do not delete
+ // it here as contained DOs still have a reference to it.
+
+ if (getTypeImpl().isChangeSummaryType())
+ {
+ ChangeSummaryPtr c = getChangeSummary();
+ if (c) {
+ if (c->isLogging())
+ {
+ c->endLogging();
+ }
+ }
+ }
+
+
+ clearReferences();
+ PropertyValueMap::iterator i = PropertyValues.begin();
+ while (i != PropertyValues.end())
+ {
+ unset((*i).first);
+ if (i == PropertyValues.begin())
+ {
+ // unset has not removed the item from the list - do it
+ // here instead
+ PropertyValues.erase(i);
+ }
+ i = PropertyValues.begin();
+ }
+
+ // Theory: A DO cant get here if its still attached to anything,
+ //so we dont need to detach....
+ //detach();
+
+
+ if (asStringBuffer != 0) delete asStringBuffer;
+// if (asXPathBuffer != 0) delete asXPathBuffer;
+
+ if (value != 0)
+ {
+ if (getType().isDataType())deleteValue();
+ }
+
+
+
+ if (getType().isSequencedType())
+ {
+ if (sequence != 0) delete sequence;
+ }
+
+
+ if (getTypeImpl().isChangeSummaryType() )
+ {
+ if (getChangeSummary() != 0)
+ {
+ delete localCS;
+ localCS = 0;
+ }
+ }
+ }
+
+ void DataObjectImpl::setApplicableChangeSummary()
+ {
+ changesummaryobject = 0;
+ if (getType().isChangeSummaryType())
+ {
+ changesummaryobject = 0;
+ return;
+ }
+ else {
+ DataObjectImpl* dob = getContainerImpl();
+ while (dob != 0) {
+ if (dob->getType().isChangeSummaryType())
+ {
+ changesummaryobject = dob;
+ return;
+ }
+ dob = dob->getContainerImpl();
+ }
+ }
+
+ }
+
+ void DataObjectImpl::logCreation(DataObjectImpl* dol, DataObjectImpl* cont,
+ const Property& theprop)
+ {
+ if (getChangeSummaryImpl() != 0 && getChangeSummaryImpl()->isLogging())
+ {
+ getChangeSummaryImpl()->logCreation(dol,cont,theprop);
+ }
+ }
+
+ void DataObjectImpl::logDeletion()
+ {
+ // Only log if ChangeSummary is inherited from container
+
+ if (getChangeSummaryImpl() != 0 && getChangeSummaryImpl()->isLogging() && !getType().isChangeSummaryType())
+ {
+ DataObjectImpl* cont = getContainerImpl();
+ if (cont != 0) // log if there is a container. If there is not, then
+ // this can only be the object with the CS, so logging
+ // would not make sense.
+ {
+ const Property* p = cont->findInProperties(this);
+ if ( p != 0) // if the object is not in the properties, then its been
+ // detached, and has already been logged as deleted
+ {
+ getChangeSummaryImpl()->logDeletion(this,cont,*p,
+ objectToXPath(), true);
+ }
+ }
+ }
+ }
+
+ void DataObjectImpl::logChange(const Property& prop)
+ {
+ if (getChangeSummaryImpl() != 0 && getChangeSummaryImpl()->isLogging())
+ {
+ getChangeSummaryImpl()->logChange(this,prop);
+ }
+ }
+
+ void DataObjectImpl::logChange(unsigned int propIndex)
+ {
+ if (getChangeSummaryImpl() != 0 && getChangeSummaryImpl()->isLogging())
+ {
+ getChangeSummaryImpl()->logChange(this,getProperty(propIndex));
+ }
+ }
+ // reference support
+
+ void DataObjectImpl::setReference(DataObject* dol, const Property& prop)
+ {
+ LOGINFO_1(INFO,"ChangeSummary:Setting a reference to %s",prop.getName());
+
+ refs.push_back(new Reference(dol,prop));
+ }
+ void DataObjectImpl::unsetReference(DataObject* dol, const Property& prop)
+ {
+ LOGINFO_1(INFO,"ChangeSummary:Unsetting a reference to %s",prop.getName());
+
+ for (int i=0;i< refs.size();i++)
+ {
+ if (refs[i]->getDataObject() == dol)
+ {
+ if (!strcmp(refs[i]->getProperty().getName(),
+ prop.getName()))
+ {
+ delete refs[i];
+ refs.erase(refs.begin() + i);
+ }
+ }
+ }
+ }
+
+
+ void DataObjectImpl::clearReferences()
+ {
+ for (int i=0;i<refs.size();i++)
+ {
+ // Note - no loop as the referer must be of type reference
+ refs[i]->getDataObject()->unset(refs[i]->getProperty());
+ delete refs[i];
+ }
+ refs.clear();
+ }
+
+ const char* DataObjectImpl::objectToXPath()
+ {
+ asXPathBuffer = "";
+
+ DataObjectImpl* dob = getContainerImpl();
+ DataObject*thisob = this;
+ while (dob != 0){
+ const Property& p = thisob->getContainmentProperty();
+ if (asXPathBuffer != "")
+ {
+ asXPathBuffer = "/" + asXPathBuffer;
+ }
+
+ if (p.isMany()) {
+ DataObjectList& dol = dob->getList(p);
+ for (int i=0;i<dol.size();i++)
+ {
+ if (dol[i] == thisob)
+ {
+ char index[64];
+ sprintf(index,"%d",i);
+ asXPathBuffer = index + asXPathBuffer;
+ asXPathBuffer = "." + asXPathBuffer;
+ break;
+ }
+ }
+ }
+ asXPathBuffer = p.getName() + asXPathBuffer;
+
+ thisob = dob;
+ dob = dob->getContainerImpl();
+ }
+
+ asXPathBuffer = "#/" + asXPathBuffer;
+
+ return asXPathBuffer.c_str();
+/*
+ char* temp1;
+ char* temp2;
+
+ if (asXPathBuffer == 0)
+ {
+ asXPathBuffer = new char[2];
+ sprintf(asXPathBuffer,"#");
+ }
+
+ DataObjectImpl* dob = getContainerImpl();
+ DataObject*thisob = this;
+ while (dob != 0){
+ const Property& p = thisob->getContainmentProperty();
+ const char* name = p.getName();
+ temp1 = new char[strlen(name) + 34];
+ temp1[0] = 0;
+
+
+ if (p.isMany()) {
+ DataObjectList& dol = dob->getList(p);
+ for (int i=0;i<dol.size();i++)
+ {
+ if (dol[i] == thisob)
+ {
+ sprintf(temp1,"#/%s.%d",name,i);
+ break;
+ }
+ }
+ }
+ else {
+ sprintf(temp1,"#/%s",name);
+ }
+ if (asXPathBuffer != 0) {
+ temp2 = new char[strlen(asXPathBuffer) + strlen(temp1) + 1];
+ sprintf(temp2,"%s%s", temp1, asXPathBuffer+1 );
+ delete asXPathBuffer;
+ }
+ else {
+ temp2 = new char[strlen(temp1) + 1];
+ sprintf(temp2,"%s", temp1);
+ }
+ delete temp1;
+ asXPathBuffer = temp2;
+ thisob = dob;
+ dob = dob->getContainerImpl();
+ }
+ return asXPathBuffer; */
+ }
+
+ // user data support...
+ void* DataObjectImpl::getUserData(const char* path)
+ {
+ DataObjectImpl *d;
+ void* v = 0;
+ char *spath = 0;
+ char* prop = 0;
+ try {
+ spath = DataObjectImpl::stripPath(path);
+ prop = findPropertyContainer(spath,&d);
+ if (spath)
+ {
+ delete spath;
+ spath = 0;
+ }
+ if (d != 0)
+ {
+ if (prop != 0)
+ {
+ const Property& p = d->getProperty(prop);
+ if (p.getType().isDataType()) return 0;
+ if (p.isMany())
+ {
+ DataObjectImpl* d2 = d->getDataObjectImpl(prop);
+ if (d2) v = d2->getUserData();
+ delete prop;
+ prop = 0;
+ return v;
+ }
+ v = d->getUserData(p);
+ delete prop;
+ prop = 0;
+ return v;
+ }
+ return d->getUserData();
+ }
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (prop) delete prop;
+ if (spath) delete spath;
+ return 0;
+ }
+
+ }
+
+ void* DataObjectImpl::getUserData(unsigned int propertyIndex)
+ {
+ if ((getProperty(propertyIndex).isMany()))
+ {
+ return 0;
+ }
+ if ((getProperty(propertyIndex).getType().isDataType()))
+ {
+ return 0;
+ }
+ DataObjectImpl* ptr = getDataObjectImpl(propertyIndex);
+ if (ptr) return ptr->getUserData();
+ return 0;
+ }
+
+ void* DataObjectImpl::getUserData(const Property& property)
+ {
+ if (property.isMany())
+ {
+ return 0;
+ }
+ if (property.getType().isDataType())
+ {
+ return 0;
+ }
+ DataObjectImpl* ptr = getDataObjectImpl(property);
+ if (ptr) return ptr->getUserData();
+ return 0;
+ }
+
+ void* DataObjectImpl::getUserData()
+ {
+ return userdata;
+ }
+
+ void DataObjectImpl::setUserData(const char* path, void* value)
+ {
+ char *spath = 0;
+ char* prop = 0;
+ DataObjectImpl *d;
+ try {
+ spath = DataObjectImpl::stripPath(path);
+ prop = findPropertyContainer(spath,&d);
+ if (spath)
+ {
+ delete spath;
+ spath = 0;
+ }
+ if (d != 0)
+ {
+ if (prop != 0)
+ {
+ const Property& p = d->getProperty(prop);
+ if (p.getType().isDataType()) return;
+ if (p.isMany())
+ {
+ DataObjectImpl* d2 = d->getDataObjectImpl(prop);
+ if (d2) d2->setUserData(value);
+ delete prop;
+ prop = 0;
+ return;
+ }
+ d->setUserData(p,value);
+ delete prop;
+ prop = 0;
+ return;
+ }
+ d->setUserData(value);
+ return;
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ if (prop) delete prop;
+ if (spath) delete spath;
+ return;
+ }
+
+ }
+
+ void DataObjectImpl::setUserData(unsigned int propertyIndex, void* value)
+ {
+ if ((getProperty(propertyIndex).isMany()))
+ {
+ return;
+ }
+ if ((getProperty(propertyIndex).getType().isDataType()))
+ {
+ return;
+ }
+ DataObjectImpl* ptr = getDataObjectImpl(propertyIndex);
+ if (ptr) ptr->setUserData(value);
+ return;
+ }
+
+ void DataObjectImpl::setUserData(const Property& property, void* value)
+ {
+ if (property.isMany())
+ {
+ return;
+ }
+ if (property.getType().isDataType())
+ {
+ return;
+ }
+ DataObjectImpl* ptr = getDataObjectImpl(property);
+ if (ptr) ptr->setUserData(value);
+ return;
+ }
+
+ void DataObjectImpl::setUserData(void* value)
+ {
+ userdata = value;
+ }
+
+};
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.h
new file mode 100644
index 0000000000..b3a0d7dd13
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectImpl.h
@@ -0,0 +1,683 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/03/07 11:05:20 $ */
+
+#ifndef _DATAOBJECTIMPL_H_
+#define _DATAOBJECTIMPL_H_
+#include "commonj/sdo/DataObject.h"
+
+#include "commonj/sdo/disable_warn.h"
+
+#include <ctime>
+#include <list>
+#include <map>
+
+#include <string>
+
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/TypeImpl.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/SequenceImpl.h"
+#include "commonj/sdo/DataObjectListImpl.h"
+#include "commonj/sdo/PropertyList.h"
+
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/ChangeSummaryImpl.h"
+#include "commonj/sdo/SDODate.h"
+
+namespace commonj{
+namespace sdo{
+
+class DataGraph;
+class DataObjectImpl;
+class DataObjectListImpl;
+class DataFactory;
+
+
+#define DataObjectImplPtr RefCountingPointer<DataObjectImpl>
+#define ChangeSummaryImplPtr RefCountingPointer<ChangeSummaryImpl>
+
+/**
+ * rdo is an internal class holding a property value in a data object.
+ */
+
+class rdo {
+public:
+ unsigned int first;
+ DataObjectImplPtr second;
+ rdo(unsigned int infirst, DataObjectImpl* insecond);
+ rdo();
+ rdo (const rdo& inrdo);
+ virtual ~rdo();
+};
+
+typedef std::list< rdo > PropertyValueMap;
+
+
+ /**
+ * DataObjectImpl implements the abstract class DataObject.
+ *
+ * A data object is a representation of some structured data.
+ * it is the fundamental component in the SDO (Service Data Objects) package.
+ * Data objects support reflection, path-based accesss, convenience creation
+ * and deletion methods,and the ability to be part of a data graph.
+ * Each data object holds its data as a series of properties.
+ * Properties can be accessed by name, property index, or using the property
+ * meta object itself.
+ * A data object can also contain references to other data objects, through
+ * reference-type properties.
+ * A data object has a series of convenience accessors for its properties.
+ * These methods either use a path (String), a property index,
+ * or the property's meta object itself, to identify the property.
+ * Some examples of the path-based accessors are as follows:
+ * DataObjectPtr company = ...;
+ * company->getString("name");
+ * company->setString("name", "acme");
+ * company->getString("department.0/name")
+ * .n indexes from 0.
+ * company->getString("department[1]/name") [] indexes from 1.
+ * company->getDataObject("department[number=123]") returns the department where number=123
+ * company->getDataObject("..") returns the containing data object
+ * company->getDataObject("/") returns the root containing data object
+ * There are specific accessors for the primitive types and commonly used
+ * data types like String.
+ */
+
+class DataObjectImpl : public DataObject
+{
+ public:
+
+ DataObjectImpl();
+ DataObjectImpl(const TypeImpl& t);
+ DataObjectImpl(DataFactory* dataFactory, const Type& t);
+
+ // This one only needs the values, and the type/prop info. The rest
+ // is not copied and would be unsafe to do so. This is used to
+ // store the cloned info in a change summary.
+
+ DataObjectImpl(DataObjectImplPtr indo);
+
+ virtual ~DataObjectImpl();
+
+ /////////////////////////////////////////////////////////////////////////
+ // Introspection
+ /////////////////////////////////////////////////////////////////////////
+
+
+ void handlePropertyNotSet(const char* name);
+
+ /** getPropertyIndex gets the unique index of a property
+ *
+ * A property of a data object has a unique index associated with it.
+ * This method gets a property index for this object from the property,
+ * or throw SDOPropertyNotFoundException if the property is not part
+ * of this data object.
+ */
+
+ virtual unsigned int getPropertyIndex(const Property& p);
+
+ /**
+ * These are just like getType().getProperty(), but may return
+ * values other than the property list for open types.
+ */
+
+ virtual const Property& getProperty(unsigned int index);
+
+ virtual const Property& getProperty(const char* prop);
+ virtual const Property& getProperty(const SDOString& prop);
+
+ virtual PropertyImpl* getPropertyImpl(const char* prop);
+ virtual PropertyImpl* getPropertyImpl(const SDOString& prop);
+
+ virtual PropertyImpl* getPropertyImpl(unsigned int index);
+
+ /** getInstanceProperties gets the props of the current object.
+ *
+ * Returns a read-only List of the Properties currently used in this DataObject.
+ * This list will contain all of the properties in getType().getProperties()
+ * and any properties where isSet(property) is true.
+ * For example, properties resulting from the use of
+ * open or mixed XML content are present if allowed by the Type.
+ * The list does not contain duplicates.
+ * The order of the properties in the list begins with getType().getProperties()
+ * and the order of the remaining properties is determined by the implementation.
+ * The same list will be returned unless the DataObject is updated so that
+ * the contents of the list change
+ * Returns the list of Properties currently used in this DataObject.
+ */
+
+ virtual PropertyList getInstanceProperties();
+
+ /** getContainer get the containing object
+ *
+ * Returns the containing data object
+ * or 0 if there is no container.
+ */
+
+ virtual DataObjectPtr getContainer();
+
+ /** getContainmentProperty returns the property containing this object
+ *
+ * Return the Property of the data object containing this data object
+ * or throw an SDOPropertyNotFoundException if there is no container.
+ */
+
+ virtual const Property& getContainmentProperty();
+
+ /** getType returns the data object's type.
+ *
+ * getType returns the data object's type.
+ * The type defines the properties available for reflective access.
+ */
+
+ virtual const Type& getType();
+
+ virtual const Type::Types getTypeEnum();
+
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // get/set
+ ///////////////////////////////////////////////////////////////////////////
+
+
+ /** getDataObject returns a data object by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual DataObjectPtr getDataObject(const SDOString& path);
+ virtual DataObjectPtr getDataObject(const char* path);
+ virtual DataObjectPtr getDataObject(unsigned int propertyIndex);
+ virtual DataObjectPtr getDataObject(const Property& property);
+
+ /** setDataObject sets a value by path, index or property
+ *
+ * Sets a property of either this object or an object reachable from it,
+ * as identified by the specified path,
+ * to the specified value.
+ */
+
+ virtual void setDataObject(const char* path, DataObjectPtr value);
+ virtual void setDataObject(const SDOString& path, DataObjectPtr value);
+ virtual void setDataObject(unsigned int propertyIndex, DataObjectPtr value);
+ virtual void setDataObject(const Property& property, DataObjectPtr value);
+
+ /** getBoolean returns a boolean by path, index or property
+ *
+ * Returns the value of a property of either this object or an object
+ * reachable from it, as identified by the specified path.
+ */
+
+ virtual bool getBoolean(const char* path);
+ virtual bool getBoolean(const SDOString& path);
+ virtual bool getBoolean(unsigned int propindex);
+ virtual bool getBoolean(const Property& p);
+
+ virtual void setBoolean(const char* path, bool b);
+ virtual void setBoolean(unsigned int propindex, bool b);
+ virtual void setBoolean(const Property& p, bool b);
+
+ virtual char getByte(const char* path);
+ virtual char getByte(unsigned int propindex);
+ virtual char getByte(const Property& p);
+
+ virtual void setByte(const char* path, char c);
+ virtual void setByte(unsigned int propindex, char c);
+ virtual void setByte(const Property& p, char c);
+
+ virtual wchar_t getCharacter(const char* path);
+ virtual wchar_t getCharacter(unsigned int propindex);
+ virtual wchar_t getCharacter(const Property& p);
+
+ virtual void setCharacter(const char* path, wchar_t c);
+ virtual void setCharacter(unsigned int propindex, wchar_t c);
+ virtual void setCharacter(const Property& p, wchar_t c);
+
+ virtual unsigned int getLength(const char* path) ;
+ virtual unsigned int getLength(unsigned int propindex) ;
+ virtual unsigned int getLength(const Property& p) ;
+ virtual unsigned int getLength() ;
+
+ virtual unsigned int getBytes(const char* path, char* buf, unsigned int max) ;
+ virtual unsigned int getBytes(unsigned int propindex, char* buf, unsigned int max) ;
+ virtual unsigned int getBytes(const Property& p, char* buf, unsigned int max) ;
+
+ virtual void setBytes(const char* path, const char* c, unsigned int len) ;
+ virtual void setBytes(unsigned int propindex, const char* c,unsigned int len) ;
+ virtual void setBytes(const Property& p, const char* c,unsigned int len) ;
+
+ virtual unsigned int getString(const char* path, wchar_t* buf, unsigned int max) ;
+ virtual unsigned int getString(unsigned int propindex,wchar_t* buf, unsigned int max) ;
+ virtual unsigned int getString(const Property& p,wchar_t* buf, unsigned int max) ;
+
+ virtual void setString(const char* path, const wchar_t* c,unsigned int len) ;
+ virtual void setString(unsigned int propindex, const wchar_t* c,unsigned int len) ;
+ virtual void setString(const Property& p, const wchar_t* c,unsigned int len) ;
+
+ virtual const SDODate getDate(const char* path);
+ virtual const SDODate getDate(unsigned int propindex);
+ virtual const SDODate getDate(const Property& p);
+
+ virtual void setDate(const char* path, const SDODate d);
+ virtual void setDate(unsigned int propindex, const SDODate d);
+ virtual void setDate(const Property& p, const SDODate d);
+
+ virtual long double getDouble(const char* path);
+ virtual long double getDouble(unsigned int propindex);
+ virtual long double getDouble(const Property& p);
+
+ virtual void setDouble(const char* path, long double d);
+ virtual void setDouble(unsigned int propindex, long double d);
+ virtual void setDouble(const Property& p, long double d);
+
+ virtual float getFloat(const char* path);
+ virtual float getFloat(unsigned int propindex);
+ virtual float getFloat(const Property& p);
+
+ virtual void setFloat(const char* path, float f);
+ virtual void setFloat(unsigned int propindex, float f);
+ virtual void setFloat(const Property& p, float f);
+
+ virtual long getInteger(const char* path);
+ virtual long getInteger(unsigned int propindex);
+ virtual long getInteger(const Property& p);
+
+ virtual void setInteger(const char* path, long i);
+ virtual void setInteger(unsigned int propindex, long i);
+ virtual void setInteger(const Property& p, long i);
+
+ virtual /*long long*/ int64_t getLong(const char* path);
+ virtual /*long long*/ int64_t getLong(unsigned int propindex);
+ virtual /*long long*/ int64_t getLong(const Property& p);
+
+ virtual void setLong(const char* path, /*long long*/ int64_t l);
+ virtual void setLong(unsigned int propindex, /*long long*/ int64_t l);
+ virtual void setLong(const Property& p, /*long long*/ int64_t l);
+
+ virtual short getShort(const char* path);
+ virtual short getShort(unsigned int propindex);
+ virtual short getShort(const Property& p);
+
+ virtual void setShort(const char* path, short s);
+ virtual void setShort(unsigned int propindex, short s);
+ virtual void setShort(const Property& p, short s);
+
+ virtual const char* getCString(const char* path);
+ virtual const char* getCString(unsigned int propertyIndex);
+ virtual const char* getCString(const Property& prop);
+
+ virtual void setCString(const char* path, const char* value);
+ virtual void setCString(unsigned int propertyIndex, const char* value);
+ virtual void setCString (const Property& prop, const char* value);
+
+ /** setNull sets a data object value to null.
+ *
+ * A DataObjectType or DataType value may be set or unset. If it is set, then
+ * it may have a value, or it may be set to null. A distinction is drawn between
+ * being unset, having the default value, being set and being null.
+ * When the value of an integer (for example) is returned as zero, it could have
+ * been set to zero, or it could be null. Use isNull() to verify.
+ */
+
+ virtual void setNull(const char* path);
+ virtual void setNull(unsigned int propertyIndex);
+ virtual void setNull(const Property& prop);
+
+ virtual bool isNull(const char* path);
+ virtual bool isNull(unsigned int propertyIndex);
+ virtual bool isNull(const Property& prop);
+
+ virtual bool isSet(const char* path);
+ virtual bool isSet(unsigned int propertyIndex);
+ virtual bool isSet(const Property& property);
+
+ virtual bool isValid(const char* path);
+ virtual bool isValid(unsigned int propertyIndex);
+ virtual bool isValid(const Property& property);
+
+ virtual void unset(const char* path);
+ virtual void unset(unsigned int propertyIndex);
+ virtual void unset(const Property& property);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Sequences
+ ///////////////////////////////////////////////////////////////////////////
+
+ /** getSequence returns the sequence for a data object
+ *
+ * Returns the value of a Sequence property identified by
+ * the specified path. See Sequence.
+ */
+
+ virtual SequenceImpl* getSequenceImpl();
+ virtual SequencePtr getSequence();
+ virtual SequencePtr getSequence(const char* path);
+ virtual SequencePtr getSequence(unsigned int propertyIndex);
+ virtual SequencePtr getSequence(const Property& property);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Creation of dataobjects
+ ///////////////////////////////////////////////////////////////////////////
+
+ /** createDataObject creates a data object value
+ *
+ * Returns a new data object contained by this object using the
+ * specified property,which must be a containment property.
+ * The type of the created object is the declared type
+ * of the specified property.
+ * If the property is many valued, this method adds an element to the
+ * list, otherwise it sets the value, removing any old value.
+ */
+
+ virtual DataObjectPtr createDataObject(const char* propertyName);
+ virtual DataObjectPtr createDataObject(unsigned int propertyIndex);
+ virtual DataObjectPtr createDataObject(const Property& property);
+
+
+ /**
+ * See if the property currently exists
+ */
+
+ virtual bool hasProperty(const char* name);
+ virtual bool hasProperty(const SDOString& name);
+
+
+ virtual void detach();
+
+ virtual void clear();
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Lists
+ ///////////////////////////////////////////////////////////////////////////
+
+ /** getList gets the value of a many-valued property
+ *
+ * Many valued properties are returned as lists of DataObjects.
+ * These lists may contain primitives or data objects, but they behave
+ * like data objects.
+ * Getting a many valued integer consists of getting the list, then
+ * using the DataObjectList API to getInteger() for each list element.
+ */
+
+ virtual DataObjectList& getList(const char* path);
+ virtual DataObjectList& getList(unsigned int propIndex);
+ virtual DataObjectList& getList(const Property& p);
+ virtual DataObjectList& getList();
+ virtual DataObjectListImpl* getListImpl();
+
+ void setList( DataObjectList* theList);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Change Summary
+ ///////////////////////////////////////////////////////////////////////////
+
+ /** getChangeSummary get the applicable change summary
+ *
+ * This method gets the applicable change summary for a data object.
+ * The summary is not necessarily attached to the data object, it may be
+ * the summary for a parent data object. No object with a summary attached
+ * may be a child of another object with a summary attached.
+ * See the ChangeSummary API for details of using the change sumamry.
+ */
+
+ virtual SDO_API ChangeSummaryPtr getChangeSummary(const char* path);
+ virtual SDO_API ChangeSummaryPtr getChangeSummary(unsigned int propIndex);
+ virtual SDO_API ChangeSummaryPtr getChangeSummary(const Property& prop);
+ virtual SDO_API ChangeSummaryPtr getChangeSummary();
+
+
+ virtual bool getBoolean();
+ virtual void setBoolean(bool b);
+ virtual char getByte();
+ virtual void setByte(char c);
+ virtual wchar_t getCharacter();
+ virtual void setCharacter(wchar_t c);
+ virtual unsigned int getString(wchar_t* buf, unsigned int max);
+ virtual unsigned int getBytes(char* buf, unsigned int max);
+ virtual void setString(const wchar_t* buf, unsigned int len);
+ virtual void setBytes(const char* c, unsigned int len);
+ virtual short getShort();
+ virtual void setShort(short s);
+ virtual long getInteger();
+ virtual void setInteger(long s);
+ virtual /* long long*/ int64_t getLong();
+ virtual void setLong(/* long long */ int64_t i);
+ virtual float getFloat();
+ virtual void setFloat(float b);
+ virtual long double getDouble();
+ virtual void setDouble(long double d);
+ virtual const SDODate getDate();
+ virtual void setDate(const SDODate d);
+ virtual const char* getCString();
+ virtual void setCString(const char* s);
+ virtual DataObjectImpl* getDataObject();
+ virtual void setDataObject(DataObject* d);
+
+ // null support
+ virtual bool isNull();
+ virtual void setNull();
+ virtual void unsetNull();
+
+ // change logging is used by the dataobjectlistimpl
+ virtual void logChange(const Property& prop);
+ virtual void logChange(unsigned int propIndex);
+ virtual void logDeletion();
+ virtual void logCreation(DataObjectImpl* dol,
+ DataObjectImpl* cont, const Property& prop);
+
+ // reference support
+ virtual void setReference(DataObject* dob, const Property& prop);
+ virtual void unsetReference(DataObject* dob, const Property& prop);
+ virtual void clearReferences();
+
+ // user data support
+ virtual void setUserData(const char* path,void* value);
+ virtual void setUserData(unsigned int propertyIndex, void* value);
+ virtual void setUserData(const Property& property, void* value);
+ virtual void setUserData(void* value);
+ virtual void* getUserData(const char* path);
+ virtual void* getUserData(unsigned int propertyIndex);
+ virtual void* getUserData(const Property& property);
+ virtual void* getUserData();
+
+ virtual void setContainer(DataObjectImpl* d);
+ DataObjectImpl* getContainerImpl();
+
+ // builds a temporary XPath for this object.
+ const char* objectToXPath();
+
+ // The data factory can be used to create new data objects within
+ // the Type system of this data object
+ //
+
+ SDO_API DataFactory* getDataFactory();
+
+
+ // cache a copy of the change summary in this data object, if there
+ // is one in the tree.
+
+ virtual void setApplicableChangeSummary();
+
+
+ // open type support
+ virtual void setInstancePropertyType(unsigned int index,
+ const Type* t);
+
+ /**
+ * defineProperty is used by open type support.
+ * This method and its siblings define a new property on an
+ * open type when a setting is requested.
+ */
+
+ virtual const PropertyImpl* defineProperty(const char* propname,
+ const Type& t);
+ virtual const PropertyImpl* defineProperty(const SDOString& propname,
+ const Type& t);
+
+ virtual const PropertyImpl* defineBoolean(const char* propname);
+ virtual const PropertyImpl* defineByte(const char* propname);
+ virtual const PropertyImpl* defineCharacter(const char* propname);
+ virtual const PropertyImpl* defineString(const char* propname);
+ virtual const PropertyImpl* defineBytes(const char* propname);
+ virtual const PropertyImpl* defineShort(const char* propname);
+ virtual const PropertyImpl* defineInteger(const char* propname);
+ virtual const PropertyImpl* defineLong(const char* propname);
+ virtual const PropertyImpl* defineFloat(const char* propname);
+ virtual const PropertyImpl* defineDouble(const char* propname);
+ virtual const PropertyImpl* defineDate(const char* propname);
+ virtual const PropertyImpl* defineCString(const char* propname);
+ virtual const PropertyImpl* defineDataObject(const char* propname,
+ const Type&t );
+ virtual const PropertyImpl* defineDataObject(const SDOString& propname,
+ const Type&t );
+ virtual const PropertyImpl* defineDataObject(const char* propname,
+ const char* typeURI, const char* typeName );
+ virtual const PropertyImpl* defineList(const char* propname);
+ virtual void undefineProperty(unsigned int index);
+ virtual const TypeImpl& getTypeImpl();
+ virtual void transferChildren(DataObject* d, DataFactory* f);
+ virtual void setDataFactory(DataFactory *df);
+
+private:
+
+ virtual void validateIndex(unsigned int index);
+ virtual void checkFactory(DataObjectPtr dob, unsigned int propertyIndex);
+ virtual void checkType( const Property& prop,
+ const Type& objectType);
+
+ virtual bool remove(DataObjectImpl* indol);
+ virtual bool isSet(const Property& prop, unsigned int propertyIndex);
+
+
+ virtual DataObjectImpl* getDataObjectImpl(const SDOString& path);
+ virtual DataObjectImpl* getDataObjectImpl(const char* path);
+ virtual DataObjectImpl* getDataObjectImpl(unsigned int propertyIndex);
+ virtual DataObjectImpl* getDataObjectImpl(const Property& property);
+
+ virtual DataObjectPtr
+ createDataObject(const Property& property,
+ const char* namespaceURI,
+ const char* typeName);
+
+ DataObjectImpl* findDataObject(char* token, long* index);
+ DataObjectImpl* findDataObject(const SDOString& token, long* index);
+ const Property* findInProperties(DataObject* ob);
+ char* findPropertyContainer(const char* path, DataObjectImpl** din);
+ SDOString findPropertyContainer(const SDOString& path, DataObjectImpl** din);
+ char* stripPath(const char* path);
+ void stripPath(const SDOString& path, SDOString& result);
+
+
+ // Does not keep a reference counted pointer to the container.
+ DataObjectImpl* container;
+
+ // remove the value from the data object.
+ void deleteValue();
+
+
+ PropertyValueMap PropertyValues;
+
+ TypeImpl* ObjectType;
+
+ DataObjectListImpl* listValue;
+
+ // Holds the value , reallocated as necessary for strings
+ void* value;
+
+ // In the case of a bytes/string - this holds the length;
+ unsigned int valuelength;
+
+ // holds the value as a string - if requested.
+ char* asStringBuffer;
+
+ // holds the Xpath to this object if requested.
+ std::string asXPathBuffer;
+
+ // The data object holds a counted reference to the data factory.
+ DataFactoryPtr factory;
+
+
+ // Support for open types
+ int openBase;
+ std::list<PropertyImpl> openProperties;
+
+ static const char* emptyString;
+ static const char* templateString;
+
+ // Data may be set to null in any data object
+ bool isnull;
+
+ // user supplied 32 bit value.
+ void* userdata;
+
+ //
+ // The sequence, if this is a sequenced type - not
+ // reference counted by the data object
+ //
+ SequenceImpl* sequence;
+
+ //
+ // The change summary if this is a summarised type
+ // not reference counted by the data object - only by
+ // clients
+ //
+
+ ChangeSummaryImpl* getChangeSummaryImpl();
+ ChangeSummaryImpl* getSummary();
+ ChangeSummaryImpl* localCS;
+ DataObjectImpl* changesummaryobject;
+
+
+ // reference type support
+
+ class Reference
+ {
+ public:
+ DataObject* getDataObject()
+ {
+ return referer;
+ }
+ const Property& getProperty()
+ {
+ return refprop;
+ }
+ Reference(DataObject* d, const Property& p) : refprop(p), referer(d)
+ {
+ }
+ private:
+ DataObject* referer;
+ const Property& refprop;
+ };
+
+ typedef std::vector<Reference*> REFERENCE_LIST;
+
+ REFERENCE_LIST refs;
+
+
+
+};
+};
+};
+
+#endif //_DATAOBJECTIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.cpp
new file mode 100644
index 0000000000..67f54949c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.cpp
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/DataObjectInstance.h"
+using commonj::sdo::CopyHelper;
+
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+ // ============
+ // Constructors
+ // ============
+ DataObjectInstance::DataObjectInstance()
+ {
+ }
+
+ DataObjectInstance::DataObjectInstance(const DataObjectPtr& theDO)
+ {
+ dataObject = CopyHelper::copy(theDO);
+ }
+
+ // ==========
+ // Destructor
+ // ==========
+ DataObjectInstance::~DataObjectInstance()
+ {
+ }
+
+ // ===================================
+ // Copy constructor: deep copy the DO
+ // ===================================
+ DataObjectInstance::DataObjectInstance(const DataObjectInstance& doi)
+ {
+ dataObject = CopyHelper::copy(doi.dataObject);
+ }
+
+ // =============================
+ // operator= : deep copy the DO
+ // =============================
+ DataObjectInstance& DataObjectInstance::operator=(const DataObjectInstance& doi)
+ {
+ if (this != &doi)
+ {
+ dataObject = CopyHelper::copy(doi.dataObject);
+ }
+ return *this;
+ }
+
+ } // End namespace sca
+} // End namespace osoa
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.h
new file mode 100644
index 0000000000..766392fbaa
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectInstance.h
@@ -0,0 +1,62 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef commonj_sdo_DataObjectInstance_h
+#define commonj_sdo_DataObjectInstance_h
+
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/SDO.h"
+using commonj::sdo::DataObjectPtr;
+using commonj::sdo::DataObject;
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+/**
+ * DataObjectInstance is a class which allows DataObjects to be considered
+ * as instances rather than data object pointers.
+ */
+ class DataObjectInstance
+ {
+
+ public:
+ SDO_API DataObjectInstance();
+ SDO_API virtual ~DataObjectInstance();
+
+ SDO_API DataObjectInstance(const DataObjectPtr& theDO);
+ SDO_API DataObjectInstance(const DataObjectInstance&);
+
+ SDO_API DataObjectInstance& operator=(const DataObjectInstance&);
+ SDO_API bool operator!() {return (!dataObject);}
+ SDO_API operator bool() {return !!dataObject;}
+
+ SDO_API DataObject* operator->() {return dataObject;}
+
+ SDO_API DataObjectPtr getDataObject() {return dataObject;}
+ SDO_API operator DataObjectPtr() {return dataObject;}
+ private:
+ DataObjectPtr dataObject;
+ };
+ } // End namespace sdo
+} // End namespace commonj
+
+#endif // commonj_sdo_DataObjectInstance_h
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.cpp
new file mode 100644
index 0000000000..7202833360
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.cpp
@@ -0,0 +1,41 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/DataObjectList.h"
+
+namespace commonj{
+namespace sdo {
+
+/**
+ *
+ * List for retrieving many valued property values.
+ *
+ * DataObjectList provides an API for getting and setting values in
+ * many valued properties. The list deals with both DataType and
+ * DataObjectType properties.
+ */
+
+DataObjectList::~DataObjectList()
+{
+
+}
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.h
new file mode 100644
index 0000000000..04ad42b3c0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectList.h
@@ -0,0 +1,194 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/06 12:58:18 $ */
+
+#ifndef _DATAOBJECTLIST_H_
+#define _DATAOBJECTLIST_H_
+
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/SDODate.h"
+#include <wchar.h>
+
+
+namespace commonj{
+namespace sdo{
+
+/**
+ *
+ * List for retrieving many valued property values, DataType or DataObjectType.
+ *
+ * DataObjectList provides an API for getting and setting values in
+ * many valued properties. The list deals with both DataType and
+ * DataObjectType properties.
+ */
+
+class DataObjectList
+{
+public:
+ virtual ~DataObjectList();
+
+ /** [] is a index operator, and returns a dataobject.
+ *
+ * The index operator returns a data object, even if the
+ * list is of a DataType. The data object can yield its true value using
+ * getInteger() etc. Alternatively, list elements can be accessed
+ * with their correct type using the list getInteger(index) api.
+ */
+
+ virtual SDO_API DataObjectPtr operator[] (int pos) = 0;
+ virtual SDO_API const DataObjectPtr operator[] (int pos) const = 0;
+
+ /** size returns the number of elements.
+ *
+ * The size method returns the number of elements in the list
+ */
+
+ virtual SDO_API int size () const = 0;
+
+ /** getBoolean returns a boolean at an index
+ *
+ * Each of the DataTypes has a corresponding getter and setter
+ * overload. getBoolean returns a bool, getByte returns a char
+ * etc
+ */
+
+ virtual SDO_API bool getBoolean(unsigned int index) const = 0;
+ virtual SDO_API char getByte(unsigned int index) const = 0;
+ virtual SDO_API wchar_t getCharacter(unsigned int index) const = 0;
+ virtual SDO_API unsigned int getString(unsigned int index, wchar_t* value,
+ unsigned int max) const = 0;
+ virtual SDO_API unsigned int getBytes(unsigned int index, char* value,
+ unsigned int max) const = 0;
+ virtual SDO_API short getShort(unsigned int index) const = 0;
+ virtual SDO_API long getInteger(unsigned int index) const = 0;
+ virtual SDO_API int64_t getLong(unsigned int index) const = 0;
+ virtual SDO_API float getFloat(unsigned int index) const = 0;
+ virtual SDO_API long double getDouble(unsigned int index) const = 0;
+ virtual SDO_API const SDODate getDate(unsigned int index) const = 0;
+ virtual SDO_API const char* getCString(unsigned int index) const = 0;
+ virtual SDO_API DataObjectPtr getDataObject(unsigned int index) const = 0;
+
+ virtual SDO_API void setBoolean(unsigned int index, bool d) = 0;
+ virtual SDO_API void setByte(unsigned int index, char d) = 0;
+ virtual SDO_API void setCharacter(unsigned int index, wchar_t d) = 0;
+ virtual SDO_API void setString(unsigned int index, const wchar_t* d, unsigned int len) = 0;
+ virtual SDO_API void setBytes(unsigned int index, const char* d, unsigned int len) = 0;
+ virtual SDO_API void setShort(unsigned int index, short d) = 0;
+ virtual SDO_API void setInteger(unsigned int index, long d) = 0;
+ virtual SDO_API void setLong(unsigned int index, int64_t d) = 0;
+ virtual SDO_API void setFloat(unsigned int index, float d) = 0;
+ virtual SDO_API void setDouble(unsigned int index, long double d) = 0;
+ virtual SDO_API void setDate(unsigned int index, const SDODate d) = 0;
+ virtual SDO_API void setCString(unsigned int index, char* d) = 0;
+ virtual SDO_API void setDataObject(unsigned int index, DataObjectPtr dob) = 0;
+
+ /** getLength returns the length of a string element
+ *
+ * getLength behaves like DataObject::getlength. It returns the length
+ * of a bytes or string buffer such that space can be allocated for the
+ * values from getBytes() and getString()
+ */
+
+ virtual SDO_API unsigned int getLength(unsigned int index) const = 0;
+
+ /** insert and append put items into the list
+ *
+ * insert and append have overrides for each of the DataTypes, and
+ * for DataObject. Insert inserts before the element number given. If the insertion
+ * point is off the end of the list, then an append is performed.
+ * Append puts the element on the end of the list.
+ */
+
+
+ virtual SDO_API void insert (unsigned int index, DataObjectPtr d) = 0;
+ virtual SDO_API void append (DataObjectPtr d) = 0;
+
+ virtual SDO_API void insert (unsigned int index, bool d) = 0;
+ virtual SDO_API void append (bool d) = 0;
+
+ virtual SDO_API void insert (unsigned int index, char d) = 0;
+ virtual SDO_API void append (char d) = 0;
+
+ virtual SDO_API void insert (unsigned int index, wchar_t d) = 0;
+ virtual SDO_API void append (wchar_t d) = 0;
+
+ virtual SDO_API void insert (unsigned int index, const wchar_t* d, unsigned int len) = 0;
+ virtual SDO_API void append (const wchar_t* d, unsigned int len) = 0;
+
+ virtual SDO_API void insert (unsigned int index, const char* d, unsigned int len) = 0;
+ virtual SDO_API void append (const char* d, unsigned int len) = 0;
+
+ virtual SDO_API void insert (unsigned int index, const char* d) = 0;
+ virtual SDO_API void append (const char* d) = 0;
+
+ virtual SDO_API void insert (unsigned int index, short d) = 0;
+ virtual SDO_API void append (short d) = 0;
+
+ virtual SDO_API void insert (unsigned int index, const SDODate d) = 0;
+ virtual SDO_API void append (const SDODate d) = 0;
+
+#if __WORDSIZE !=64
+ virtual SDO_API void insert (unsigned int index, long d) = 0;
+ virtual SDO_API void append (long d) = 0;
+#endif
+
+ virtual SDO_API void insert (unsigned int index, int64_t d) = 0;
+ virtual SDO_API void append (int64_t d) = 0;
+
+ virtual SDO_API void insert (unsigned int index, float d) = 0;
+ virtual SDO_API void append (float d) = 0;
+
+
+ virtual SDO_API void insert (unsigned int index, long double d) = 0;
+ virtual SDO_API void append (long double d) = 0;
+
+ /** remove removes an element from the list.
+ *
+ * Remove removes the element from the list, and passes out a
+ * DataObjectPtr to the old value. This can be attached to the list
+ * somewhere else, or discarded.
+ */
+
+ virtual SDO_API DataObjectPtr remove (unsigned int index) = 0;
+
+ /* getType returns type
+ *
+ * Returns the type.
+ * May throw SDOTYpeNotFoundException for unset open types
+ */
+
+
+ virtual SDO_API const Type& getType() = 0;
+
+ /* getTypeEnum returns an enumerator for the type
+ *
+ * Returns an enumerator for the type for easy switching on basic types.
+ * The enumerator is part of the Type class
+ * May throw SDOTypeNotFoundException for open types
+ */
+
+ virtual SDO_API const Type::Types getTypeEnum() = 0;
+
+};
+};
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.cpp
new file mode 100644
index 0000000000..25ef2a266b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.cpp
@@ -0,0 +1,1102 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/07 13:35:33 $ */
+
+#include "commonj/sdo/DataObjectListImpl.h"
+
+
+#include <iostream>
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/Logger.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/DataObjectImpl.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+
+#include <stdio.h>
+
+namespace commonj{
+namespace sdo {
+
+/**
+ * DataObjectListImpl implements DataObjectList.
+ * List for retrieving many valued property values.
+ *
+ * DataObjectList provides an API for getting and setting values in
+ * many valued properties. The list deals with both DataType and
+ * DataObjectType properties.
+ */
+DataObjectListImpl::DataObjectListImpl(DATAOBJECT_VECTOR p) : plist (p)
+{
+ theFactory = 0;
+ container = 0;
+ pindex = 0;
+ isReference = false;
+}
+
+DataObjectListImpl::DataObjectListImpl(const DataObjectListImpl &pin)
+{
+ plist = std::vector<RefCountingPointer<DataObjectImpl> >(pin.getVec());
+ theFactory = pin.theFactory;
+ container = pin.container;
+ pindex = pin.pindex;
+ typeUnset = pin.typeUnset;
+ isReference = pin.isReference;
+ if (pin.typeURI != 0) {
+ typeURI = new char[strlen(pin.typeURI) +1];
+ strcpy(typeURI, pin.typeURI);
+ }
+ if (pin.typeName != 0) {
+ typeName = new char[strlen(pin.typeName) +1];
+ strcpy(typeName, pin.typeName);
+ }
+}
+
+DataObjectListImpl::DataObjectListImpl()
+{
+ theFactory = 0;
+ typeURI = 0;
+ typeName = 0;
+ theFactory = 0;
+ container = 0;
+ pindex = 0;
+ typeUnset = false;
+ isReference = false;
+}
+
+DataObjectListImpl::DataObjectListImpl(DataFactory* df,
+ DataObjectImpl* cont,
+ unsigned int inpindex,
+ const char* intypeURI,
+ const char* intypeName)
+{
+ container = cont;
+ pindex = inpindex;
+ theFactory = df;
+
+
+ isReference = false;
+ if (container->getProperty(pindex).isReference())
+ {
+ isReference = true;
+ }
+ typeUnset = false;
+
+ if (container->getType().isOpenType())
+ {
+ if (!strcmp(intypeURI,Type::SDOTypeNamespaceURI.c_str()) &&
+ !strcmp(intypeName,"OpenDataObject"))
+ {
+ typeUnset = true;
+ }
+ }
+
+
+ if (intypeURI != 0) {
+ typeURI = new char[strlen(intypeURI) +1];
+ strcpy(typeURI, intypeURI);
+ }
+ else {
+ typeURI = 0;
+ }
+ if (intypeName != 0) {
+ typeName = new char[strlen(intypeName) +1];
+ strcpy(typeName, intypeName);
+ }
+ else {
+ typeName = 0;
+ theFactory = 0;
+ }
+}
+
+DataObjectListImpl::~DataObjectListImpl()
+{
+ if (typeURI != 0) {
+ delete typeURI;
+ typeURI = 0;
+ }
+ if (typeName != 0) {
+ delete typeName;
+ typeName = 0;
+ }
+}
+
+RefCountingPointer<DataObject> DataObjectListImpl::operator[] (int pos)
+{
+ validateIndex(pos);
+ return plist[pos];
+}
+
+const RefCountingPointer<DataObject> DataObjectListImpl::operator[] (int pos) const
+{
+ validateIndex(pos);
+ RefCountingPointer<DataObjectImpl> d = plist[pos];
+ DataObjectImpl* dob = d;
+ return RefCountingPointer<DataObject>((DataObject*)dob);
+}
+
+
+int DataObjectListImpl::size () const
+{
+ return plist.size();
+}
+
+DATAOBJECT_VECTOR DataObjectListImpl::getVec() const
+{
+ return plist;
+}
+
+
+
+const Type& DataObjectListImpl::getType()
+{
+ if (typeUnset)
+ {
+ std::string msg("The list property is open, and the type of the contents has not bee determined yet.");
+ SDO_THROW_EXCEPTION("Get Type", SDOTypeNotFoundException,
+ msg.c_str());
+ }
+ return theFactory->getType(typeURI, typeName);
+}
+
+
+const Type::Types DataObjectListImpl::getTypeEnum()
+{
+ if (typeUnset)
+ {
+ return Type::OpenDataObjectType;
+
+ }
+ return theFactory->getType(typeURI, typeName).getTypeEnum();
+}
+
+
+void DataObjectListImpl::insert (unsigned int index, DataObjectPtr d)
+{
+ if (typeUnset)setType(d->getType().getURI(),d->getType().getName());
+
+ checkFactory(d);
+
+ checkType(theFactory->getType(typeURI,typeName),
+ d->getType());
+
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ for (int i=0;i < plist.size(); i++)
+ {
+ if (plist[i] == d)
+ {
+ std::string msg("Insertion of object which already exists in the list:");
+ msg += typeURI;
+ msg += " ";
+ msg += typeName;
+ SDO_THROW_EXCEPTION("List insert", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ }
+ if (strcmp(typeURI,d->getType().getURI())
+ ||
+ strcmp(typeName,d->getType().getName()))
+ {
+ std::string msg("Insertion of object of the wrong type to a list:");
+ msg += typeURI;
+ msg += " ";
+ msg += typeName;
+ msg += " not compatible with ";
+ msg += d->getType().getURI();
+ msg += " ";
+ msg += d->getType().getName();
+ SDO_THROW_EXCEPTION("List append", SDOInvalidConversionException,
+ msg.c_str());
+ }
+
+ DataObject* dob = d; // unwrap the data object ready for a downcasting hack.
+ DataObjectImpl* con = ((DataObjectImpl*)dob)->getContainerImpl();
+ if (!isReference)
+ {
+ if (con != 0)
+ {
+ if (con != container)
+ {
+ /* this data object is already contained somewhere else */
+ std::string msg("Insertion of object to list, object is already contained:");
+ msg += d->getType().getURI();
+ msg += " ";
+ msg += d->getType().getName();
+ SDO_THROW_EXCEPTION("List append", SDOInvalidConversionException,
+ msg.c_str());
+ }
+ }
+ else
+ {
+ ((DataObjectImpl*)dob)->setContainer(container);
+ ((DataObjectImpl*)dob)->setApplicableChangeSummary();
+ ((DataObjectImpl*)dob)->logCreation((DataObjectImpl*)dob,
+ (DataObjectImpl*)container,
+ container->getProperty(pindex));
+ }
+ }
+
+ plist.insert(plist.begin()+index, RefCountingPointer<DataObjectImpl>((DataObjectImpl*)dob));
+
+ if (container != 0)
+ {
+ if (container->getType().isSequencedType())
+ {
+ SequenceImpl* sq = container->getSequenceImpl();
+ if (sq)sq->push(container->getProperty(pindex),index);
+ }
+ }
+
+}
+
+
+
+ void DataObjectListImpl::checkFactory(DataObjectPtr dob)
+ {
+
+ DataObjectImpl* d = (DataObjectImpl*)(DataObject*)dob;
+
+ if (d->getDataFactory() == theFactory) return;
+
+ // temporary experiment with allowing data objects
+ // to move from factory to factory if the type is
+ // nominally present, and the type systems match
+
+ DataFactoryImpl* f = (DataFactoryImpl*)theFactory;
+
+
+ if (d->getContainer() != 0)
+ {
+ std::string msg("Insertion of object into list from another factory is only allowed if the parent is null: ");
+
+ const Type& t = d->getType();
+ msg += t.getURI();
+ msg += "#";
+ msg += t.getName();
+ msg += " into property ";
+ msg += container->getProperty(pindex).getName();
+ msg += " of type ";
+ msg += typeURI;
+ msg += "#";
+ msg += typeName;
+ SDO_THROW_EXCEPTION("checkFactory", SDOInvalidConversionException,
+ msg.c_str());
+ }
+
+ if (f->isCompatible(d->getDataFactory(),d))
+ {
+ d->setDataFactory(theFactory);
+ // we will also need to transfer any children - assuming they
+ // are ok in the new factory!!
+ d->transferChildren(d,theFactory);
+ return;
+ }
+
+ std::string msg("Insertion into list from incompatible factory:");
+
+ const Type& t = d->getType();
+ msg += t.getURI();
+ msg += "#";
+ msg += t.getName();
+ msg += " into property ";
+ msg += container->getProperty(pindex).getName();
+ msg += " of type ";
+ msg += typeURI;
+ msg += "#";
+ msg += typeName;
+ SDO_THROW_EXCEPTION("checkFactory", SDOInvalidConversionException,
+ msg.c_str());
+
+ }
+
+
+void DataObjectListImpl::checkType(const Type& listType, const Type& objectType)
+ {
+ if (listType.equals(objectType)) return;
+
+ const TypeImpl* ti = ((DataFactoryImpl*)theFactory)->findTypeImpl
+ (objectType.getURI(),objectType.getName());
+ if (ti != 0)
+ {
+ do
+ {
+ ti = (const TypeImpl*)ti->getBaseType();
+ if (ti == 0) break;
+ if (listType.equals(*ti)) return;
+ } while (ti != 0);
+
+ // allow types of any substitutes
+ if (container != 0)
+ {
+ PropertyImpl* pi =
+ container->getPropertyImpl(pindex);
+ if (pi != 0)
+ {
+ unsigned int subcount = pi->getSubstitutionCount();
+ for (int i=0;i<subcount;i++)
+ {
+ const Type* tsub = pi->getSubstitutionType(i);
+ if (tsub != 0 && tsub->equals(objectType)) return;
+ }
+ }
+ }
+ }
+
+ // no match..
+ std::string msg("Insertion of object of incompatible type ");
+ msg += objectType.getURI();
+ msg += "#";
+ msg += objectType.getName();
+ msg += " into list of type ";
+ msg += listType.getURI();
+ msg += "#";
+ msg += listType.getName();
+ SDO_THROW_EXCEPTION("TypeCheck", SDOInvalidConversionException,
+ msg.c_str());
+ }
+
+//TODO Modify parameters to SDOString
+void DataObjectListImpl::setType(const char* uri, const char* name)
+{
+ // need to check for an opentype list which has not been set up yet
+ if (name == 0) return;
+
+ const TypeImpl* t = ((DataFactoryImpl*)theFactory)->findTypeImpl(uri,name);
+ if (t == 0) return; // cannot set to a type which is not avilable
+
+ // need to modify the instance property of the container
+ container->setInstancePropertyType(pindex,t);
+
+ delete typeName;
+ typeName = new char[strlen(name)+1];
+ strcpy(typeName, name);
+ delete typeURI;
+ if (uri == 0)
+ {
+ typeURI = new char[1];
+ typeURI[0] = 0;
+ }
+ else
+ {
+ typeURI = new char[strlen(uri)+1];
+ strcpy(typeURI, uri);
+ }
+ typeUnset = false;
+}
+
+void DataObjectListImpl::setType(const SDOString& uri, const SDOString& name)
+{
+ // need to check for an opentype list which has not been set up yet
+ // if (name == 0) return;
+
+ const TypeImpl* t = ((DataFactoryImpl*)theFactory)->findTypeImpl(uri.c_str(), name.c_str());
+ if (t == 0) return; // cannot set to a type which is not avilable
+
+ // need to modify the instance property of the container
+ container->setInstancePropertyType(pindex,t);
+
+ delete typeName;
+ typeName = new char[name.length() + 1];
+ strcpy(typeName, name.c_str());
+
+ delete typeURI;
+ typeURI = new char[uri.length() + 1];
+ strcpy(typeURI, uri.c_str());
+
+ typeUnset = false;
+}
+
+void DataObjectListImpl::append (DataObjectPtr d)
+{
+
+ if (typeUnset)setType(d->getType().getURI(),d->getType().getName());
+
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+
+ for (int i=0;i < plist.size(); i++)
+ {
+ if (plist[i] == d)
+ {
+ std::string msg("Append of object which already exists in the list:");
+ msg += typeURI;
+ msg += " ";
+ msg += typeName;
+ SDO_THROW_EXCEPTION("List append", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ }
+
+ checkFactory(d);
+
+ checkType(theFactory->getType(typeURI,typeName),
+ d->getType());
+
+ DataObject* dob = d; // unwrap the data object ready for a downcasting hack.
+ DataObjectImpl* con = ((DataObjectImpl*)dob)->getContainerImpl();
+
+ if (!isReference)
+ {
+ if (con != 0)
+ {
+ if (con != container)
+ {
+ /* this data object is already contained somewhere else */
+ std::string msg("Append of object to list, object is already contained:");
+ msg += d->getType().getURI();
+ msg += " ";
+ msg += d->getType().getName();
+ SDO_THROW_EXCEPTION("List append", SDOInvalidConversionException,
+ msg.c_str());
+ }
+ }
+ else
+ {
+ ((DataObjectImpl*)dob)->setContainer(container);
+ ((DataObjectImpl*)dob)->setApplicableChangeSummary();
+ if (!container->getProperty(pindex).getType().isDataType())
+ {
+ ((DataObjectImpl*)dob)->logCreation((DataObjectImpl*)dob,
+ container,container->getProperty(pindex));
+ }
+
+ }
+ }
+ plist.insert(plist.end(),RefCountingPointer<DataObjectImpl>((DataObjectImpl*)dob));
+
+ if (container != 0) {
+ if (container->getType().isSequencedType())
+ {
+ SequenceImpl* sq = container->getSequenceImpl();
+ if (sq)sq->push(container->getProperty(pindex),plist.size()-1);
+ }
+ }
+}
+
+void DataObjectListImpl::insert (unsigned int index, bool d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, BooleanLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setBoolean(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (bool d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, BooleanLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setBoolean(d);
+ append( dol);
+}
+
+void DataObjectListImpl::insert (unsigned int index, char d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, ByteLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setByte(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (char d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, ByteLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setByte(d);
+ append( dol);
+}
+
+void DataObjectListImpl::insert (unsigned int index, wchar_t d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, CharacterLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setCharacter(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (wchar_t d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, CharacterLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setCharacter(d);
+ append( dol);
+}
+
+void DataObjectListImpl::insert (unsigned int index, const wchar_t* d, unsigned int length)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, StringLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setString(d, length);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (const wchar_t* d, unsigned int length)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, StringLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setString(d, length);
+ append( dol);
+}
+void DataObjectListImpl::insert (unsigned int index, const char* d, unsigned int length)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, BytesLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setBytes(d, length);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (const char* d, unsigned int length)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, BytesLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setBytes(d, length);
+ append( dol);
+}
+void DataObjectListImpl::insert (unsigned int index, const char* d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, BytesLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setCString(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (const char* d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, BytesLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setCString(d);
+ append( dol);
+}
+
+void DataObjectListImpl::insert (unsigned int index, short d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, ShortLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setShort(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (short d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, ShortLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setShort(d);
+ append( dol);
+}
+
+
+#if __WORDSIZE !=64
+void DataObjectListImpl::insert (unsigned int index, long d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, IntegerLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setInteger(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (long d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, IntegerLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setInteger(d);
+ append( dol);
+}
+#endif
+
+void DataObjectListImpl::insert (unsigned int index, const SDODate d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, DateLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setDate(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (const SDODate d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, DateLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setDate(d);
+ append( dol);
+}
+
+void DataObjectListImpl::insert (unsigned int index, int64_t d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, LongLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setLong(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (int64_t d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, LongLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setLong(d);
+ append( dol);
+}
+
+void DataObjectListImpl::insert (unsigned int index, float d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, FloatLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setFloat(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (float d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, FloatLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setFloat(d);
+ append( dol);
+}
+
+void DataObjectListImpl::insert (unsigned int index, long double d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, DoubleLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setDouble(d);
+ insert(index, dol);
+}
+
+void DataObjectListImpl::append (long double d)
+{
+ if (theFactory == 0) return;
+
+ if (typeUnset)setType(Type::SDOTypeNamespaceURI, DoubleLiteral);
+
+ RefCountingPointer<DataObject> dol = theFactory->create(typeURI, typeName);
+ DataObject* dob = dol;
+ ((DataObjectImpl*)dob)->setDouble(d);
+ append( dol);
+}
+
+
+void DataObjectListImpl::decrementPindex()
+{
+ pindex--;
+}
+
+
+RefCountingPointer<DataObject> DataObjectListImpl::remove(unsigned int index)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> d = (*this)[index];
+
+ // log deletion only if the list is of data objects.
+ if (theFactory != 0)
+ {
+ const Type& t = theFactory->getType(typeURI,typeName);
+ const Property& p = container->getProperty(pindex);
+ if (!t.isDataType() && !p.isReference())
+ {
+ (getVec()[index])->logDeletion();
+ }
+ }
+ plist.erase(plist.begin()+index);
+ DataObject* dob = d;
+ ((DataObjectImpl*)dob)->setContainer(0);
+ return d;
+}
+
+void DataObjectListImpl::validateIndex(int index) const
+{
+ if ((index < 0) || (index >= size()))
+ {
+ char val[32];
+ std::string msg("Index out of range:");
+ sprintf(val,"%d",index);
+ msg += val;
+ SDO_THROW_EXCEPTION("validateIndex", SDOIndexOutOfRangeException,
+ msg.c_str());
+
+ }
+
+}
+
+bool DataObjectListImpl::getBoolean(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getBoolean();
+}
+char DataObjectListImpl::getByte(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getByte();
+}
+wchar_t DataObjectListImpl::getCharacter(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getCharacter();
+}
+unsigned int DataObjectListImpl::getBytes(unsigned int index, char* value, unsigned int max) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getBytes(value, max);
+}
+unsigned int DataObjectListImpl::getString(unsigned int index, wchar_t* value, unsigned int max) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getString(value, max);
+}
+short DataObjectListImpl::getShort(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getShort();
+}
+long DataObjectListImpl::getInteger(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getInteger();
+}
+int64_t DataObjectListImpl::getLong(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getLong();
+}
+float DataObjectListImpl::getFloat(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getFloat();
+}
+long double DataObjectListImpl::getDouble(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getDouble();
+}
+const SDODate DataObjectListImpl::getDate(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getDate();
+}
+const char* DataObjectListImpl::getCString(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> d = ((*this)[index]);
+ DataObject* dob = d;
+ return ((DataObjectImpl*)dob)->getCString();
+}
+
+DataObjectPtr DataObjectListImpl::getDataObject(unsigned int index) const
+{
+ validateIndex(index);
+ return (*this)[index];
+}
+
+void DataObjectListImpl::setBoolean(unsigned int index, bool d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setBoolean(d);
+}
+void DataObjectListImpl::setByte(unsigned int index, char d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setByte(d);
+}
+void DataObjectListImpl::setCharacter(unsigned int index, wchar_t d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setCharacter(d);
+}
+
+void DataObjectListImpl::setString(unsigned int index, const wchar_t* d, unsigned int len)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setString(d, len);
+}
+void DataObjectListImpl::setBytes(unsigned int index, const char* d, unsigned int len)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setBytes(d, len);
+}
+
+void DataObjectListImpl::setShort(unsigned int index, short d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setShort(d);
+}
+void DataObjectListImpl::setInteger(unsigned int index, long d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setInteger(d);
+}
+void DataObjectListImpl::setLong(unsigned int index, int64_t d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setLong(d);
+}
+void DataObjectListImpl::setFloat(unsigned int index, float d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setFloat(d);
+}
+void DataObjectListImpl::setDouble(unsigned int index, long double d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setDouble(d);
+}
+void DataObjectListImpl::setDate(unsigned int index, const SDODate d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setDate(d);
+}
+void DataObjectListImpl::setCString(unsigned int index, char* d)
+{
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ ((DataObjectImpl*)dob)->setCString(d);
+}
+
+void DataObjectListImpl::setDataObject(unsigned int index, DataObjectPtr dob)
+{
+
+ if (dob != 0)
+ {
+ checkFactory(dob);
+
+ checkType(theFactory->getType(typeURI,typeName),
+ dob->getType());
+ }
+
+ validateIndex(index);
+ if (container != 0)
+ {
+ container->logChange(pindex);
+ }
+
+ remove(index);
+ insert(index,dob);
+}
+
+unsigned int DataObjectListImpl::getLength(unsigned int index) const
+{
+ validateIndex(index);
+ RefCountingPointer<DataObject> dd = ((*this)[index]);
+ DataObject* dob = dd;
+ return dob->getLength();
+}
+
+ const SDOString DataObjectListImpl::BooleanLiteral = "Boolean";
+ const SDOString DataObjectListImpl::ByteLiteral = "Byte";
+ const SDOString DataObjectListImpl::CharacterLiteral = "Character";
+ const SDOString DataObjectListImpl::BytesLiteral = "Bytes";
+ const SDOString DataObjectListImpl::StringLiteral = "String";
+ const SDOString DataObjectListImpl::IntegerLiteral = "Integer";
+ const SDOString DataObjectListImpl::ShortLiteral = "Short";
+ const SDOString DataObjectListImpl::DateLiteral = "Date";
+ const SDOString DataObjectListImpl::LongLiteral = "Long";
+ const SDOString DataObjectListImpl::FloatLiteral = "Float";
+ const SDOString DataObjectListImpl::DoubleLiteral = "Double";
+
+};
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.h
new file mode 100644
index 0000000000..78af3a0ea5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DataObjectListImpl.h
@@ -0,0 +1,207 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/06 12:58:18 $ */
+
+#ifndef _DATAOBJECTLISTIMPL_H_
+#define _DATAOBJECTLISTIMPL_H_
+
+#include "commonj/sdo/DataObjectList.h"
+#include "commonj/sdo/SDODate.h"
+
+#include "commonj/sdo/disable_warn.h"
+
+#include <vector>
+
+
+namespace commonj{
+namespace sdo{
+
+class DataObjectImpl;
+class DataFactory;
+
+typedef std::vector< RefCountingPointer<DataObjectImpl> > DATAOBJECT_VECTOR;
+
+/**
+ * DataObjectListImpl implements the abstract class DataObjectList.
+ * List for retrieving many valued property values.
+ *
+ * DataObjectList provides an API for getting and setting values in
+ * many valued properties. The list deals with both DataType and
+ * DataObjectType properties.
+ */
+
+class DataObjectListImpl : public DataObjectList
+{
+
+public:
+ DataObjectListImpl(DATAOBJECT_VECTOR p);
+ DataObjectListImpl(const DataObjectListImpl &pin);
+ DataObjectListImpl();
+ DataObjectListImpl(DataFactory* df, DataObjectImpl* cont, unsigned int inpindex,
+ const char* tURI, const char* tName);
+
+ virtual ~DataObjectListImpl();
+
+ // open type support
+ virtual void decrementPindex();
+
+ virtual DataObjectPtr operator[] (int pos);
+ virtual const DataObjectPtr operator[] (int pos) const;
+
+ // set/get primitive values
+ virtual bool getBoolean(unsigned int index) const;
+ virtual char getByte(unsigned int index) const;
+ virtual wchar_t getCharacter(unsigned int index) const;
+ virtual unsigned int getString(unsigned int index, wchar_t* buf,
+ unsigned int max) const;
+ virtual unsigned int getBytes(unsigned int index, char* buf,
+ unsigned int max) const;
+ virtual short getShort(unsigned int index) const;
+ virtual long getInteger(unsigned int index) const;
+ virtual int64_t getLong(unsigned int index) const;
+ virtual float getFloat(unsigned int index) const;
+ virtual long double getDouble(unsigned int index) const;
+ virtual const SDODate getDate(unsigned int index) const;
+ virtual const char* getCString(unsigned int index) const;
+ virtual DataObjectPtr getDataObject(unsigned int index) const;
+
+ virtual void setBoolean(unsigned int index, bool d);
+ virtual void setByte(unsigned int index, char d);
+ virtual void setCharacter(unsigned int index, wchar_t d);
+ virtual void setString(unsigned int index, const wchar_t* d, unsigned int len);
+ virtual void setBytes(unsigned int index, const char* d, unsigned int len);
+ virtual void setShort(unsigned int index, short d);
+ virtual void setInteger(unsigned int index, long d);
+ virtual void setLong(unsigned int index, int64_t d);
+ virtual void setFloat(unsigned int index, float d);
+ virtual void setDouble(unsigned int index, long double d);
+ virtual void setDate(unsigned int index, const SDODate d);
+ virtual void setCString(unsigned int index, char* d);
+ virtual void setDataObject(unsigned int index, DataObjectPtr dob);
+
+ virtual unsigned int getLength(unsigned int index) const;
+
+ virtual int size () const;
+
+ virtual void insert (unsigned int index, DataObjectPtr d);
+ virtual void append (DataObjectPtr d);
+
+ virtual void insert (unsigned int index, bool d) ;
+ virtual void append (bool d) ;
+
+ virtual void insert (unsigned int index, char d) ;
+ virtual void append (char d) ;
+
+ virtual void insert (unsigned int index, wchar_t d) ;
+ virtual void append (wchar_t d) ;
+
+ virtual void insert (unsigned int index, const wchar_t* d, unsigned int len) ;
+ virtual void append (const wchar_t* d, unsigned int len) ;
+
+ virtual void insert (unsigned int index, const char* d, unsigned int len) ;
+ virtual void append (const char* d, unsigned int len) ;
+
+ virtual void insert (unsigned int index, const char* d) ;
+ virtual void append (const char* d) ;
+
+ virtual void insert (unsigned int index, short d) ;
+ virtual void append (short d) ;
+
+ virtual void insert (unsigned int index, const SDODate d) ;
+ virtual void append (const SDODate d) ;
+
+#if __WORDSIZE !=64
+ virtual void insert (unsigned int index, long d) ;
+ virtual void append (long d) ;
+#endif
+
+ virtual void insert (unsigned int index, int64_t d) ;
+ virtual void append (int64_t d) ;
+
+ virtual void insert (unsigned int index, float d) ;
+ virtual void append (float d) ;
+
+ virtual void insert (unsigned int index, long double d) ;
+ virtual void append (long double d) ;
+
+
+ virtual DataObjectPtr remove (unsigned int index);
+
+ virtual void checkFactory(DataObjectPtr dob);
+ virtual void checkType(const Type& listType, const Type& objectType);
+ virtual void setType(const char* uri, const char* name);
+ virtual void setType(const SDOString& uri, const SDOString& name);
+
+ /* getType returns type
+ *
+ * Returns the type.
+ * May throw SDOTYpeNotFoundException for unset open types
+ */
+
+
+ virtual const Type& getType();
+
+ /* getTypeEnum returns an enumerator for the type
+ *
+ * Returns an enumerator for the type for easy switching on basic types.
+ * The enumerator is part of the Type class
+ * May throw SDOTypeNotFoundException for open types
+ */
+
+ virtual const Type::Types getTypeEnum();
+
+
+private:
+ DATAOBJECT_VECTOR plist;
+ DATAOBJECT_VECTOR getVec() const;
+
+ // For creation of items via the insert/append api.
+ char* typeURI;
+ char* typeName;
+
+ // for open types, the list may not have a type until the
+ // first item is entered
+
+ bool typeUnset;
+
+ // No reference count held on the factory
+ DataFactory* theFactory;
+
+ // For logging a change in the change summary when appending
+ DataObjectImpl* container;
+ unsigned int pindex;
+ bool isReference;
+
+ void validateIndex(int index) const;
+
+ static const SDOString BooleanLiteral;
+ static const SDOString ByteLiteral;
+ static const SDOString CharacterLiteral;
+ static const SDOString BytesLiteral;
+ static const SDOString StringLiteral;
+ static const SDOString IntegerLiteral;
+ static const SDOString ShortLiteral;
+ static const SDOString DateLiteral;
+ static const SDOString LongLiteral;
+ static const SDOString FloatLiteral;
+ static const SDOString DoubleLiteral;
+
+};
+};
+};
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.cpp
new file mode 100644
index 0000000000..bfd75a18fb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.cpp
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/disable_warn.h"
+#include "commonj/sdo/DefaultLogWriter.h"
+
+#include <iostream>
+using namespace std;
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ DefaultLogWriter::DefaultLogWriter()
+ {
+ formatindent = 0;
+ }
+
+ DefaultLogWriter::~DefaultLogWriter()
+ {
+ }
+
+ void DefaultLogWriter::log(int indent, int level, const char* msg)
+ {
+ if (indent < 0) formatindent += indent;
+ for (int i=0; i < formatindent; i++)
+ {
+ cout << " ";
+ }
+ cout << msg <<endl;
+ if (indent > 0) formatindent += indent;
+ }
+
+ } // End namespace sca
+} // End namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.h
new file mode 100644
index 0000000000..e9b5318c4e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/DefaultLogWriter.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef SDO_DefaultLOGWriter_H
+#define SDO_DefaultLOGWriter_H
+
+#include "commonj/sdo/LogWriter.h"
+
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * DefaultLogWriter is a basic log writer, part of the logger.
+ * The logging API holds a log writer , and uses it to send
+ * output whereever it is needed. The application writer would
+ * hook their own LogWriter in place of this simple one.
+ */
+ class DefaultLogWriter : public LogWriter
+ {
+ public:
+
+ DefaultLogWriter();
+ virtual ~DefaultLogWriter();
+
+ virtual void log(int indent, int level, const char* msg);
+ private:
+ int formatindent;
+ };
+
+ } // End namespace sca
+} // End namespace commonj
+#endif // SDO_DefaultLOGWriter_H
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.cpp
new file mode 100644
index 0000000000..603c24891e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.cpp
@@ -0,0 +1,370 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeList.h"
+#include "commonj/sdo/Sequence.h"
+
+#include "commonj/sdo/DataObject.h"
+
+
+
+#include "commonj/sdo/EqualityHelper.h"
+
+namespace commonj{
+namespace sdo{
+
+ bool EqualityHelper::compareitem(DataObjectPtr to, DataObjectPtr from, const Property& p)
+ {
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ return (to->getBoolean(p) == from->getBoolean(p));
+ case Type::ByteType:
+ return (to->getByte(p) == from->getByte(p));
+ case Type::CharacterType:
+ return (to->getCharacter(p) == from->getCharacter(p));
+ case Type::IntegerType:
+ return (to->getInteger(p) == from->getInteger(p));
+ case Type::ShortType:
+ return (to->getShort(p) == from->getShort(p));
+ case Type::DoubleType:
+ return (to->getDouble(p) == from->getDouble(p));
+ case Type::FloatType:
+ return (to->getFloat(p) == from->getFloat(p));
+ case Type::LongType:
+ return (to->getLong(p) == from->getLong(p));
+ case Type::DateType:
+ return (to->getDate(p).getTime() == from->getDate(p).getTime());
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::UriType:
+ case Type::StringType:
+ {
+ unsigned int siz = from->getLength(p);
+ if (siz != to->getLength(p)) return false;
+
+ if (siz > 0)
+ {
+ wchar_t * buff = new wchar_t[siz];
+ wchar_t * buft = new wchar_t[siz];
+ from->getString(p, buff, siz);
+ to->getString(p, buft, siz);
+ for (int i=0;i< siz; i++)
+ {
+ if (buff[i] != buft[i])
+ {
+ delete buff;
+ delete buft;
+ return false;
+ }
+ }
+ delete buff;
+ delete buft;
+ }
+ return true;
+ }
+ case Type::BytesType:
+ {
+ unsigned int siz = from->getLength(p);
+ if (siz != to->getLength(p)) return false;
+
+ if (siz > 0)
+ {
+ char * buff = new char[siz];
+ char * buft = new char[siz];
+ from->getBytes(p, buff, siz);
+ to->getBytes(p, buft, siz);
+ for (int i=0;i< siz; i++)
+ {
+ if (buff[i] != buft[i])
+ {
+ delete buff;
+ delete buft;
+ return false;
+ }
+ }
+ delete buff;
+ delete buft;
+ }
+ return true;
+ }
+ default:
+ return true;
+ } // switch
+ }
+
+ bool EqualityHelper::comparelist(DataObjectList& to, DataObjectList& from, Type::Types t)
+ {
+ switch (t)
+ {
+ case Type::BooleanType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getBoolean(i) != from.getBoolean(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::ByteType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getByte(i) != from.getByte(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::CharacterType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getCharacter(i) != from.getCharacter(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::IntegerType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getInteger(i) != from.getInteger(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::ShortType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getShort(i) != from.getShort(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+ case Type::DoubleType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getDouble(i) != from.getDouble(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::FloatType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getFloat(i) != from.getFloat(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::LongType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getLong(i) != from.getLong(i))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::DateType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ if (to.getDate(i).getTime() != from.getDate(i).getTime())
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::UriType:
+ case Type::StringType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ unsigned int siz = from.getLength(i);
+ if (siz != to.getLength(i)) return false;
+
+ if (siz > 0)
+ {
+ wchar_t * buff = new wchar_t[siz];
+ wchar_t * buft = new wchar_t[siz];
+ from.getString(i,buff,siz);
+ to.getString(i,buft,siz);
+ for (int j=0;j<siz;j++)
+ {
+ if (buff[j] != buft[j])
+ {
+ delete buff;
+ delete buft;
+ return false;
+ }
+ }
+ delete buff;
+ delete buft;
+ }
+ }
+ return true;
+ }
+
+ case Type::BytesType:
+ {
+ for (int i=0;i< from.size(); i++)
+ {
+ unsigned int siz = from.getLength(i);
+ if (siz != to.getLength(i)) return false;
+
+ if (siz > 0)
+ {
+ char * buff = new char[siz];
+ char * buft = new char[siz];
+ from.getBytes(i,buff,siz);
+ to.getBytes(i,buft,siz);
+ for (int j=0;j<siz;j++)
+ {
+ if (buff[j] != buft[j])
+ {
+ delete buff;
+ delete buft;
+ return false;
+ }
+ }
+ delete buff;
+ delete buft;
+ }
+ }
+ return true;
+ }
+
+ default:
+ return true;
+
+ } // case
+ } // method
+
+ bool EqualityHelper::equalShallow(DataObjectPtr dataObject1, DataObjectPtr dataObject2)
+ {
+ return internalEqual(dataObject1, dataObject2, false);
+
+ }
+
+ bool EqualityHelper::equal(DataObjectPtr dataObject1, DataObjectPtr dataObject2)
+ {
+ return internalEqual(dataObject1, dataObject2, true);
+ }
+
+
+ bool EqualityHelper::internalEqual(DataObjectPtr dataObject1,
+ DataObjectPtr dataObject2,
+ bool fullEqual)
+ {
+
+
+ PropertyList pl = dataObject1->getInstanceProperties();
+ for (int i=0;i < pl.size(); i++)
+ {
+ // data objects are only compared the deep equality case
+ if (pl[i].getType().isDataObjectType())
+ {
+ if (!fullEqual)
+ {
+ continue;
+ }
+ else
+ {
+ if (pl[i].isMany())
+ {
+ DataObjectList& dolold = dataObject1->getList(pl[i]);
+ DataObjectList& dolnew = dataObject2->getList(pl[i]);
+ if (dolnew.size() != dolold.size()) return false;
+
+ for (int i=0;i< dolold.size(); i++)
+ {
+ if (!internalEqual(dolold[i], dolnew[i], true))
+ {
+ return false;
+ }
+ }
+ }
+ else
+ {
+ if (!internalEqual(
+ dataObject1->getDataObject(pl[i]),
+ dataObject2->getDataObject(pl[i]), true))
+ {
+ return false;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (pl[i].isMany())
+ {
+ DataObjectList& dolold = dataObject1->getList(pl[i]);
+ DataObjectList& dolnew = dataObject2->getList(pl[i]);
+ if (dolold.size() != dolnew.size()) return false;
+ if (!comparelist(dolold, dolnew, pl[i].getTypeEnum())) return false;
+ }
+ else
+ {
+ if (!compareitem(dataObject1,dataObject2, pl[i]))
+ {
+ return false;
+ }
+ } // else
+ }
+ }
+ return true;
+ }
+
+}
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.h
new file mode 100644
index 0000000000..381564338c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/EqualityHelper.h
@@ -0,0 +1,97 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _EQUALITYHELPER_H_
+#define _EQUALITYHELPER_H_
+
+#include "commonj/sdo/RefCountingPointer.h"
+
+
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * EqualityHelper provides static helper methods for equals.
+ * equalsShallow compares the DataType properties of the
+ * two data objects.
+ * equals performs a check on all the memebers and verifies that
+ * the same data objects are children.
+ */
+
+ class EqualityHelper
+{
+ public:
+
+ /**
+ * Shallow compare of DataObjects
+ *
+ * Compares two DataObjects for each property where
+ * property.getType().isDataObjectType() is false.
+ * Compares dataObject1.get(property).equals(dataObject2.get(property))
+ * Properties where property.getType().isDataObjectType() is true
+ * are not compared.
+ * DataObjects must have the same type
+ * dataObject1.getType() == dataObject2.getType()
+ * Returns true if all values of all compared properties are equal.
+ * @param dataObject1 DataObject to be compared
+ * @param dataObject2 DataObject to be compared
+ * @return true if equal
+ */
+ static SDO_API bool equalShallow(DataObjectPtr dataObject1, DataObjectPtr dataObject2);
+
+ /**
+ * Deep compare of DataObjects
+ * Compares dataObject1 and dataObject2 and all their contained
+ * DataObjects (property.isContainment() is true) recursively.
+ * Values of properties are comapred as in isEqualShallow,
+ * and values of properties where
+ * property.getType().isDataObjectType() is true
+ * are compared where each value copied must be a corresponding
+ * DataObject contained by the source dataObject.
+ * The dataObject trees must be closed.
+ * If any DataObject referenced in either tree is not part of the
+ * containment trees an IllegalArgumentException is thrown.
+ * If a ChangeSummary is part of the tree they must contain an
+ * identical summary for their respective trees.
+ *
+ * @param dataObject1 DataObject to be compared
+ * @param dataObject2 DataObject to be compared
+ * @return true if all compared aspects of all compared objects are equal
+ * @throws IllegalArgumentException if any referenced DataObject
+ * is not part of the containment trees.
+ */
+ static SDO_API bool equal(DataObjectPtr dataObject1, DataObjectPtr dataObject2);
+
+ private:
+
+ static bool internalEqual(DataObjectPtr dataObject1,
+ DataObjectPtr dataObject2,
+ bool fullEqual);
+
+ static bool comparelist(DataObjectList& to, DataObjectList& from, Type::Types t);
+
+ static bool compareitem(DataObjectPtr to, DataObjectPtr from, const Property& p);
+
+
+
+};
+};
+};
+#endif //_EQUALITYHELPER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.cpp
new file mode 100644
index 0000000000..57870a7516
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.cpp
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "commonj/sdo/GroupDefinition.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ GroupDefinition::GroupDefinition()
+ {
+ }
+
+ GroupDefinition::~GroupDefinition()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.h
new file mode 100644
index 0000000000..685c1119e8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupDefinition.h
@@ -0,0 +1,57 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef _GROUPDEFINITION_H_
+#define _GROUPDEFINITION_H_
+
+#include "commonj/sdo/disable_warn.h"
+#include "commonj/sdo/GroupEvent.h"
+
+#include "list"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+/**
+ * TypeDefinition holds information gathered from parsing the
+ * XSD and used for creating Types
+ */
+ class GroupDefinition
+ {
+
+ public:
+ GroupDefinition();
+ virtual ~GroupDefinition();
+
+
+ SDOXMLString name;
+ SDOXMLString uri;
+ bool isAttributeGroup;
+ std::vector<GroupEvent> events;
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_TYPEDEFINITION_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.cpp
new file mode 100644
index 0000000000..adad37ff82
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.cpp
@@ -0,0 +1,62 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "commonj/sdo/GroupEvent.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ GroupEvent::GroupEvent()
+ {
+ }
+
+ GroupEvent::GroupEvent(
+ const SDOXMLString& inlocalname,
+ const SDOXMLString& inprefix,
+ const SDOXMLString& inURI,
+ const SAX2Namespaces& innamespaces,
+ const SAX2Attributes& inattributes
+ )
+ {
+ localname = inlocalname;
+ prefix = inprefix;
+ URI = inURI;
+ namespaces = innamespaces;
+ attributes = inattributes;
+ isStartEvent = true;
+ }
+
+ GroupEvent::GroupEvent(
+ const SDOXMLString& inlocalname,
+ const SDOXMLString& inprefix,
+ const SDOXMLString& inURI
+ )
+ {
+ localname = inlocalname;
+ prefix = inprefix;
+ URI = inURI;
+ isStartEvent = false;
+ }
+
+ GroupEvent::~GroupEvent()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.h
new file mode 100644
index 0000000000..a2ae966398
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/GroupEvent.h
@@ -0,0 +1,68 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef _GROUPEVENT_H_
+#define _GROUPEVENT_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+
+#include "commonj/sdo/SAX2Parser.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+ class GroupEvent
+ {
+
+ public:
+ GroupEvent();
+ GroupEvent(
+ const SDOXMLString& inlocalname,
+ const SDOXMLString& inprefix,
+ const SDOXMLString& inURI,
+ const SAX2Namespaces& innamespaces,
+ const SAX2Attributes& inattributes
+ );
+
+ GroupEvent(
+ const SDOXMLString& inlocalname,
+ const SDOXMLString& inprefix,
+ const SDOXMLString& inURI
+ );
+
+ virtual ~GroupEvent();
+
+ bool isStartEvent;
+ SDOXMLString localname;
+ SDOXMLString prefix;
+ SDOXMLString URI;
+ SAX2Namespaces namespaces;
+ SAX2Attributes attributes;
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_TYPEDEFINITION_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.cpp
new file mode 100644
index 0000000000..b41c47a501
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.cpp
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/HelperProvider.h"
+#include "commonj/sdo/XSDHelperImpl.h"
+#include "commonj/sdo/XMLHelperImpl.h"
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/DataFactory.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ //////////////////////////////////////////////////////////////////////
+ // Create an XSDHelper
+ //////////////////////////////////////////////////////////////////////
+ XSDHelperPtr HelperProvider::getXSDHelper(DataFactoryPtr dataFactory)
+ {
+ return new XSDHelperImpl(dataFactory);
+ }
+ //////////////////////////////////////////////////////////////////////
+ // Create an XMLHelper
+ //////////////////////////////////////////////////////////////////////
+ XMLHelperPtr HelperProvider::getXMLHelper(DataFactoryPtr dataFactory)
+ {
+ return new XMLHelperImpl(dataFactory);
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.h
new file mode 100644
index 0000000000..7be271f128
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/HelperProvider.h
@@ -0,0 +1,65 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _HELPERPROVIDER_H_
+#define _HELPERPROVIDER_H_
+
+
+#include "commonj/sdo/XSDHelper.h"
+#include "commonj/sdo/XMLHelper.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/export.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+/**
+ * HelperProvider gives access to helpers (static methods).
+ *
+ * The helper provider gives back an XSD or XML helper associated
+ * with the given data factory
+ */
+ class HelperProvider
+ {
+ public:
+
+/**
+ *
+ * The helper provider gives back an XSD helper associated
+ * with the given data factory
+ */
+ SDO_API static XSDHelperPtr getXSDHelper(DataFactoryPtr dataFactory=0);
+
+/**
+ *
+ * The helper provider gives back an XML helper associated
+ * with the given data factory
+ */
+ SDO_API static XMLHelperPtr getXMLHelper(DataFactoryPtr dataFactory=0);
+
+ };
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif // _HELPERPROVIDER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.cpp
new file mode 100644
index 0000000000..79f7d48671
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.cpp
@@ -0,0 +1,32 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/LogWriter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ LogWriter::~LogWriter()
+ {
+ }
+
+ } // End namespace sdo
+} // End namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.h
new file mode 100644
index 0000000000..9948c86ed9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/LogWriter.h
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef SDO_LOGWriter_H
+#define SDO_LOGWriter_H
+
+#include "commonj/sdo/export.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * LogWriter is an abstract class for implementers to inherit from.
+ * see DefaultLogWriter.
+ */
+ class LogWriter
+ {
+ public:
+ virtual ~LogWriter();
+
+ SDO_API virtual void log(int indent, int level, const char* msg) = 0;
+ };
+
+ } // End namespace sdo
+} // End namespace commonj
+#endif // SDO_LOGWriter_H
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.cpp
new file mode 100644
index 0000000000..6d799f2435
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.cpp
@@ -0,0 +1,100 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/01/23 16:39:24 $ */
+
+#include "commonj/sdo/Logger.h"
+#include <iostream>
+#include <stdarg.h>
+#include "commonj/sdo/DefaultLogWriter.h"
+#include <stdio.h>
+
+using namespace std;
+
+namespace commonj
+{
+ namespace sdo
+ {
+ LogWriter* Logger::logWriter = getLogWriter();
+
+ LogWriter* Logger::getLogWriter()
+ {
+ if (logWriter == 0)
+ {
+ setLogWriter(0);
+ }
+ return logWriter;
+ }
+
+ void Logger::setLogWriter(LogWriter* writer)
+ {
+ if (logWriter != writer)
+ {
+ delete logWriter;
+ }
+
+ if (writer == 0)
+ {
+ logWriter = new DefaultLogWriter;
+ }
+ else
+ {
+ logWriter = writer;
+ }
+ }
+
+ int Logger::loggingLevel = setLogging();
+
+ int Logger::setLogging()
+ {
+ char* loggingVar = 0;
+ loggingVar = getenv("SDO4CPP_LOGGING");
+ if (loggingVar == 0)
+ return 0;
+ else
+ return atoi(loggingVar);
+ }
+
+ void Logger::setLogging(int level)
+ {
+ loggingLevel = level;
+ }
+
+ void Logger::log(int indent, int level, const char* msg)
+ {
+ if (level <= loggingLevel)
+ {
+ logWriter->log(indent, level, msg);
+ }
+ }
+
+ void Logger::logArgs(int indent, int level, const char* msg, ...)
+ {
+ if (level <= loggingLevel)
+ {
+ va_list variableArguments;
+ va_start(variableArguments, msg);
+ char messageBuffer[1024];
+ vsprintf(messageBuffer, msg, variableArguments);
+ logWriter->log(indent, level, messageBuffer);
+ va_end(variableArguments);
+ }
+ }
+
+ } // End namespace sdo
+} // End namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.h
new file mode 100644
index 0000000000..ee566e9c44
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logger.h
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef SDO_LOGGER_H
+#define SDO_LOGGER_H
+
+
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/LogWriter.h"
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * Logger is used for debug style logging such as method trace.
+ * The logger can log at different levels, and can log entry, exit
+ * and events. The log entries can take arguments or be just
+ * strings.
+ */
+ class Logger {
+
+ public:
+/**
+ * attach a log writer.
+ */
+ SDO_API static void setLogWriter(LogWriter* writer);
+/**
+ * switch logging to a level.
+ */
+ SDO_API static void setLogging(int level);
+
+/**
+ * log a message.
+ */
+ SDO_API static void log(int indent, int level, const char* msg);
+/**
+ * log a message with parameters.
+ */
+ SDO_API static void logArgs(int indent, int level, const char* msg, ...);
+
+ static int loggingLevel;
+
+ private:
+ static LogWriter* logWriter;
+ static LogWriter* getLogWriter();
+ static int setLogging();
+ };
+
+ } // End namespace sdo
+} // End namespace commonj
+#endif // SDO_LOGGER_H
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logging.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logging.h
new file mode 100644
index 0000000000..e2adac2d84
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Logging.h
@@ -0,0 +1,170 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/Logger.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+#
+#ifndef SDO_LOGGING_H
+#define SDO_LOGGING_H
+
+/**
+ * logging level for stuff you rarely want to see, like
+ * memory allocations.
+ */
+
+#define HIGHVOLUME 40
+/**
+ * logging level for normal path information
+ */
+#define INFO 30
+
+ /**
+ * logging level for something which is unusual.
+ */
+
+#define WARNING 20
+/**
+ * logging level for a major problem
+ */
+
+#define ERROR 10
+
+#define INDENT 1
+#define OUTDENT -1
+#define NODENT 0
+
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+
+#ifdef _DEBUG
+#define LOGENTRY(level, methodName) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(INDENT, level, "Entering: %s", methodName);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGEXIT(level, methodName) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(OUTDENT, level, "Exiting: %s" ,methodName);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGINFO(level, message) \
+if (Logger::loggingLevel >= level) \
+Logger::log(NODENT, level, message);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGINFO_1(level, message, arg1) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(NODENT,level, message, arg1);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGINFO_2(level, message, arg1, arg2) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(NODENT,level, message, arg1, arg2);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGERROR(level, message) \
+if (Logger::loggingLevel >= level) \
+Logger::log(NODENT,level, message);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGERROR_1(level, message, arg1) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(NODENT,level, message, arg1);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGERROR_2(level, message, arg1, arg2) \
+if (Logger::loggingLevel >= level) \
+Logger::logArgs(NODENT,level, message, arg1, arg2);
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGSDOEXCEPTION(level, message, arg1) \
+if (Logger::loggingLevel >= level) \
+Logger::log(NODENT,level, message);\
+Logger::logArgs(NODENT,level, "%s:%s\nIn %s\nAt %s line %ld\n",\
+ ((SDORuntimeException)arg1).getEClassName(),\
+ ((SDORuntimeException)arg1).getMessageText(),\
+ ((SDORuntimeException)arg1).getFunctionName(),\
+ ((SDORuntimeException)arg1).getFileName(),\
+ ((SDORuntimeException)arg1).getLineNumber());
+
+#else // Not DEBUG
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGSDOEXCEPTION(level, message, arg1)
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGENTRY(level, methodName)
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGEXIT(level, methodName)
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGINFO(level, message)
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGINFO_1(level, message, arg1)
+
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGINFO_2(level, message, arg1, arg2)
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGERROR(level, message)
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGERROR_1(level, message, arg1)
+/**
+ * Macro for simplifying addition of trace points
+ */
+#define LOGERROR_2(level, message, arg1, arg2)
+
+#endif
+#endif // SDO_LOGGING_H
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Makefile.am
new file mode 100644
index 0000000000..7bc7726be7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Makefile.am
@@ -0,0 +1,87 @@
+lib_LTLIBRARIES = libtuscany_sdo.la
+AM_CPPFLAGS = $(CPPFLAGS)
+
+libtuscany_sdo_la_SOURCES = \
+ ChangedDataObjectListImpl.cpp \
+ ChangeSummaryBuilder.cpp \
+ ChangeSummary.cpp \
+ ChangeSummaryImpl.cpp \
+ CopyHelper.cpp \
+ DASProperty.cpp \
+ DASType.cpp \
+ DASValue.cpp \
+ DASValues.cpp \
+ DataFactory.cpp \
+ DataFactoryImpl.cpp \
+ DataGraph.cpp \
+ DataGraphImpl.cpp \
+ DataObject.cpp \
+ DataObjectImpl.cpp \
+ DataObjectInstance.cpp \
+ DataObjectList.cpp \
+ DataObjectListImpl.cpp \
+ DefaultLogWriter.cpp \
+ EqualityHelper.cpp \
+ GroupDefinition.cpp \
+ GroupEvent.cpp \
+ HelperProvider.cpp \
+ Logger.cpp \
+ LogWriter.cpp \
+ ParserErrorSetter.cpp \
+ Property.cpp \
+ PropertyDefinition.cpp \
+ PropertyDefinitionImpl.cpp \
+ PropertyImpl.cpp \
+ PropertyList.cpp \
+ PropertySetting.cpp \
+ RefCountingObject.cpp \
+ RefCountingPointer.cpp \
+ SAX2Attribute.cpp \
+ SAX2Attributes.cpp \
+ SAX2Namespaces.cpp \
+ SAX2Parser.cpp \
+ SchemaInfo.cpp \
+ SdoCheck.cpp \
+ SDODate.cpp \
+ SdoRuntime.cpp \
+ SDORuntimeException.cpp \
+ SDOSAX2Parser.cpp \
+ SDOSchemaSAX2Parser.cpp \
+ SDOString.cpp \
+ SDOUtils.cpp \
+ SDOXMLBufferWriter.cpp \
+ SDOXMLFileWriter.cpp \
+ SDOXMLStreamWriter.cpp \
+ SDOXMLString.cpp \
+ SDOXMLWriter.cpp \
+ SDOXSDBufferWriter.cpp \
+ SDOXSDFileWriter.cpp \
+ SDOXSDStreamWriter.cpp \
+ SDOXSDWriter.cpp \
+ Sequence.cpp \
+ SequenceImpl.cpp \
+ Setting.cpp \
+ SettingList.cpp \
+ Type.cpp \
+ TypeDefinition.cpp \
+ TypeDefinitions.cpp \
+ TypeDefinitionImpl.cpp \
+ TypeDefinitionsImpl.cpp \
+ TypeImpl.cpp \
+ TypeList.cpp \
+ XMLDocument.cpp \
+ XMLDocumentImpl.cpp \
+ XMLHelper.cpp \
+ XMLHelperImpl.cpp \
+ XMLQName.cpp \
+ XpathHelper.cpp \
+ XSDHelper.cpp \
+ XSDHelperImpl.cpp \
+ XSDPropertyInfo.cpp \
+ XSDTypeInfo.cpp
+
+libtuscany_sdo_la_LIBADD =
+
+INCLUDES = -I$(top_builddir)/runtime/core/src \
+ -I${LIBXML2_INCLUDE}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.cpp
new file mode 100644
index 0000000000..2d9a99360f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.cpp
@@ -0,0 +1,38 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+// ParserErrorSetter.cpp: class allowing parser to push errors back.
+//
+//////////////////////////////////////////////////////////////////////
+#include "commonj/sdo/ParserErrorSetter.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ //////////////////////////////////////////////////////////////////////
+ // Construction/Destruction
+ //////////////////////////////////////////////////////////////////////
+ ParserErrorSetter::~ParserErrorSetter()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h
new file mode 100644
index 0000000000..f4261c1154
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/ParserErrorSetter.h
@@ -0,0 +1,48 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+
+#ifndef _PARSER_ERROR_SETTER_H_
+#define _PARSER_ERROR_SETTER_H_
+
+#include "commonj/sdo/export.h"
+
+#include "commonj/sdo/disable_warn.h"
+
+#include <vector>
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * The ParserErrorSetter builds a list of all the errors which
+ * occurred during a parse, so they can be displayed for the
+ * user of an XSDHelper or XMLHelper
+ */
+
+class ParserErrorSetter
+{
+public:
+ virtual ~ParserErrorSetter();
+ virtual void setError(const char* message) = 0;
+ virtual void clearErrors() = 0;
+};
+};
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.cpp
new file mode 100644
index 0000000000..11fc167377
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.cpp
@@ -0,0 +1,42 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include <iostream>
+using namespace std;
+
+
+#ifndef SDO_EXPORTS
+#define SDO_EXPORTS
+#endif
+#include "commonj/sdo/export.h"
+
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/TypeList.h"
+
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/Property.h"
+namespace commonj{
+namespace sdo{
+
+ // All delegated to the impl.
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.h
new file mode 100644
index 0000000000..2bd52c9ab2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Property.h
@@ -0,0 +1,205 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/06 12:58:18 $ */
+
+#ifndef _PROPERTY_H_
+#define _PROPERTY_H_
+
+
+#include "commonj/sdo/export.h"
+
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/SDODate.h"
+
+namespace commonj{
+namespace sdo{
+
+class Type;
+class TypeImpl;
+class DataObject;
+
+/**
+ *
+ * A representation of a property in the type of a data object.
+ */
+
+class Property
+{
+ public:
+
+ /** getName gets the name of the property
+ *
+ * Returns the name of the property.
+ */
+
+ // TODO: We would like the returned value to be an SDOString but not until the internals are ready
+ virtual const SDO_API char* getName() const = 0;
+ // virtual const SDO_API SDOString& getName() const = 0;
+
+ /** getAlias returns the n'th alias
+ *
+ * This method returns a const char* corresponding to the
+ * alias at index n of the list of aliases. Use getAliasCount to
+ * discover the size of the list.
+ */
+
+ // TODO: We would lke to convert the returned value to an SDOString but that means a rename for the method.
+ virtual SDO_API const char* getAlias(unsigned int index = 0) const = 0;
+
+ // virtual SDO_API const SDOString& getAlias(unsigned int index = 0) const = 0;
+
+ /** getAliasCount returns the number of aliases
+ *
+ * This method returns the number of aliases for this type
+ */
+
+ virtual SDO_API unsigned int getAliasCount() const = 0;
+
+ /** getType returns the type of this property
+ *
+ * This method returns the type, which may be a DataType or a
+ * DataObjectType
+ */
+
+ virtual SDO_API const Type& getType() const = 0;
+
+ /** getTypeEnum gets the enum for this type.
+ *
+ * Each DataType has a defined value in the list of Types.
+ */
+
+ virtual SDO_API const Type::Types getTypeEnum() const = 0;
+
+ /** isMany is true if the property is a list
+ *
+ * IsMany returns true if this property represents a list of
+ * values, and should be accessed via the getList DataObjectAPI.
+ */
+
+ virtual bool SDO_API isMany() const = 0;
+
+ /** isContainment is true if the property value is contained
+ *
+ * IsContainment returns true if this property represents a DataObjectType,
+ * and that DataObjectType is contained. I.E the property value is not a pointer
+ * to a DataObject somewhere else in the graph, it is an actual value.
+ */
+
+ virtual bool SDO_API isContainment() const = 0;
+
+ /** isReference is true if the property value is not contained
+ *
+ * IsReference returns true if this property represents a DataObjectType,
+ * and that DataObjectType is not contained. I.E the property value is a pointer
+ * to a DataObject somewhere else in the graph not an actual value.
+ */
+
+ virtual bool SDO_API isReference() const = 0;
+
+ /** getContainingType give the type which holds this property.
+ *
+ * Although many types may have a property of the same name, any given
+ * instance of a property belongs to only one type.
+ * This method returns the type which holds this proeprty.
+ */
+
+ virtual SDO_API const Type& getContainingType() const = 0;
+
+
+
+ /** isReadOnly returns true if the property is unmodifiable.
+ *
+ * NOT IMPLEMENTED
+ * Returns true if values for this Property cannot be modified using the SDO APIs.
+ * When true, DataObject.set(Property property, Object value) throws an exception.
+ * Values may change due to other factors, such as services operating on DataObjects.
+ */
+
+ virtual bool SDO_API isReadOnly() const = 0;
+
+ /** getOpposite returns the opposite property or zero.
+ *
+ * NOT IMPLEMENTED
+ */
+
+ virtual SDO_API const Property* getOpposite() const = 0;
+
+ /** isDefaulted is true if a default has been set.
+ *
+ * A property value may be set or unset. If unset, requests to the
+ * data object for the value will return a default if there is one.
+ * If the property is not defaulted, an un specified value will be
+ * returned. (Thism value will probably be zero).
+ */
+
+ virtual SDO_API bool isDefaulted() const = 0 ;
+
+ /** setDefault sets the right sort of default.
+ *
+ * The many overrides of this method allow the setting
+ * of a default value for any DataType property.
+ */
+
+ virtual SDO_API void setDefault(bool b ) = 0;
+ virtual SDO_API void setDefault(char c) = 0;
+ virtual SDO_API void setDefault(wchar_t c) = 0;
+ virtual SDO_API void setDefault(char* c) = 0;
+ virtual SDO_API void setDefault(const SDOString& c) = 0;
+ virtual SDO_API void setDefault(short s) = 0;
+#if __WORDSIZE !=64
+ virtual SDO_API void setDefault(long l) = 0;
+#endif
+ virtual SDO_API void setDefault(int64_t i) = 0;
+ virtual SDO_API void setDefault(float f) = 0;
+ virtual SDO_API void setDefault(long double d) = 0;
+ virtual SDO_API void setDefault(const SDODate d) = 0;
+ virtual SDO_API void setDefault(const wchar_t* c, unsigned int len) = 0;
+ virtual SDO_API void setDefault(const char* c, unsigned int len) = 0;
+ virtual SDO_API void setDefault(const SDOString& c, unsigned int len) = 0;
+
+ /** getDefault gets the right sort of default.
+ *
+ * The many overrides of this method allow the getting
+ * of a default value for any DataType property.
+ */
+
+ virtual SDO_API unsigned int getStringDefault(wchar_t* val, unsigned int max) const = 0;
+ virtual SDO_API unsigned int getBytesDefault(char* val, unsigned int max) const = 0;
+ virtual SDO_API unsigned int getBytesDefault(SDOString& val, unsigned int max) const = 0;
+ virtual SDO_API bool getBooleanDefault() const = 0;
+ virtual SDO_API char getByteDefault() const = 0;
+ virtual SDO_API wchar_t getCharacterDefault() const = 0;
+ virtual SDO_API short getShortDefault() const = 0;
+ virtual SDO_API long getIntegerDefault() const = 0;
+ virtual SDO_API int64_t getLongDefault() const = 0;
+ virtual SDO_API float getFloatDefault() const = 0;
+ virtual SDO_API long double getDoubleDefault() const = 0;
+ virtual SDO_API const SDODate getDateDefault() const = 0;
+ virtual SDO_API const char* getCStringDefault() const = 0;
+ // TODO: Can't overload return types.
+ // virtual SDO_API const SDOString& getSDOStringDefault() const = 0;
+ virtual SDO_API unsigned int getDefaultLength() const = 0;
+
+
+};
+
+
+};
+};
+
+#endif //_PROPERTY_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.cpp
new file mode 100644
index 0000000000..e83e66d656
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.cpp
@@ -0,0 +1,285 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/PropertyDefinition.h"
+#include "commonj/sdo/PropertyDefinitionImpl.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ PropertyDefinition::PropertyDefinition()
+ {
+ propertydefinition = new PropertyDefinitionImpl();
+ }
+
+ PropertyDefinition::~PropertyDefinition()
+ {
+ if (propertydefinition) delete propertydefinition;
+ }
+
+ void PropertyDefinition::copy (const PropertyDefinition& pd)
+ {
+ if (propertydefinition != 0) delete propertydefinition;
+ propertydefinition = new PropertyDefinitionImpl(*(pd.propertydefinition));
+ }
+
+ PropertyDefinition::PropertyDefinition(const PropertyDefinition& pd)
+ {
+ copy(pd);
+ }
+
+ PropertyDefinition& PropertyDefinition::operator=(const PropertyDefinition& pd)
+ {
+ if (this != &pd)
+ {
+ copy(pd);
+ }
+ return *this;
+ }
+
+ PropertyDefinitionImpl* PropertyDefinition::getPropertyDefinition()
+ {
+ return propertydefinition;
+ }
+
+ // where this property is to be substituted for another
+ void PropertyDefinition::setSubstituteName(const char * name)
+ {
+ propertydefinition->substituteName = name;
+ }
+
+ const char* PropertyDefinition::getSubstituteName() const
+ {
+ return (const char *)propertydefinition->substituteName;
+ }
+
+
+ void PropertyDefinition::setSubstituteUri(const char* name)
+ {
+ propertydefinition->substituteUri = name;
+ }
+
+ const char* PropertyDefinition::getSubstituteUri() const
+ {
+ return (const char*)propertydefinition->substituteUri;
+ }
+
+ // where there are substitute names for this property.
+ void PropertyDefinition::addSubstitute(const char* name,
+ const char* localname)
+ {
+ propertydefinition->substituteNames.push_back(name);
+ propertydefinition->substituteLocalNames.push_back(localname);
+ }
+
+ int PropertyDefinition::getSubstituteCount() const
+ {
+ return propertydefinition->substituteNames.size();
+ }
+
+ const char* PropertyDefinition::getSubstituteNames(int index) const
+ {
+ if (index >= 0 && index < propertydefinition->substituteNames.size())
+ {
+ return propertydefinition->substituteNames[index];;
+ }
+ return 0;
+ }
+
+ const char* PropertyDefinition::getSubstituteLocalNames(int index) const
+ {
+ if (index >= 0 && index < propertydefinition->substituteLocalNames.size())
+ {
+ return propertydefinition->substituteLocalNames[index];;
+ }
+ return 0;
+ }
+
+
+ void PropertyDefinition::setAliases(const char* aliases)
+ {
+ propertydefinition->aliases = aliases;
+ }
+
+ const char* PropertyDefinition::getAliases() const
+ {
+ return (const char *)propertydefinition->aliases;
+ }
+
+ void PropertyDefinition::setName(const char* name)
+ {
+ propertydefinition->name = name;
+ }
+
+ const char* PropertyDefinition::getName() const
+ {
+ return (const char *)propertydefinition->name;
+ }
+
+ void PropertyDefinition::setLocalName(const char* name)
+ {
+ propertydefinition->localname = name;
+ }
+
+ const char* PropertyDefinition::getLocalName() const
+ {
+ return (const char*)propertydefinition->localname;
+ }
+
+ void PropertyDefinition::setType(const char* uri, const char* name)
+ {
+ propertydefinition->typeUri = uri;
+ propertydefinition->typeName = name;
+ propertydefinition->fullTypeName = uri;
+ propertydefinition->fullTypeName += "#";
+ propertydefinition->fullTypeName += name;
+ }
+
+ const char * PropertyDefinition::getTypeName() const
+ {
+ return propertydefinition->typeName;
+ }
+
+ const char * PropertyDefinition::getTypeUri() const
+ {
+ return propertydefinition->typeUri;
+ }
+
+ const char * PropertyDefinition::getTypeFullName() const
+ {
+ return propertydefinition->fullTypeName;
+ }
+
+ const char * PropertyDefinition::getTypeFullLocalName() const
+ {
+ return propertydefinition->fullLocalTypeName;
+ }
+
+ void PropertyDefinition::setTypeFullLocalName(const char* name)
+ {
+ propertydefinition->fullLocalTypeName = name;
+ }
+
+
+ void PropertyDefinition::setDefaultValue(const char* value)
+ {
+ propertydefinition->defaultValue = value;
+ }
+
+ const char* PropertyDefinition::getDefaultValue() const
+ {
+ return propertydefinition->defaultValue;
+ }
+
+ bool PropertyDefinition::getIsMany() const
+ {
+ return propertydefinition->isMany;
+ }
+
+ bool PropertyDefinition::getIsContainment() const
+ {
+ return propertydefinition->isContainment;
+ }
+
+ bool PropertyDefinition::getIsReadOnly() const
+ {
+ return propertydefinition->isReadOnly;
+ }
+
+ bool PropertyDefinition::getIsID() const
+ {
+ return propertydefinition->isID;
+ }
+
+ bool PropertyDefinition::getIsIDREF() const
+ {
+ return propertydefinition->isIDREF;
+ }
+
+ bool PropertyDefinition::getIsReference() const
+ {
+ return propertydefinition->isReference;
+ }
+
+ bool PropertyDefinition::getIsElement() const
+ {
+ return propertydefinition->isElement;
+ }
+
+ bool PropertyDefinition::getIsQName() const
+ {
+ return propertydefinition->isQName;
+ }
+
+ bool PropertyDefinition::getIsSubstitute() const
+ {
+ return propertydefinition->isSubstitute;
+ }
+
+
+ void PropertyDefinition::setIsMany(bool value)
+ {
+ propertydefinition->isMany = value;
+ }
+
+ void PropertyDefinition::setIsContainment(bool value)
+ {
+ propertydefinition->isContainment = value;
+ }
+
+ void PropertyDefinition::setIsReadOnly(bool value)
+ {
+ propertydefinition->isReadOnly = value;
+ }
+
+ void PropertyDefinition::setIsID(bool value)
+ {
+ propertydefinition->isID = value;
+ }
+
+ void PropertyDefinition::setIsIDREF(bool value)
+ {
+ propertydefinition->isIDREF = value;
+ }
+
+ void PropertyDefinition::setIsReference(bool value)
+ {
+ propertydefinition->isReference = value;
+ }
+
+ void PropertyDefinition::setIsElement(bool value)
+ {
+ propertydefinition->isElement = value;
+ }
+
+ void PropertyDefinition::setIsQName(bool value)
+ {
+ propertydefinition->isQName = value;
+ }
+
+ void PropertyDefinition::setIsSubstitute(bool value)
+ {
+ propertydefinition->isSubstitute = value;
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.h
new file mode 100644
index 0000000000..cb6df88d5f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinition.h
@@ -0,0 +1,122 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _PROPERTYDefinition_H_
+#define _PROPERTYDefinition_H_
+
+#include "export.h"
+
+#include <vector>
+
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ class PropertyDefinitionImpl;
+
+/**
+ * PropertyDefinitionImpl holds a property as defined by an XSD.
+ * The XSD holds more information than does the SDO Property.
+ * This class holds the extra information found as the XSD is
+ * parsed.
+ */
+ class SDO_API PropertyDefinition
+ {
+
+ public:
+
+
+ /*SDO_API*/ PropertyDefinition();
+ PropertyDefinition(const PropertyDefinition& pd);
+ PropertyDefinition& operator=(const PropertyDefinition& pd);
+
+ /*SDO_API*/ virtual ~PropertyDefinition();
+
+ PropertyDefinitionImpl* getPropertyDefinition();
+
+
+
+ // where this property is to be substituted for another
+ /*SDO_API*/ void setSubstituteName(const char * name);
+ /*SDO_API*/ const char* getSubstituteName() const;
+
+ /*SDO_API*/ void setSubstituteUri(const char* name);
+ /*SDO_API*/ const char* getSubstituteUri() const;
+
+ // where there are substitute names for this property.
+ /*SDO_API*/ void addSubstitute(const char* name,
+ const char* localname);
+ /*SDO_API*/ int getSubstituteCount() const;
+ /*SDO_API*/ const char* getSubstituteNames(int index) const;
+ /*SDO_API*/ const char* getSubstituteLocalNames(int index) const;
+
+
+ /*SDO_API*/ void setAliases(const char* aliases);
+ /*SDO_API*/ const char* getAliases() const;
+
+ /*SDO_API*/ void setName(const char* name);
+ /*SDO_API*/ const char* getName() const;
+
+ /*SDO_API*/ void setLocalName(const char* name);
+ /*SDO_API*/ const char* getLocalName() const;
+
+ /*SDO_API*/ void setType(const char* uri, const char* name);
+ /*SDO_API*/ const char * getTypeName() const;
+ /*SDO_API*/ const char * getTypeUri() const;
+ /*SDO_API*/ const char * getTypeFullName() const;
+ /*SDO_API*/ const char * getTypeFullLocalName() const ;
+
+ /*SDO_API*/ void setTypeFullLocalName(const char* name);
+
+ /*SDO_API*/ void setDefaultValue(const char* value);
+ /*SDO_API*/ const char* getDefaultValue() const;
+
+ /*SDO_API*/ bool getIsMany() const;
+ /*SDO_API*/ bool getIsContainment() const;
+ /*SDO_API*/ bool getIsReadOnly() const;
+ /*SDO_API*/ bool getIsID() const;
+ /*SDO_API*/ bool getIsIDREF() const;
+ /*SDO_API*/ bool getIsReference() const;
+ /*SDO_API*/ bool getIsElement() const;
+ /*SDO_API*/ bool getIsQName() const;
+ /*SDO_API*/ bool getIsSubstitute() const;
+
+ /*SDO_API*/ void setIsMany(bool value);
+ /*SDO_API*/ void setIsContainment(bool value);
+ /*SDO_API*/ void setIsReadOnly(bool value);
+ /*SDO_API*/ void setIsID(bool value);
+ /*SDO_API*/ void setIsIDREF(bool value);
+ /*SDO_API*/ void setIsReference(bool value);
+ /*SDO_API*/ void setIsElement(bool value);
+ /*SDO_API*/ void setIsQName(bool value);
+ /*SDO_API*/ void setIsSubstitute(bool value);
+
+
+ private:
+ PropertyDefinitionImpl* propertydefinition;
+ void copy(const PropertyDefinition& pd);
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_PROPERTYDefinitionImpl_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.cpp
new file mode 100644
index 0000000000..39b0766b84
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.cpp
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "commonj/sdo/PropertyDefinitionImpl.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ PropertyDefinitionImpl::PropertyDefinitionImpl()
+ : isMany(false),
+ isContainment(true),
+ isReadOnly(false),
+ isElement(false),
+ isReference(false),
+ isQName(false),
+ isID(false),
+ isIDREF(false),
+ isSubstitute(false)
+
+ {
+ }
+
+ PropertyDefinitionImpl::~PropertyDefinitionImpl()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.h
new file mode 100644
index 0000000000..fc0e69a496
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyDefinitionImpl.h
@@ -0,0 +1,87 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef _PROPERTYDefinitionImpl_H_
+#define _PROPERTYDefinitionImpl_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLString.h"
+#include <vector>
+
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+/**
+ * PropertyDefinitionImpl holds a property as defined by an XSD.
+ * The XSD holds more information than does the SDO Property.
+ * This class holds the extra information found as the XSD is
+ * parsed.
+ */
+ class PropertyDefinitionImpl
+ {
+
+ public:
+ PropertyDefinitionImpl();
+ virtual ~PropertyDefinitionImpl();
+
+ // where this property is to be substituted for another
+ SDOXMLString substituteName;
+ SDOXMLString substituteUri;
+
+ // where there are substitute names for this property.
+ std::vector<SDOXMLString> substituteNames;
+ std::vector<SDOXMLString> substituteLocalNames;
+
+ SDOXMLString aliases;
+
+ SDOXMLString name;
+ SDOXMLString localname;
+
+ SDOXMLString typeUri;
+ SDOXMLString typeName;
+ SDOXMLString fullTypeName;
+
+ SDOXMLString fullLocalTypeName;
+
+ SDOXMLString defaultValue;
+
+ bool isMany;
+ bool isContainment;
+ bool isReadOnly;
+
+ bool isID;
+ bool isIDREF;
+ bool isReference;
+ bool isElement;
+
+ bool isQName;
+
+ bool isSubstitute;
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_PROPERTYDefinitionImpl_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.cpp
new file mode 100644
index 0000000000..ff32f0c33d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.cpp
@@ -0,0 +1,581 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+
+#include <iostream>
+using namespace std;
+
+#ifndef SDO_EXPORTS
+#define SDO_EXPORTS
+#endif
+#include "commonj/sdo/export.h"
+
+
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/TypeList.h"
+
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeImpl.h"
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/PropertyImpl.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+namespace commonj{
+ namespace sdo{
+
+
+ Substitution::Substitution() : name(), type(0)
+ {
+ }
+
+ // Standard Constructor
+ Substitution::Substitution(DataFactoryPtr mdg,
+ const SDOString& inname,
+ const Type& intype) : name(inname)
+ {
+ DataFactory* f = (DataFactory*)mdg;
+
+ type = ((DataFactoryImpl*)f)->findType(intype.getURI(),intype.getName());
+ }
+
+ // Copy constructor
+ Substitution::Substitution(const Substitution& s) : name(s.name), type(s.type)
+ {
+ }
+
+ Substitution::~Substitution()
+ {
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // construction by DAS
+ ///////////////////////////////////////////////////////////////////////////
+
+ PropertyImpl::PropertyImpl(const Type& cont,
+ const char* inname,
+ const TypeImpl& intype,
+ bool many ,
+ bool ro ,
+ bool contain) : containertype(cont), type (intype)
+ {
+ // name = new char[strlen(inname)+1];
+ // strcpy(name,inname);
+ if (inname != 0)
+ {
+ name = inname;
+ }
+ else
+ {
+ name.erase();
+ }
+ defvalue = 0;
+ defvaluelength = 0;
+ opposite = 0;
+ stringdef = 0;
+ bisMany = many;
+ bisReadOnly = ro;
+ bisContainer = contain;
+ bDefaulted=false;
+ if (contain == false && intype.isDataObjectType())
+ {
+ bisReference = true;
+ }
+ else
+ {
+ bisReference = false;
+ }
+ }
+
+ PropertyImpl::PropertyImpl(const Type& cont,
+ const SDOString& inname,
+ const TypeImpl& intype,
+ bool many,
+ bool ro,
+ bool contain) :
+ containertype(cont),
+ name(inname),
+ type(intype),
+ bisMany(many),
+ bisReadOnly(ro),
+ bisContainer(contain),
+ bDefaulted(false),
+ opposite(0),
+ stringdef(0),
+ defvalue(0),
+ defvaluelength(0)
+ {
+ if (contain == false && intype.isDataObjectType())
+ {
+ bisReference = true;
+ }
+ else
+ {
+ bisReference = false;
+ }
+ }
+
+ PropertyImpl::PropertyImpl(const PropertyImpl& p) :
+ type((*(p.getTypeImpl()))),
+ containertype(p.getContainingType()),
+ name(p.name),
+ bisMany(p.bisMany),
+ bisReadOnly(p.bisReadOnly),
+ bisContainer(p.bisContainer),
+ bDefaulted(false),
+ opposite(0),
+ defvalue(0),
+ defvaluelength(0),
+ stringdef(0)
+ {
+ if (bisContainer == false && type.isDataObjectType())
+ {
+ bisReference = true;
+ }
+ else
+ {
+ bisReference = false;
+ }
+ }
+
+ PropertyImpl::~PropertyImpl()
+ {
+ if (defvalue != 0) delete (char*)defvalue;
+ if (stringdef != 0) delete stringdef;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Setting of attributes by DAS
+ ///////////////////////////////////////////////////////////////////////////
+
+ void PropertyImpl::setMany(bool many)
+ {
+ bisMany = many;
+ }
+
+ void PropertyImpl::setReadOnly(bool readonly)
+ {
+ bisReadOnly = readonly;
+ }
+
+ void PropertyImpl::setContainment(bool contains)
+ {
+ if (contains == true && type.isDataType())
+ {
+ return;
+ }
+ bisContainer = contains;
+ if (bisContainer == false && type.isDataObjectType())
+ {
+ bisReference = true;
+ }
+ else
+ {
+ bisReference = false;
+ }
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Setting of defaults by DAS
+ ///////////////////////////////////////////////////////////////////////////
+
+ void PropertyImpl::setDefault(bool b )
+ {
+ setDefaultBoolean(b);
+ }
+
+ void PropertyImpl::setDefault(char c )
+ {
+ setDefaultByte(c);
+ }
+
+ void PropertyImpl::setDefault(wchar_t c )
+ {
+ setDefaultCharacter(c);
+ }
+ void PropertyImpl::setDefault(char* c )
+ {
+ setDefaultCString(c);
+ }
+ void PropertyImpl::setDefault(const SDOString& c)
+ {
+ setDefaultCString(c);
+ }
+ void PropertyImpl::setDefault(short s )
+ {
+ setDefaultShort(s);
+ }
+#if __WORDSIZE !=64
+ void PropertyImpl::setDefault(long i )
+ {
+ setDefaultInteger(i);
+ }
+#endif
+ void PropertyImpl::setDefault(int64_t i )
+ {
+ setDefaultLong(i);
+ }
+ void PropertyImpl::setDefault(float f )
+ {
+ setDefaultFloat(f);
+ }
+ void PropertyImpl::setDefault(long double d )
+ {
+ setDefaultDouble(d);
+ }
+ void PropertyImpl::setDefault(const SDODate d )
+ {
+ setDefaultDate(d);
+ }
+ void PropertyImpl::setDefault(const char* c , unsigned int len)
+ {
+ setDefaultBytes(c, len);
+ }
+ void PropertyImpl::setDefault(const SDOString& c , unsigned int len)
+ {
+ setDefaultBytes(c, len);
+ }
+
+ void PropertyImpl::setDefault(const wchar_t* c, unsigned int len )
+ {
+ setDefaultString(c, len);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Substitution groups.
+ ///////////////////////////////////////////////////////////////////////////
+ const Type* PropertyImpl::getSubstitutionType(const char* inname) const
+ {
+ for (int i=0;i<substitutions.size();i++)
+ {
+ if (!strcmp(inname, substitutions[i].name.c_str()))
+ {
+ return substitutions[i].type;
+ }
+ }
+ return 0;
+ }
+
+ const char * PropertyImpl::getSubstitutionName(unsigned int index) const
+ {
+ if (index < getSubstitutionCount())
+ {
+ return (substitutions[index].name.c_str());
+ }
+ SDO_THROW_EXCEPTION("getSubstitutionName", SDOIndexOutOfRangeException,
+ "index out of range");
+ }
+
+ unsigned int PropertyImpl::getSubstitutionCount(void) const
+ {
+ return substitutions.size();
+ }
+
+ const Type* PropertyImpl::getSubstitutionType(unsigned int index) const
+ {
+ if (index < getSubstitutionCount())
+ {
+ return (substitutions[index].type);
+ }
+ return 0;
+ }
+
+ void PropertyImpl::setSubstitution(DataFactoryPtr mdg, const char* alias,
+ const Type& substype)
+ {
+ substitutions.push_back(Substitution(mdg,alias,substype));
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the name of the property.
+ ///////////////////////////////////////////////////////////////////////////
+ const char* PropertyImpl::getName() const
+ {
+ return name.c_str();
+ }
+
+// const SDOString& PropertyImpl::getName() const
+// {
+// return name;
+// }
+
+ void PropertyImpl::setAlias(const char* alias)
+ {
+ char* tmp = new char[strlen(alias)+1];
+ strcpy(tmp,alias);
+ aliases.push_back(tmp);
+ }
+
+ void PropertyImpl::setAlias(const SDOString& alias)
+ {
+ aliases.push_back(alias);
+ }
+
+ const char* PropertyImpl::getAlias(unsigned int index) const
+ {
+ if (index < aliases.size())
+ {
+ return aliases[index].c_str();
+ }
+ return name.c_str();
+ }
+
+ unsigned int PropertyImpl::getAliasCount() const
+ {
+ return aliases.size();
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the type of the property.
+ ///////////////////////////////////////////////////////////////////////////
+ const Type& PropertyImpl::getType() const
+ {
+ return (Type&)type;
+ }
+
+ const Type::Types PropertyImpl::getTypeEnum() const
+ {
+ return type.getTypeEnum();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the type of the property.
+ ///////////////////////////////////////////////////////////////////////////
+ const TypeImpl* PropertyImpl::getTypeImpl() const
+ {
+ return &type;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns whether the property is many-valued.
+ ///////////////////////////////////////////////////////////////////////////
+ bool PropertyImpl::isMany() const
+ {
+ if(getTypeImpl()->isFromList())return true;
+ return bisMany;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns whether the property is containment.
+ ///////////////////////////////////////////////////////////////////////////
+ bool PropertyImpl::isContainment() const
+ {
+ return bisContainer;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns whether the property is containment.
+ ///////////////////////////////////////////////////////////////////////////
+ bool PropertyImpl::isReference() const
+ {
+ return bisReference;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the containing type of this property.
+ ///////////////////////////////////////////////////////////////////////////
+ const Type& PropertyImpl::getContainingType() const
+ {
+ return containertype;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the opposite.
+ ///////////////////////////////////////////////////////////////////////////
+ const Property* PropertyImpl::getOpposite() const
+ {
+ return opposite;
+ }
+
+ void PropertyImpl::setOpposite(const Property* opp)
+ {
+ opposite = opp;
+ }
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the default value this property will have in a
+ // data object where the property hasn't been set.
+ ///////////////////////////////////////////////////////////////////////////
+
+ // check whether the property has a default first
+ bool PropertyImpl::isDefaulted() const
+ {
+ return bDefaulted;
+ }
+
+ const char* PropertyImpl::getCStringDefault() const
+ {
+ PropertyImpl* p = (PropertyImpl*)this;
+ return getTypeImpl()->convertToCString(defvalue, &(p->stringdef), defvaluelength);
+ }
+ bool PropertyImpl::getBooleanDefault() const
+ {
+ return getTypeImpl()->convertToBoolean(defvalue,defvaluelength);
+ }
+ char PropertyImpl::getByteDefault() const
+ {
+ return getTypeImpl()->convertToByte(defvalue,defvaluelength);
+ }
+ wchar_t PropertyImpl::getCharacterDefault() const
+ {
+ return getTypeImpl()->convertToCharacter(defvalue,defvaluelength);
+ }
+ short PropertyImpl::getShortDefault() const
+ {
+ return getTypeImpl()->convertToShort(defvalue,defvaluelength);
+ }
+ long PropertyImpl::getIntegerDefault() const
+ {
+ return getTypeImpl()->convertToInteger(defvalue,defvaluelength);
+ }
+ int64_t PropertyImpl::getLongDefault() const
+ {
+ return getTypeImpl()->convertToLong(defvalue,defvaluelength);
+ }
+ float PropertyImpl::getFloatDefault() const
+ {
+ return getTypeImpl()->convertToFloat(defvalue,defvaluelength);
+ }
+ long double PropertyImpl::getDoubleDefault() const
+ {
+ return getTypeImpl()->convertToDouble(defvalue,defvaluelength);
+ }
+ const SDODate PropertyImpl::getDateDefault() const
+ {
+ return getTypeImpl()->convertToDate(defvalue,defvaluelength);
+ }
+ unsigned int PropertyImpl::getStringDefault(wchar_t* val, unsigned int max) const
+ {
+ if (val == 0 || max == 0) return defvaluelength;
+ return getTypeImpl()->convertToString(defvalue, val, defvaluelength, max);
+
+ }
+ unsigned int PropertyImpl::getBytesDefault(char* val, unsigned int max) const
+ {
+ if (val == 0 || max == 0) return defvaluelength;
+ return getTypeImpl()->convertToBytes(defvalue, val, defvaluelength, max);
+ }
+
+ unsigned int PropertyImpl::getBytesDefault(SDOString& val, unsigned int max) const
+ {
+ if (max == 0) return defvaluelength;
+ return getTypeImpl()->convertToBytes(defvalue, val, defvaluelength, max);
+ }
+
+ unsigned int PropertyImpl::getDefaultLength() const
+ {
+ return defvaluelength;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // sets the default value by type
+ ///////////////////////////////////////////////////////////////////////////
+
+ void PropertyImpl::setDefaultCString(const char* s)
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,s);
+ }
+ void PropertyImpl::setDefaultCString(const SDOString& s)
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue, s);
+ }
+ void PropertyImpl::setDefaultString( const wchar_t* c , unsigned int len )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,c, len);
+ }
+ void PropertyImpl::setDefaultBytes( const char* c , unsigned int len )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,c, len);
+ }
+ void PropertyImpl::setDefaultBytes(const SDOString& c , unsigned int len)
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,c, len);
+ }
+ void PropertyImpl::setDefaultBoolean( const bool b )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,b);
+ }
+ void PropertyImpl::setDefaultByte( const char c )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,c);
+ }
+ void PropertyImpl::setDefaultCharacter( const wchar_t c)
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,c);
+ }
+ void PropertyImpl::setDefaultShort( const short s )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,s);
+ }
+ void PropertyImpl::setDefaultInteger( const long i )
+ {
+ bDefaulted=true;
+#if __WORDSIZE ==64
+ defvaluelength = getTypeImpl()->convert(&defvalue,(int64_t)i);
+#else
+ defvaluelength = getTypeImpl()->convert(&defvalue,i);
+#endif
+ }
+ void PropertyImpl::setDefaultLong(const int64_t l)
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,l);
+ }
+ void PropertyImpl::setDefaultFloat( const float f )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,f);
+ }
+ void PropertyImpl::setDefaultDouble( const long double d )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convert(&defvalue,d);
+ }
+ void PropertyImpl::setDefaultDate( const SDODate d )
+ {
+ bDefaulted=true;
+ defvaluelength = getTypeImpl()->convertDate(&defvalue,d);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns true if values for this Property cannot be modified using the SDO APIs.
+ // When true, DataObject.set(Property property, Object value) throws an exception.
+ // Values may change due to other factors, such as services operating on DataObjects.
+ ///////////////////////////////////////////////////////////////////////////
+ bool PropertyImpl::isReadOnly() const
+ {
+ return bisReadOnly;
+ }
+
+};
+};
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.h
new file mode 100644
index 0000000000..3b0838db2c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyImpl.h
@@ -0,0 +1,291 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/06 12:58:18 $ */
+
+#ifndef _PROPERTYIMPL_H_
+#define _PROPERTYIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/DASProperty.h"
+#include "commonj/sdo/SDODate.h"
+#include "commonj/sdo/DataFactory.h"
+
+namespace commonj{
+namespace sdo{
+
+class Type;
+class TypeImpl;
+class DataObject;
+
+/**
+ * A substitution is a class which permits a property to be a substitute for
+ * another one.
+ * A substitution is a definition of a type which is allowed to be placed in the
+ * data object in place of a property of another type.
+ */
+
+class Substitution
+{
+public:
+ Substitution();
+ Substitution(DataFactoryPtr mdg, const SDOString& inname,
+ const Type& intype);
+ Substitution(const Substitution& s);
+ virtual ~Substitution();
+ const Type* type;
+ SDOString name;
+};
+
+
+
+/** PropertyImpl implements the abstract class Property.
+ *
+ * A representation of a property in the type of a data object.
+ */
+
+class PropertyImpl :public DASProperty
+{
+ public:
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Construction for the DAS
+ ///////////////////////////////////////////////////////////////////////////
+
+ SDO_API PropertyImpl(
+ const Type& cont,
+ const char* name,
+ const TypeImpl& type,
+ bool many = false,
+ bool ro = false,
+ bool contain = false);
+
+ SDO_API PropertyImpl(const Type& cont,
+ const SDOString& name,
+ const TypeImpl& type,
+ bool many = false,
+ bool ro = false,
+ bool contain = false);
+
+
+
+ virtual SDO_API ~PropertyImpl();
+
+ /**
+ * A Data access service may set the features of this property instead of
+ * passing them as construction parameters.
+ */
+
+ virtual SDO_API void setMany(bool many );
+
+ /**
+ * A Data access service may set the features of this property instead of
+ * passing them as construction parameters.
+ */
+ virtual SDO_API void setReadOnly(bool rdonly);
+
+ /**
+ * A Data access service may set the features of this property instead of
+ * passing them as construction parameters.
+ */
+ virtual SDO_API void setContainment(bool contains);
+
+ /**
+ * A Data access service may set the features of this property instead of
+ * passing them as construction parameters.
+ */
+
+ virtual SDO_API bool isDefaulted() const;
+
+ /**
+ * A Data access service sets the default value.
+ */
+
+ virtual SDO_API void setDefault(bool b );
+ virtual SDO_API void setDefault(char c);
+ virtual SDO_API void setDefault(wchar_t c);
+ virtual SDO_API void setDefault(char* c);
+ virtual SDO_API void setDefault(const SDOString& c);
+ virtual SDO_API void setDefault(short s);
+#if __WORDSIZE !=64
+ virtual SDO_API void setDefault(long l);
+#endif
+ virtual SDO_API void setDefault(int64_t i);
+ virtual SDO_API void setDefault(float f);
+ virtual SDO_API void setDefault(long double d);
+ virtual SDO_API void setDefault(const SDODate d);
+ virtual SDO_API void setDefault(const wchar_t* c, unsigned int len);
+ virtual SDO_API void setDefault(const char* c, unsigned int len);
+ virtual SDO_API void setDefault(const SDOString& c, unsigned int len);
+
+
+
+
+
+ /**
+ * Returns the name of the property.
+ */
+
+ virtual const SDO_API char* getName() const;
+
+ /** getAlias returns the n'th alias
+ *
+ * This method returns a const char* corresponding to the
+ * alias at index n of the list of aliases. Use getAliasCount to
+ * discover the size of the list.
+ */
+
+ virtual const char* getAlias(unsigned int index = 0) const ;
+ virtual unsigned int getAliasCount() const ;
+ virtual void setAlias(const char* alias) ;
+ virtual void setAlias(const SDOString& alias) ;
+
+ /**
+ *
+ * SubstitutionGroup support.
+ */
+
+ virtual const Type* getSubstitutionType(const char* name) const ;
+ virtual unsigned int getSubstitutionCount(void) const ;
+ virtual const Type* getSubstitutionType(unsigned int index) const ;
+ virtual const char* getSubstitutionName(unsigned int index) const ;
+ virtual void setSubstitution(DataFactoryPtr mdg, const char* alias,
+ const Type& substype) ;
+
+
+ /** getType returns the type of this property
+ *
+ * This method returns the type, which may be a DataType or a
+ * DataObjectType
+ */
+
+ virtual SDO_API const Type& getType() const;
+
+ virtual SDO_API const Type::Types getTypeEnum() const;
+
+ virtual SDO_API const TypeImpl* getTypeImpl() const;
+
+ /**
+ * Returns whether the property is many-valued.
+ */
+ virtual bool SDO_API isMany() const;
+
+ /**
+ * Returns whether the property is containment.
+ */
+ virtual bool SDO_API isContainment() const;
+
+ /**
+ * Returns whether the property is a reference.
+ */
+ virtual bool SDO_API isReference() const;
+
+ /**
+ * Returns the containing type of this property.
+ */
+ virtual SDO_API const Type& getContainingType() const;
+
+ /**
+ * returns the opposite property, or zero if there is none
+ */
+ virtual SDO_API const Property* getOpposite() const;
+
+ virtual void setOpposite(const Property* opp);
+
+
+ /**
+ * setters for type primitive types and 'an object'
+ */
+
+ SDO_API void setDefaultCString( const char* s);
+ SDO_API void setDefaultCString(const SDOString& s);
+ SDO_API void setDefaultString( const wchar_t* c , unsigned int len );
+ SDO_API void setDefaultBytes( const char* c , unsigned int len );
+ SDO_API void setDefaultBytes(const SDOString& c , unsigned int len);
+ SDO_API void setDefaultBoolean( const bool b );
+ SDO_API void setDefaultByte( const char c );
+ SDO_API void setDefaultCharacter( const wchar_t c);
+ SDO_API void setDefaultShort( const short s );
+ SDO_API void setDefaultInteger( const long i );
+ SDO_API void setDefaultLong(const int64_t l);
+ SDO_API void setDefaultFloat( const float f );
+ SDO_API void setDefaultDouble( const long double d );
+ SDO_API void setDefaultDate( const SDODate d );
+
+ SDO_API const char* getCStringDefault() const;
+ SDO_API unsigned int getStringDefault(wchar_t* val, unsigned int max) const;
+ SDO_API unsigned int getBytesDefault(char* val, unsigned int max) const;
+ SDO_API unsigned int getBytesDefault(SDOString& val, unsigned int max) const;
+ SDO_API bool getBooleanDefault() const;
+ SDO_API char getByteDefault() const;
+ SDO_API wchar_t getCharacterDefault() const;
+ SDO_API short getShortDefault() const;
+ SDO_API long getIntegerDefault() const;
+ SDO_API int64_t getLongDefault() const;
+ SDO_API float getFloatDefault() const;
+ SDO_API long double getDoubleDefault() const;
+ SDO_API const SDODate getDateDefault() const;
+ SDO_API unsigned int getDefaultLength() const;
+
+ /**
+ * Returns true if values for this Property cannot be modified using the SDO APIs.
+ * When true, DataObject.set(Property property, Object value) throws an exception.
+ * Values may change due to other factors, such as services operating on DataObjects.
+ */
+ virtual bool SDO_API isReadOnly() const;
+
+ SDO_API PropertyImpl(const PropertyImpl& p);
+
+ private:
+
+ // clear the default value
+ void deleteValue();
+
+ bool bisReadOnly;
+ bool bisContainer;
+ bool bisReference;
+ bool bisMany;
+
+ bool bDefaulted;
+
+ const TypeImpl& type;
+ const Type& containertype;
+ const Property* opposite;
+ SDOString name;
+ char* stringdef;
+
+ void* defvalue;
+ // in the event of a bytes and string, this holds the length
+ unsigned int defvaluelength;
+
+ // alias support
+ // std::vector<char*> aliases;
+ std::vector<SDOString> aliases;
+
+ std::vector<Substitution> substitutions;
+
+ typedef std::list<PropertyImpl*> REFEREE_LIST;
+ REFEREE_LIST references;
+
+
+};
+};
+};
+
+#endif //_PROPERTYIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.cpp
new file mode 100644
index 0000000000..5da678f10b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.cpp
@@ -0,0 +1,93 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef SDO_EXPORTS
+ #define SDO_EXPORTS
+#endif
+
+#include "commonj/sdo/export.h"
+#include <iostream>
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/PropertyImpl.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/PropertyList.h"
+
+#include "commonj/sdo/Logger.h"
+
+namespace commonj{
+namespace sdo {
+
+class Property;
+
+SDO_API PropertyList::PropertyList(PROPERTY_LIST p)
+{
+ PROPERTY_LIST::iterator i;
+ for (i = p.begin(); i != p.end(); ++i)
+ {
+ plist.insert(plist.end(),(PropertyImpl*)(*i));
+ }
+}
+
+SDO_API PropertyList::PropertyList(PROPERTY_VECTOR p)
+{
+ plist = PROPERTY_VECTOR(p);
+}
+
+SDO_API PropertyList::PropertyList(const PropertyList &pin)
+{
+ plist = PROPERTY_VECTOR(pin.getVec());
+}
+
+SDO_API PropertyList::PropertyList()
+{
+}
+
+SDO_API PropertyList::~PropertyList()
+{
+}
+
+SDO_API Property& PropertyList::operator[] (int pos)
+{
+ return *(plist[pos]);
+}
+
+SDO_API const Property& PropertyList::operator[] (int pos) const
+{
+ return *(plist[pos]);
+}
+
+SDO_API int PropertyList::size ()
+{
+ return plist.size();
+}
+
+SDO_API void PropertyList::insert(const Property& p)
+{
+ PropertyImpl* pi = (PropertyImpl*)&p;
+ plist.insert(plist.end(),new PropertyImpl(*pi));
+}
+
+PROPERTY_VECTOR PropertyList::getVec() const
+{
+ return plist;
+}
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.h
new file mode 100644
index 0000000000..61146f18db
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertyList.h
@@ -0,0 +1,87 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _PROPERTYLIST_H_
+#define _PROPERTYLIST_H_
+
+
+#include "commonj/sdo/export.h"
+
+#include <vector>
+#include <list>
+
+
+
+
+namespace commonj{
+namespace sdo{
+
+ class PropertyImpl;
+ class Property;
+ typedef std::vector<PropertyImpl*> PROPERTY_VECTOR;
+#ifndef PROPERTY_LIST
+ typedef std::list<PropertyImpl*> PROPERTY_LIST;
+#endif
+
+/**
+ * This class provides for iteration over a collection of Properties
+ */
+
+class PropertyList
+{
+private:
+ PROPERTY_VECTOR plist;
+ PROPERTY_VECTOR getVec() const;
+public:
+ SDO_API PropertyList(PROPERTY_VECTOR p);
+ SDO_API PropertyList(PROPERTY_LIST p);
+ SDO_API PropertyList(const PropertyList &pin);
+ SDO_API PropertyList();
+ virtual SDO_API ~PropertyList();
+
+ /** []
+ *
+ * Operator to allow reference to an element of the list.
+ * There are separate versions for const and variable lists
+ */
+
+ SDO_API Property& operator[] (int pos);
+ SDO_API const Property& operator[] (int pos) const;
+
+ /** size gives the number of elements.
+ *
+ * size() returns the number of elements in the list.
+ */
+
+ SDO_API int size ();
+
+ /** insert adds an element to the list
+ *
+ * insert appends an item to the list. This is not
+ * of any use to a client application, as these lists
+ * are always supplied by the library, and are const.
+ */
+
+ SDO_API void insert (const Property& p);
+};
+};
+};
+
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.cpp
new file mode 100644
index 0000000000..17ac9de09e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.cpp
@@ -0,0 +1,42 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/PropertySetting.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ PropertySetting::PropertySetting()
+ : dataObject(NULL), isNULL(false), isIDREF(false), pendingUnknownType(false)
+
+ {
+ }
+
+ PropertySetting::PropertySetting(DataObjectPtr dataObj, const SDOXMLString& propertyName,
+ bool isNull, bool IDREF)
+ : dataObject(dataObj), name(propertyName), isNULL(isNull),isIDREF(IDREF),pendingUnknownType(false)
+ {
+ }
+
+ PropertySetting::~PropertySetting()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.h
new file mode 100644
index 0000000000..4a87e1bc9e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/PropertySetting.h
@@ -0,0 +1,61 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _PROPERTYSETTING_H_
+#define _PROPERTYSETTING_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/DataObject.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * PropertySetting holds some information about properties as
+ * they are read by the parser, for subsequent creation
+ */
+ class PropertySetting
+ {
+
+ public:
+ PropertySetting();
+ PropertySetting(DataObjectPtr dataObj,
+ const SDOXMLString& propertyName,
+ bool isNull=false,
+ bool isIDREF=false);
+ virtual ~PropertySetting();
+
+ SDOXMLString name;
+ SDOXMLString value;
+ DataObjectPtr dataObject;
+ bool isIDREF;
+ bool isNULL;
+ bool pendingUnknownType;
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_PROPERTYSETTING_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.cpp
new file mode 100644
index 0000000000..e763ad5a9a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.cpp
@@ -0,0 +1,74 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/RefCountingObject.h"
+#include "commonj/sdo/Logging.h"
+
+#include <iostream>
+using namespace std;
+
+namespace commonj{
+namespace sdo{
+
+long RefCountingObject::allObs = 0;
+
+RefCountingObject::RefCountingObject()
+: refCount(0)
+{
+ LOGINFO_2(HIGHVOLUME,"RCO:CREATE:%p Count:%ld",this, ++allObs);
+}
+
+RefCountingObject::RefCountingObject(const RefCountingObject& rc)
+: refCount(0)
+{
+ LOGINFO_2(HIGHVOLUME,"RCO:COPCON:%p Count:%ld",this,++allObs);
+}
+
+RefCountingObject& RefCountingObject::operator=(const RefCountingObject& rc)
+{
+ return *this;
+}
+
+RefCountingObject::~RefCountingObject()
+{
+ LOGINFO_2(HIGHVOLUME,"RCO:DELETE:%p Count:%ld",this, --allObs);
+ //
+ //if (allObs < 0)
+ // LOGINFO(HIGHVOLUME,"RCO:More objects deleted than created");
+ //if (allObs == 0)
+ // LOGINFO(HIGHVOLUME,"RCO: All data objects deleted");;
+}
+
+void RefCountingObject::addRef()
+
+{
+
+ ++refCount;
+ LOGINFO_2(HIGHVOLUME,"RCO:ADDREF:%p:%ld",this,refCount);
+}
+
+void RefCountingObject::releaseRef()
+{
+ LOGINFO_2(HIGHVOLUME,"RCO:DECREF:%p:%ld",this,refCount-1);
+ if (--refCount == 0) delete this;
+}
+
+
+};
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.h
new file mode 100644
index 0000000000..2d5724a8f5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingObject.h
@@ -0,0 +1,59 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _REFCOUNTINGOBJECT_H
+#define _REFCOUNTINGOBJECT_H
+
+
+#include "commonj/sdo/export.h"
+
+
+namespace commonj {
+ namespace sdo {
+
+/**
+ * RefcountingObject is the base class for all objects in SDO
+ * These objects keep a count of references to themselves, then
+ * free themselves when they are unused.
+ */
+ class RefCountingObject
+ {
+ public:
+ SDO_API RefCountingObject();
+ SDO_API RefCountingObject(const RefCountingObject& rc);
+ SDO_API RefCountingObject& operator=(const RefCountingObject& rc);
+ SDO_API virtual ~RefCountingObject() = 0;
+/**
+ * Add to the reference count - a new pointer has been created.
+ */
+ SDO_API void addRef();
+/**
+ * Subtract from the the reference count - a reference has dropped.
+ */
+ SDO_API void releaseRef();
+
+ private:
+ unsigned int refCount;
+ static long allObs;
+ };
+
+ };
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.cpp
new file mode 100644
index 0000000000..a9dabd10b4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.cpp
@@ -0,0 +1,153 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/DataGraph.h"
+#include "commonj/sdo/ChangeSummary.h"
+#include "commonj/sdo/XMLDocument.h"
+#include "commonj/sdo/XSDHelper.h"
+#include "commonj/sdo/XMLHelper.h"
+
+namespace commonj{
+ namespace sdo{
+
+ // officially, there is nothing here- but if I dont use the overrides in
+ // the templates, then they dont get generated.
+ void Test ()
+ {
+
+#if defined(WIN32) || defined (_WINDOWS)
+ /* 1) construct */
+ DataFactoryPtr fptr = DataFactory::getDataFactory();
+
+ /* 2) use the & operator= */
+ fptr = DataFactory::getDataFactory();
+
+ /* 3) copy */
+ DataFactoryPtr fptr2 = fptr;
+
+ /* 4) use the == and ! */
+ if (fptr2 == fptr || !fptr){}
+
+ /* 5) Use the T* and * */
+ DataFactory* dmsf = fptr;
+ DataFactory& dmsr = *fptr;
+
+ /* 1) construct */
+ DataFactoryPtr dfptr(fptr);
+
+ /* 3) copy */
+ DataFactoryPtr dfptr2 = dfptr;
+
+ /* 2) use the & operator= */
+ dfptr = dfptr2;
+
+ /* 4) use the == and ! */
+ if (dfptr2 == dfptr || !dfptr){}
+
+ /* 5) Use the T* and * */
+ DataFactory* ddmsf = dfptr;
+ DataFactory& ddmsr = *dfptr;
+
+ /* 6) Use the -> */
+ DataObjectPtr dptr = dfptr->create("nothing","nowhere");
+
+ /* and agin to catch the = */
+ dptr = fptr->create("nothing","nowhere");
+
+ DataObjectPtr dptr2 = dptr;
+
+ /* Use the T* and * */
+ DataObject* dof = dptr;
+ DataObject& dor = *dptr;
+
+ if (dptr2 == dptr || !dptr){}
+
+
+ ChangeSummaryPtr cptr = dptr->getChangeSummary();
+ cptr = dptr->getChangeSummary();
+ ChangeSummaryPtr cptr2 = cptr;
+
+ ChangeSummary* cof = cptr;
+ ChangeSummary& cop = *cptr;
+
+
+ if (cptr2 == cptr || !cptr){}
+
+ cptr->endLogging();
+
+ SequencePtr sptr = dptr->getSequence();
+ sptr = dptr->getSequence();
+ SequencePtr sptr2 = sptr;
+
+ Sequence* sof = sptr;
+ Sequence& sop = *sptr;
+
+
+ if (sptr2 == sptr || !sptr){}
+
+ sptr->getBooleanValue(0);
+
+
+ // Generate code for XMLDocumentPtr
+ XMLDocumentPtr xmldocptr1 = 0;
+ XMLDocumentPtr xmldocptr2 = xmldocptr1;
+ xmldocptr1 = xmldocptr2;
+ if (xmldocptr2 == xmldocptr1 || !xmldocptr1){}
+ XMLDocument* xmldocp = xmldocptr1;
+ XMLDocument& xmldocref = *xmldocptr2;
+ xmldocptr1->getEncoding();
+
+ // Generate code for XSDHelperPtr
+ XSDHelperPtr xsdhptr1 = 0;
+ XSDHelperPtr xsdhptr2 = xsdhptr1;
+ xsdhptr1 = xsdhptr2;
+ if (xsdhptr2 == xsdhptr1 || !xsdhptr1){}
+ XSDHelper* xsdhp = xsdhptr1;
+ XSDHelper& xsdhref = *xsdhptr2;
+ xsdhptr1->define("dummy");
+
+ // Generate code for XMLHelperPtr
+ XMLHelperPtr xmlhptr1 = 0;
+ XMLHelperPtr xmlhptr2 = xmlhptr1;
+ xmlhptr1 = xmlhptr2;
+ if (xmlhptr2 == xmlhptr1 || !xmlhptr1){}
+ XMLHelper* xmlhp = xmlhptr1;
+ XMLHelper& xmlhref = *xmlhptr2;
+ xmlhptr1->load("dummy");
+
+ // Generate code for DataGraphPtr
+ DataGraphPtr dgptr1 = 0;
+ DataGraphPtr dgptr2 = dgptr1;
+ dgptr1 = dgptr2;
+ if (dgptr2 == dgptr1 || !dgptr1){}
+ DataGraph* dghp = dgptr1;
+ DataGraph& dgref = *dgptr2;
+ dgptr1->getRootObject();
+
+#endif
+
+ }
+ };
+};
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.h
new file mode 100644
index 0000000000..34d534d1c0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.h
@@ -0,0 +1,181 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _REFCOUNTINGPOINTER_H
+#define _REFCOUNTINGPOINTER_H
+
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+#include <iostream>
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * RefcountingPointer is a template for all SDO pointers.
+ * The ref count increases with each use, and drops when one of these
+ * goes out of scope.
+ * Refcounting pointers are a lot like smart pointers, however in this
+ * implementation there is a cast method to a void*, so unlike real
+ * smart pointers, a user might call "delete mypointer", which would
+ * compile, but cause a crash.
+ * RefCountingPointers do not need to be deleted.
+ */
+
+template <class T>
+class RefCountingPointer {
+ public:
+ /*SDO_API*/ RefCountingPointer(T* realPtr = 0);
+ /*SDO_API*/ RefCountingPointer(const RefCountingPointer& rhs);
+ /*SDO_API*/ ~RefCountingPointer();
+ /*SDO_API*/ RefCountingPointer& operator=(const RefCountingPointer& rhs);
+ /*SDO_API*/ bool operator==(RefCountingPointer& test) const;
+ /*SDO_API*/ T* operator->() const;
+ /*SDO_API*/ T& operator*() const;
+ /*SDO_API*/ bool operator!() const;
+
+#ifdef MFT
+ // MFT == member function templates
+ // Notes on the items below.
+ // In our code, we use subclasses to expose the API, and super
+ // classes to implement. E,g DataObject and DataObjectImpl.
+ // In some cases, we know that the DataObject given to us is a
+ // DataObjectImpl, and cast it. With RefCountingPointers, however,
+ // the cast cannot work, as the RefCountingPointer to the superclass
+ // is not related to the RCP to the subclass. Recent changes in the
+ // C++ language allow this to work by defining an operator which
+ // causes a pointer of the other type to be returned, as long as pointee
+ // is acceptable as a parameter to the cosntructor of the other type
+ // of pointer. This works in C++.NET, but not in C++6:
+ operator RefCountingPointer<otherType>()
+ {
+ return RefCountingPointer<otherType>(pointee);
+ }
+
+ // Since we are using C6, a possible workround is to provide a method
+ // which returns the dumb pointer, then construct a pointer to the
+ // base class from the pointer returned. This is that the operator T* does.
+ // The code in DataObject could be simpler if we used C7,and we should
+ // discusss changing.
+#else
+ operator T*() {return pointee;}
+#endif
+
+ template <class otherType>
+ operator RefCountingPointer<otherType>()
+ {
+ return RefCountingPointer<otherType>(pointee);
+ }
+
+ private:
+ T *pointee;
+ void init();
+};
+
+
+
+template<class T>
+void RefCountingPointer<T>::init()
+{
+ if (pointee == 0) return;
+ pointee->addRef();
+}
+
+template<class T>
+/*SDO_API*/ RefCountingPointer<T>::RefCountingPointer(T* realPtr)
+:pointee(realPtr)
+{
+ init();
+}
+
+template<class T>
+/*SDO_API*/ RefCountingPointer<T>::RefCountingPointer(const RefCountingPointer& rhs)
+: pointee(rhs.pointee)
+{
+ init();
+}
+
+template<class T>
+/*SDO_API*/ RefCountingPointer<T>::~RefCountingPointer()
+{
+ if (pointee)pointee->releaseRef();
+}
+
+template<class T>
+/*SDO_API*/ RefCountingPointer<T>& RefCountingPointer<T>::operator=(const RefCountingPointer& rhs)
+{
+ if (pointee != rhs.pointee)
+ {
+ T *oldP = pointee;
+ pointee = rhs.pointee;
+ init();
+ if (oldP) oldP->releaseRef();
+ }
+ return *this;
+}
+
+template<class T>
+/*SDO_API*/ bool RefCountingPointer<T>::operator!() const
+{
+ return (pointee == 0);
+}
+
+template<class T>
+/*SDO_API*/ bool RefCountingPointer<T>::operator==(RefCountingPointer& test) const
+{
+ return (pointee == test.pointee);
+}
+
+template<class T>
+/*SDO_API*/ T* RefCountingPointer<T>::operator->() const
+{
+ if (pointee == 0)
+ SDO_THROW_EXCEPTION("Pointer",SDONullPointerException, "");
+ return pointee;
+}
+
+template<class T>
+/*SDO_API*/ T& RefCountingPointer<T>::operator*() const
+{
+ return *pointee;
+}
+
+class DataObject;
+typedef RefCountingPointer<DataObject> DataObjectPtr;
+class DataGraph;
+typedef RefCountingPointer<DataGraph> DataGraphPtr;
+class DataFactory;
+typedef RefCountingPointer<DataFactory> DataFactoryPtr;
+class Sequence;
+typedef Sequence* SequencePtr;
+class ChangeSummary;
+typedef ChangeSummary* ChangeSummaryPtr;
+class XMLDocument;
+typedef RefCountingPointer<XMLDocument> XMLDocumentPtr;
+class XSDHelper;
+typedef RefCountingPointer<XSDHelper> XSDHelperPtr;
+class XMLHelper;
+typedef RefCountingPointer<XMLHelper> XMLHelperPtr;
+
+};
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.cpp
new file mode 100644
index 0000000000..921b13fe02
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.cpp
@@ -0,0 +1,49 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SAX2Attribute.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SAX2Attribute holds an attribute supplied by the SAX2 parser.
+ */
+ SAX2Attribute::SAX2Attribute()
+ {
+ }
+
+ SAX2Attribute::SAX2Attribute(const xmlChar **attribute) // localname/prefix/URI/value/end
+ {
+ name = attribute[0];
+ prefix = attribute[1];
+ uri = attribute[2];
+ value = SDOXMLString(attribute[3],0, (int)(attribute[4] - attribute[3]));
+ }
+
+ SAX2Attribute::~SAX2Attribute()
+ {
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.h
new file mode 100644
index 0000000000..a8657ab6ef
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attribute.h
@@ -0,0 +1,64 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SAX2ATTRIBUTE_H_
+#define _SAX2ATTRIBUTE_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLString.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SAX2Attribute holds an attribute supplied by the SAX2 parser.
+ */
+
+ class SAX2Attribute
+ {
+
+ public:
+
+ SAX2Attribute();
+ SAX2Attribute(const xmlChar **attribute);
+
+ virtual ~SAX2Attribute();
+
+ const SDOXMLString& getName() const {return name;}
+ const SDOXMLString& getPrefix() const {return prefix;}
+ const SDOXMLString& getUri() const {return uri;}
+ const SDOXMLString& getValue() const {return value;}
+
+
+ private:
+ SDOXMLString name;
+ SDOXMLString prefix;
+ SDOXMLString uri;
+ SDOXMLString value;
+
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif //_SAX2ATTRIBUTE_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp
new file mode 100644
index 0000000000..145f91ed1d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.cpp
@@ -0,0 +1,96 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/07 13:35:33 $ */
+
+#include "commonj/sdo/SAX2Attributes.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SAX2Attributes holds a list of attributes supplied by the SAX2 parser.
+ */
+ SAX2Attributes::SAX2Attributes(
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attrs) // localname/prefix/URI/value/end
+ {
+ for (int i=0; i < nb_attributes*5; i+=5)
+ {
+ attributes.insert(attributes.end(), SAX2Attribute(&attrs[i]));
+ }
+ }
+
+ SAX2Attributes::SAX2Attributes()
+ {
+ }
+
+ SAX2Attributes::~SAX2Attributes()
+ {
+ }
+
+ const SAX2Attribute& SAX2Attributes::operator[] (int pos) const
+ {
+ return attributes[pos];
+ }
+
+ int SAX2Attributes::size () const
+ {
+ return attributes.size();
+ }
+
+
+ const SDOXMLString SAX2Attributes::nullValue;
+
+ const SDOXMLString& SAX2Attributes::getValue(
+ const SDOXMLString& attributeUri,
+ const SDOXMLString& attributeName) const
+ {
+ for (int i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getUri().equalsIgnoreCase(attributeUri))
+ {
+ if (attributes[i].getName().equalsIgnoreCase(attributeName))
+ {
+ return attributes[i].getValue();
+ }
+ }
+ }
+
+ return nullValue;
+ }
+
+ const SDOXMLString& SAX2Attributes::getValue(
+ const SDOXMLString& attributeName) const
+ {
+ for (int i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getName().equalsIgnoreCase(attributeName))
+ {
+ return attributes[i].getValue();
+ }
+ }
+
+ return nullValue;
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h
new file mode 100644
index 0000000000..0a0ce792a3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Attributes.h
@@ -0,0 +1,74 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/07 13:35:33 $ */
+
+#ifndef _SAX2ATTRIBUTES_H_
+#define _SAX2ATTRIBUTES_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SAX2Attribute.h"
+
+#include "vector"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SAX2Attributes holds a list of attributes supplied by the SAX2 parser.
+ */
+ class SAX2Attributes
+ {
+
+ public:
+
+ SAX2Attributes();
+
+ SAX2Attributes(
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes);
+
+ virtual ~SAX2Attributes();
+
+ const SAX2Attribute& operator[] (int pos) const;
+ int size() const;
+
+ const SDOXMLString& getValue(
+ const SDOXMLString& attributeUri,
+ const SDOXMLString& attributeName) const;
+
+ const SDOXMLString& getValue(
+ const SDOXMLString& attributeName) const;
+
+ private:
+ typedef std::vector<SAX2Attribute> ATTRIBUTE_LIST;
+ ATTRIBUTE_LIST attributes;
+
+ static const SDOXMLString nullValue;
+
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif //_SAX2ATTRIBUTES_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.cpp
new file mode 100644
index 0000000000..ae99c4949e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.cpp
@@ -0,0 +1,93 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SAX2Namespaces.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ SAX2Namespaces::SAX2Namespaces()
+ {
+ }
+
+ SAX2Namespaces::SAX2Namespaces(int nb_namespaces, const xmlChar** namespaces)
+ {
+ for (int i=0; i<nb_namespaces*2; i+=2)
+ {
+ namespaceMap[namespaces[i]] = namespaces[i+1];
+ }
+ }
+
+ SAX2Namespaces::~SAX2Namespaces()
+ {
+ }
+
+ const SDOXMLString* SAX2Namespaces::find(const SDOXMLString& prefix) const
+ {
+ NAMESPACE_MAP::const_iterator nsIter;
+ nsIter = namespaceMap.find(prefix);
+ if(nsIter == namespaceMap.end())
+ {
+ return 0;
+ }
+
+ return &(nsIter->second);
+
+ }
+
+ const SDOXMLString* SAX2Namespaces::findPrefix(const SDOXMLString& uri) const
+ {
+ NAMESPACE_MAP::const_iterator nsIter;
+ for (nsIter = namespaceMap.begin(); nsIter != namespaceMap.end(); nsIter++)
+ {
+ if (nsIter->second.equals(uri))
+ return &(nsIter->first);
+ }
+ return 0;
+ }
+
+ void SAX2Namespaces::merge(const SAX2Namespaces& inspaces)
+ {
+ NAMESPACE_MAP::const_iterator nsIter;
+ for (nsIter = inspaces.namespaceMap.begin();
+ nsIter != inspaces.namespaceMap.end(); nsIter++)
+ {
+ // add will not overwrite if it already exists
+ namespaceMap[nsIter->first] = nsIter->second;
+ }
+ return;
+ }
+
+
+
+ void SAX2Namespaces::add(const SDOXMLString& prefix, const SDOXMLString& uri)
+ {
+ namespaceMap[prefix] = uri;
+ }
+
+ void SAX2Namespaces::empty()
+ {
+ namespaceMap.empty();
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.h
new file mode 100644
index 0000000000..d100889544
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Namespaces.h
@@ -0,0 +1,67 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SAX2NAMESPACES_H_
+#define _SAX2NAMESPACES_H_
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLString.h"
+#include "map"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SAX2Namespaces holds a list of namespaces supplied by the SAX2 parser.
+ */
+
+ class SAX2Namespaces
+ {
+
+ public:
+
+ SAX2Namespaces();
+
+ SAX2Namespaces(int nb_namespaces, const xmlChar** namespaces);
+
+ virtual ~SAX2Namespaces();
+
+ void add(const SDOXMLString& prefix, const SDOXMLString& uri);
+
+ void merge(const SAX2Namespaces& inspaces);
+
+ const SDOXMLString* find(const SDOXMLString& prefix) const;
+ const SDOXMLString* findPrefix(const SDOXMLString& uri) const;
+
+ void empty();
+
+ private:
+ typedef std::map<SDOXMLString, SDOXMLString> NAMESPACE_MAP;
+ NAMESPACE_MAP namespaceMap;
+
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif //_SAX2NAMESPACES_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.cpp
new file mode 100644
index 0000000000..b38c67061d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.cpp
@@ -0,0 +1,516 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+
+#include "commonj/sdo/SAX2Parser.h"
+#include "libxml/SAX2.h"
+#include "commonj/sdo/SDORuntimeException.h"
+using namespace commonj::sdo;
+
+/**
+ * SAX2Parser holds the methods which will be called back.
+ * The implementation uses libxml, which provides callbacks for
+ * errors, warnings , elements etc. These methods correspond to thos
+ * callbacks.
+ * Callbacks from libxml to these C methods are converted into calls
+ * to the C++ equivalent (with some parameter manipulation
+ * In the callback methods the void* ctx is a pointer to 'this' SAX2Parser
+ */
+
+
+
+int sdo_isStandalone(void *ctx)
+{
+ return 0;
+}
+
+
+int sdo_hasInternalSubset(void *ctx)
+{
+ return(0);
+}
+
+int sdo_hasExternalSubset(void *ctx)
+{
+ return(0);
+}
+
+void sdo_internalSubset(void *ctx, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID)
+{
+}
+
+
+void sdo_externalSubset(void *ctx, const xmlChar *name,
+ const xmlChar *ExternalID, const xmlChar *SystemID)
+{
+}
+
+xmlParserInputPtr sdo_resolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
+{
+ return(NULL);
+}
+
+
+xmlEntityPtr sdo_getEntity(void *ctx, const xmlChar *name)
+{
+ return(NULL);
+}
+
+
+xmlEntityPtr sdo_getParameterEntity(void *ctx, const xmlChar *name)
+{
+ return(NULL);
+}
+
+
+void sdo_entityDecl(void *ctx, const xmlChar *name, int type,
+ const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
+{
+}
+
+
+void sdo_attributeDecl(void *ctx, const xmlChar * elem,
+ const xmlChar * name, int type, int def,
+ const xmlChar * defaultValue, xmlEnumerationPtr tree)
+{
+}
+
+void sdo_elementDecl(void *ctx, const xmlChar *name, int type,
+ xmlElementContentPtr content)
+{
+}
+
+
+void sdo_notationDecl(void *ctx, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId)
+{
+}
+
+void sdo_unparsedEntityDecl(void *ctx, const xmlChar *name,
+ const xmlChar *publicId, const xmlChar *systemId,
+ const xmlChar *notationName)
+{
+}
+
+
+void sdo_setDocumentLocator(void *ctx, xmlSAXLocatorPtr loc)
+{
+}
+
+
+void sdo_startDocument(void *ctx)
+{
+ if (!((SAX2Parser*)ctx)->parserError)
+ ((SAX2Parser*)ctx)->startDocument();
+}
+
+
+void sdo_endDocument(void *ctx)
+{
+ if (!((SAX2Parser*)ctx)->parserError)
+ ((SAX2Parser*)ctx)->endDocument();
+}
+
+
+void sdo_startElement(void *ctx, const xmlChar *name, const xmlChar **atts)
+{
+ // ((SAX2Parser*)ctx)->startElement(name, atts);
+}
+
+
+void sdo_endElement(void *ctx, const xmlChar *name)
+{
+ // ((SAX2Parser*)ctx)->endElement(name);
+}
+
+
+void sdo_characters(void *ctx, const xmlChar *ch, int len)
+{
+ if (!((SAX2Parser*)ctx)->parserError)
+ ((SAX2Parser*)ctx)->characters(SDOXMLString(ch, 0, len));
+}
+
+
+void sdo_reference(void *ctx, const xmlChar *name)
+{
+}
+
+
+void sdo_ignorableWhitespace(void *ctx, const xmlChar *ch, int len)
+{
+}
+
+
+void sdo_processingInstruction(void *ctx, const xmlChar *target,
+ const xmlChar *data)
+{
+}
+
+
+void sdo_cdataBlock(void *ctx, const xmlChar *value, int len)
+{
+}
+
+void sdo_comment(void *ctx, const xmlChar *value)
+{
+}
+
+
+void sdo_warning(void *ctx, const char *msg, ...)
+{
+ va_list args;
+ va_start(args, msg);
+ ((SAX2Parser*)ctx)->warning(msg, args);
+ va_end(args);
+}
+
+void sdo_error(void *ctx, const char *msg, ...)
+{
+ va_list args;
+ va_start(args, msg);
+ ((SAX2Parser*)ctx)->error(msg, args);
+ va_end(args);
+
+
+}
+
+void sdo_fatalError(void *ctx, const char *msg, ...)
+{
+ va_list args;
+ va_start(args, msg);
+ ((SAX2Parser*)ctx)->fatalError(msg, args);
+ va_end(args);
+}
+
+
+
+// ===============
+// SAX2 callbacks
+// ===============
+void sdo_startElementNs(void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI,
+ int nb_namespaces,
+ const xmlChar **namespaces,
+ int nb_attributes,
+ int nb_defaulted,
+ const xmlChar **attributes)
+{
+ if (!((SAX2Parser*)ctx)->parserError)
+ ((SAX2Parser*)ctx)->startElementNs(
+ localname,
+ prefix,
+ URI,
+ SAX2Namespaces(nb_namespaces, namespaces),
+ SAX2Attributes(nb_attributes, nb_defaulted, attributes));
+}
+
+
+void sdo_endElementNs(void *ctx,
+ const xmlChar *localname,
+ const xmlChar *prefix,
+ const xmlChar *URI)
+{
+ if (!((SAX2Parser*)ctx)->parserError)
+ ((SAX2Parser*)ctx)->endElementNs(localname, prefix, URI);
+}
+
+
+// The callback method structure
+xmlSAXHandler SDOSAX2HandlerStruct = {
+ sdo_internalSubset,
+ sdo_isStandalone,
+ sdo_hasInternalSubset,
+ sdo_hasExternalSubset,
+ sdo_resolveEntity,
+ sdo_getEntity,
+ sdo_entityDecl,
+ sdo_notationDecl,
+ sdo_attributeDecl,
+ sdo_elementDecl,
+ sdo_unparsedEntityDecl,
+ sdo_setDocumentLocator,
+ sdo_startDocument,
+ sdo_endDocument,
+ sdo_startElement,
+ sdo_endElement,
+ sdo_reference,
+ sdo_characters,
+ sdo_ignorableWhitespace,
+ sdo_processingInstruction,
+ sdo_comment,
+ sdo_warning,
+ sdo_error,
+ sdo_fatalError,
+ sdo_getParameterEntity,
+ sdo_cdataBlock,
+ sdo_externalSubset,
+ XML_SAX2_MAGIC,
+ NULL,
+ sdo_startElementNs,
+ sdo_endElementNs,
+ NULL
+};
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SAX2Parser::SAX2Parser()
+ {
+ setter = 0;
+ parserError = false;
+ currentFile = 0;
+ }
+
+ SAX2Parser::SAX2Parser(ParserErrorSetter* insetter)
+ {
+ setter = insetter;
+ parserError = false;
+ currentFile = 0;
+ }
+
+ SAX2Parser::~SAX2Parser()
+ {
+ // xmlCleanupParser();
+ if (currentFile != 0)delete currentFile;
+
+ }
+
+ const char* SAX2Parser::getCurrentFile() const
+ {
+ return currentFile;
+ }
+
+
+ void SAX2Parser::setCurrentFile(const char* filename)
+ {
+ if (currentFile != 0)
+ {
+ delete currentFile;
+ }
+ currentFile = new char[strlen(filename)+1];
+ strcpy(currentFile,filename);
+ }
+
+ int SAX2Parser::parse(const char* filename)
+ {
+
+ parserError = false;
+ xmlSAXHandlerPtr handler = &SDOSAX2HandlerStruct;
+
+ if (currentFile != 0)
+ {
+ delete currentFile;
+ }
+ currentFile = new char[strlen(filename)+1];
+ strcpy(currentFile,filename);
+
+
+ int rc = xmlSAXUserParseFile(handler, this, filename);
+ if (rc == -1)
+ {
+ sdo_error(this, "xmlSAXUserParseFile returned an error %d", rc);
+ SDO_THROW_EXCEPTION("parse", SDOFileNotFoundException,messageBuffer);
+ }
+ return rc;
+ }
+
+ void SAX2Parser::startDocument()
+ {
+ }
+
+ void SAX2Parser::endDocument()
+ {
+ }
+
+ void SAX2Parser::startElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ }
+
+ void SAX2Parser::endElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI)
+ {
+ }
+
+ void SAX2Parser::characters(const SDOXMLString& chars)
+ {
+ }
+
+
+ void SAX2Parser::warning(const char* msg, va_list args)
+ {
+ // warnings are perhaps too frequent
+ // vsprintf(messageBuffer, msg, args);
+ // if (setter != 0)setter->setError(messageBuffer);
+ }
+
+ void SAX2Parser::fatalError(const char* msg, va_list args)
+ {
+ parserError = true;
+ vsprintf(messageBuffer, msg, args);
+ if (setter != 0)setter->setError(messageBuffer);
+ }
+
+ void SAX2Parser::error(const char* msg, va_list args)
+ {
+ vsprintf(messageBuffer, msg, args);
+ if (setter != 0)setter->setError(messageBuffer);
+ }
+
+
+ void SAX2Parser::stream(std::istream& input)
+ {
+ char buffer[100];
+ xmlSAXHandlerPtr handler = &SDOSAX2HandlerStruct;
+ parserError = false;
+ xmlParserCtxtPtr ctxt;
+
+ input.read(buffer,4);
+ ctxt = xmlCreatePushParserCtxt(handler, this,
+ buffer, input.gcount(), NULL);
+
+ while (input.read(buffer,100))
+ {
+ xmlParseChunk(ctxt, buffer, input.gcount(), 0);
+
+ }
+
+ xmlParseChunk(ctxt, buffer, input.gcount(), 1);
+ xmlFreeParserCtxt(ctxt);
+
+ if (parserError)
+ {
+ SDO_THROW_EXCEPTION("stream", SDOXMLParserException,messageBuffer);
+ }
+
+ }
+
+ int SAX2Parser::parse_twice(const char* filename)
+ {
+ parserError = false;
+ xmlSAXHandlerPtr handler = &SDOSAX2HandlerStruct;
+
+ setCurrentFile(filename);
+
+ int rc = xmlSAXUserParseFile(handler, this, filename);
+ if (rc == -1)
+ {
+ sdo_error(this, "xmlSAXUserParseFile returned an error %d", rc);
+ SDO_THROW_EXCEPTION("parse", SDOFileNotFoundException,messageBuffer);
+ }
+
+ // parse twice - first was for groups
+
+ if (setter)setter->clearErrors();
+
+ rc = xmlSAXUserParseFile(handler, this, filename);
+ if (rc == -1)
+ {
+ sdo_error(this, "xmlSAXUserParseFile returned an error %d", rc);
+ SDO_THROW_EXCEPTION("parse", SDOFileNotFoundException,messageBuffer);
+ }
+ return rc;
+ }
+
+ void SAX2Parser::stream_twice(std::istream& input)
+ {
+
+ std::vector<parse_buf_element> buffer_vec;
+ int count = 0;
+ parserError = false;
+
+ xmlSAXHandlerPtr handler = &SDOSAX2HandlerStruct;
+ xmlParserCtxtPtr ctxt;
+
+ char bctx[5];
+ input.read(bctx,4);
+ int bcount = input.gcount();
+
+
+ ctxt = xmlCreatePushParserCtxt(handler, this,
+ bctx, bcount, NULL);
+
+ buffer_vec.push_back(parse_buf_element());
+
+ while (input.read(buffer_vec[count].buf,1000))
+ {
+ buffer_vec[count].len = input.gcount();
+ xmlParseChunk(ctxt, buffer_vec[count].buf,
+ buffer_vec[count].len, 0);
+ buffer_vec.push_back(parse_buf_element());
+ count++;
+
+ }
+
+ buffer_vec[count].len = input.gcount();
+ xmlParseChunk(ctxt, buffer_vec[count].buf,
+ buffer_vec[count].len, 1);
+ xmlFreeParserCtxt(ctxt);
+
+ if (parserError)
+ {
+ SDO_THROW_EXCEPTION("stream", SDOXMLParserException,messageBuffer);
+ }
+
+ if (setter)setter->clearErrors();
+
+ ctxt = xmlCreatePushParserCtxt(handler, this,
+ bctx, bcount, NULL);
+
+ for (int i=0;i<buffer_vec.size();i++)
+ {
+ if (buffer_vec[i].len > 0)
+ {
+ xmlParseChunk(ctxt, buffer_vec[i].buf,
+ buffer_vec[i].len, 0);
+ }
+ }
+
+ if (parserError)
+ {
+ SDO_THROW_EXCEPTION("stream", SDOXMLParserException,messageBuffer);
+ }
+
+ }
+
+
+ std::istream& operator>>(std::istream& input, SAX2Parser& parser)
+ {
+ parser.stream(input);
+ return input;
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.h
new file mode 100644
index 0000000000..6e81bc98b7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SAX2Parser.h
@@ -0,0 +1,115 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+
+#ifndef _SAX2PARSER_H_
+#define _SAX2PARSER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/SAX2Attributes.h"
+#include "commonj/sdo/ParserErrorSetter.h"
+
+
+
+#include "sstream"
+namespace commonj
+{
+ namespace sdo
+ {
+
+ class parse_buf_element
+ {
+
+ public:
+ char buf[1000];
+ int len;
+ };
+
+/**
+ * SAX2Parser holds the methods which will be called back.
+ * The implementation uses libxml, which provides callbacks for
+ * errors, warnings , elements etc. These methods correspond to thos
+ * callbacks.
+ * Callbacks from libxml to these C methods are converted into calls
+ * to the C++ equivalent (with some parameter manipulation
+ * In the callback methods the void* ctx is a pointer to 'this' SAX2Parser
+ */
+ class SAX2Parser
+ {
+
+ public:
+
+ SAX2Parser();
+
+ SAX2Parser(ParserErrorSetter* insetter);
+
+ virtual ~SAX2Parser();
+
+ virtual int parse (const char* filename);
+ virtual int parse_twice (const char* filename);
+
+ virtual void startDocument();
+ virtual void endDocument();
+
+ virtual void startElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void endElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI);
+
+ virtual void characters(const SDOXMLString& chars);
+
+ virtual void warning(const char* msg, va_list args);
+
+ virtual void fatalError(const char* msg, va_list args);
+
+ virtual void error(const char* msg, va_list args);
+
+ virtual void stream(std::istream& input);
+ virtual void stream_twice(std::istream& input);
+
+ friend std::istream& operator>>(std::istream& input, SAX2Parser& parser);
+
+ ParserErrorSetter* setter;
+ bool parserError;
+
+ char messageBuffer[1024];
+
+ virtual const char* getCurrentFile() const;
+ virtual void setCurrentFile(const char* filename);
+
+ private:
+
+ char* currentFile;
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SAX2PARSER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDO.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDO.h
new file mode 100644
index 0000000000..674edf0719
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDO.h
@@ -0,0 +1,60 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/PropertyList.h"
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/TypeList.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/DataObjectList.h"
+#include "commonj/sdo/XSDHelper.h"
+#include "commonj/sdo/XMLHelper.h"
+#include "commonj/sdo/EqualityHelper.h"
+#include "commonj/sdo/CopyHelper.h"
+#include "commonj/sdo/SdoRuntime.h"
+#include "commonj/sdo/HelperProvider.h"
+#include "commonj/sdo/SDODate.h"
+#include "commonj/sdo/DataGraph.h"
+#include "commonj/sdo/ChangeSummary.h"
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/SDOUtils.h"
+#include "commonj/sdo/ChangedDataObjectList.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/DataObjectInstance.h"
+#include "commonj/sdo/DefaultLogWriter.h"
+#include "commonj/sdo/Logger.h"
+#include "commonj/sdo/LogWriter.h"
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/RefCountingObject.h"
+#include "commonj/sdo/SdoCheck.h"
+#include "commonj/sdo/Setting.h"
+#include "commonj/sdo/SettingList.h"
+#include "commonj/sdo/XMLDocument.h"
+#include "commonj/sdo/DASValue.h"
+#include "commonj/sdo/XpathHelper.h"
+#include "commonj/sdo/TypeDefinition.h"
+#include "commonj/sdo/TypeDefinitions.h"
+#include "commonj/sdo/PropertyDefinition.h"
+
+
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.cpp
new file mode 100644
index 0000000000..50ae8b2297
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.cpp
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SDODate.h"
+
+namespace commonj{
+namespace sdo{
+
+
+ SDODate::~SDODate()
+ {
+ }
+
+ SDODate::SDODate(time_t inval)
+ {
+ value = inval;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ const time_t SDODate::getTime(void) const
+ {
+ return value;
+ }
+
+ const char* SDODate::ascTime(void) const
+ {
+ return asctime(localtime(&value));
+ }
+
+};
+};
+// end - namespace sdo
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.h
new file mode 100644
index 0000000000..da900cb298
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDODate.h
@@ -0,0 +1,77 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SDO_SDODATE_H_
+#define _SDO_SDODATE_H_
+
+
+#include "commonj/sdo/export.h"
+#include "time.h"
+
+
+
+
+namespace commonj{
+namespace sdo{
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // A representation of the type of a date.
+ ///////////////////////////////////////////////////////////////////////////
+
+/**
+ * SDODate - a means of hiding the time_t.
+ * The SDO API in several places uses method overloads to allow the
+ * same method to set many types of data. As time_t and long are
+ * sometimes synonymous, it was not possible to have a time_t and a
+ * long method, so SDODate simply wraps the time_t.
+ * SDODate also allows modifcation of the implementation, as time_t is
+ * only a short-term solution - better date/time handling is required.
+ */
+
+class SDODate
+{
+
+public:
+
+
+ virtual SDO_API ~SDODate();
+
+ SDO_API SDODate(time_t inval);
+
+ /**
+ * Hand out the date as a time_t
+ */
+ virtual SDO_API const time_t getTime() const;
+
+ /**
+ * Format the date as a string
+ */
+
+ virtual const char* ascTime(void) const;
+
+
+private:
+ time_t value;
+};
+
+};
+};
+#endif //_SDO_SDODATE_H_
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.cpp
new file mode 100644
index 0000000000..4a60d78f0d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.cpp
@@ -0,0 +1,227 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/01/23 16:39:24 $ */
+
+#include "commonj/sdo/SDORuntimeException.h"
+
+#include <stdio.h>
+
+// ========================================================================
+// Constructor
+// ========================================================================
+SDORuntimeException :: SDORuntimeException(const char* name,
+ severity_level sev,
+ const char* msg_text)
+ : severity(sev),location_set(0)
+{
+ class_name = new char[strlen(name) + 1];
+ strcpy(class_name,name);
+ message_text = new char[strlen(msg_text)+1];
+ strcpy(message_text,msg_text);
+
+} // end SDORuntimeException constuctor
+
+// ========================================================================
+// Constructor
+// ========================================================================
+SDORuntimeException :: SDORuntimeException(const SDORuntimeException& c)
+ :
+ severity(c.getSeverity()), location_set(c.location_set)
+
+{
+ class_name = new char[strlen(c.getEClassName()) + 1];
+ strcpy(class_name, c.getEClassName());
+ message_text = new char[strlen(c.getMessageText())+1];
+ strcpy(message_text,c.getMessageText());
+ for (int i=0;i<c.location_set;i++)
+ {
+ locations[i].file = new char[strlen(c.locations[i].file) + 1];
+ strcpy(locations[i].file,c.locations[i].file);
+ locations[i].line = c.locations[i].line;
+ locations[i].function = new char[strlen(c.locations[i].function) + 1];
+ strcpy(locations[i].function, c.locations[i].function);
+ }
+}
+
+// ========================================================================
+// Destructor
+// ========================================================================
+SDORuntimeException :: ~SDORuntimeException()
+{
+ if (class_name) delete class_name;
+ if (message_text) delete message_text;
+ for (int i=0;i<location_set;i++)
+ {
+ if (locations[i].file) delete locations[i].file;
+ if (locations[i].function) delete locations[i].function;
+ }
+
+} // end SDORuntimeException destructor
+
+// ========================================================================
+// Return class name of this exception
+// ========================================================================
+const char* SDORuntimeException :: getEClassName() const
+{
+ return class_name;
+} // end getClassName()
+
+// ========================================================================
+// Return severity
+// ========================================================================
+SDORuntimeException::severity_level SDORuntimeException :: getSeverity() const
+{
+ return severity;
+} // end getSeverity()
+
+// ========================================================================
+// Return message text associated with exception
+// ========================================================================
+const char* SDORuntimeException :: getMessageText() const
+{
+ return message_text;
+} // end getMessageText()
+
+// ========================================================================
+// Return file name where exception was raised
+// ========================================================================
+const char* SDORuntimeException :: getFileName() const
+{
+ return locations[0].file;
+} // end getFileName()
+
+// ========================================================================
+// Return line number where exception was raised
+// ========================================================================
+unsigned long SDORuntimeException :: getLineNumber() const
+{
+ return locations[0].line;
+} // end getLineNumber()
+
+// ========================================================================
+// Return function name where exception was raised
+// ========================================================================
+const char* SDORuntimeException :: getFunctionName() const
+{
+ return locations[0].function;
+} // end getFunctionName()
+
+
+// ========================================================================
+// set severity of exception
+// ========================================================================
+void SDORuntimeException :: setSeverity(severity_level sev)
+{
+ severity = sev;
+} // end setSeverity(severity_level sev) const
+
+// ========================================================================
+// set message text associated with exception
+// ========================================================================
+void SDORuntimeException :: setMessageText(const char* msg_text)
+{
+ if (message_text != 0) delete message_text;
+ message_text = new char[strlen(msg_text) + 1];
+ strcpy(message_text,msg_text);
+} // end setMessageText(const string &msg_text) const
+
+// ========================================================================
+// set exception location
+// ========================================================================
+void SDORuntimeException :: setExceptionLocation(const char* file,
+ unsigned long line,
+ const char* function)
+{
+ // Only set this information once
+ if (location_set == 0)
+ {
+ locations[0].file = new char[strlen(file)+1];
+ strcpy(locations[0].file,file);
+ locations[0].line = line;
+ locations[0].function = new char[strlen(function) + 1];
+ strcpy(locations[0].function,function);
+ location_set = 1;
+ }
+} // end setLocation()
+
+// ========================================================================
+// set location of most recent throw/handling of the exception
+// ========================================================================
+void SDORuntimeException :: setLocation(const char* file,
+ unsigned long line,
+ const char* function)
+{
+ if (location_set < num_locations)
+ {
+ locations[location_set].file = new char[strlen(file) + 1];
+ strcpy(locations[location_set].file,file);
+ locations[location_set].line = line;
+ locations[location_set].function = new char[strlen(function) + 1];
+ strcpy(locations[location_set].function,function);
+
+ location_set++;
+ }
+} // end setLocation()
+
+// ========================================================================
+// Trace the exception
+// ========================================================================
+void SDORuntimeException :: trace(const char* text)
+{
+ /* TODO */
+ // TRACE_STREAM(0, SDORuntimeException::trace, " ", (*this));
+} // end Trace()
+
+// ========================================================================
+// print self
+// ========================================================================
+std::ostream& SDORuntimeException :: PrintSelf(std::ostream &os) const
+{
+ char lineNumber[100];
+ sprintf(lineNumber, "%d",locations[0].line);
+
+ os << "Exception object :" << std::endl;
+ os << " class: " << class_name << std::endl;
+ os << " file name: " << locations[0].file << std::endl;
+ os << " line number: " << lineNumber << std::endl;
+ os << " function: " << locations[0].function << std::endl;
+ os << " description: " << message_text << std::endl;
+ os << " location history:" << std::endl;
+
+ // TODO - commented out - a two-location rethrow causes an access
+ // violation here.
+ //int i=1;
+ //while (i < location_set)
+ //{
+ // os << " " << i << ")" << std::endl;
+ // os << " file: " << locations[i].file << std::endl;
+ // os << " line: " << locations[i].line << std::endl;
+ // os << " function: " << locations[i].function << std::endl;
+ // i++;
+ //}
+ return os;
+} // end ostream operator <<
+
+// ========================================================================
+// ostream operator <<
+// ========================================================================
+SDO_API std::ostream& operator<< (std::ostream &os, const SDORuntimeException &except)
+{
+ return except.PrintSelf(os);
+} // end ostream operator <<
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.h
new file mode 100644
index 0000000000..12036f0db1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDORuntimeException.h
@@ -0,0 +1,517 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#if !defined SDO_EXCEPTIONS_H
+#define SDO_EXCEPTIONS_H
+
+#include "commonj/sdo/export.h"
+
+
+#include <string>
+#include <iostream>
+
+
+
+/** SDORuntimeException - Exception base class.
+ *
+ *
+ * Description :
+ * -------------
+ * SDO exception class definition
+ *
+ * This is intended as a base class.
+ *
+ * Parent Classes :
+ * ----------------
+ * none
+ *
+ * Public Member functions:
+ * ------------------------
+ *
+ * Constructors :
+ * SDORuntimeExceptionm(severity_level sev=severe,
+ * const string &msg_text="");
+ *
+ * creates the exception object. Parameters are:
+ * sev: the severity of the exception (Error, Severe)
+ * msg_text: descriptive message_text
+ *
+ * copy constructor not necessary
+ *
+ * Destructor :
+ * virtual ~SDORuntimeException();
+ *
+ * Assignment operator:
+ * not necessary
+ *
+ * void setSeverity(severity_level sev);
+ * set the exception severity
+ *
+ * void setMessageText(const char* msg_text);
+ * set the message text associated with the exception. (This text should
+ * come from a message catalog as it may be written to stdout/stderr at
+ * some point)
+ *
+ * void setExceptionLocation(const char* file,
+ * unsigned long line,
+ * const char* function="");
+ *
+ * adds the location of the exception. Parameters
+ * file: the filename from where the exception is being created
+ * (from __FILE__)
+ * line: the line number from where the exception is being created
+ * (from __LINE__)
+ * function: The function name from where the exception is being created
+ *
+ * severity_level getSeverity() const;
+ * returns the severity of the exception
+ *
+ * const char* getMessageText() const;
+ * returns the message text that describes this exception.
+ *
+ * const tring& getFileName() const;
+ * returns the file name from the location information in the exception
+ *
+ * unsigned long getLineNumber() const;
+ * returns the line number from the location information in the exception
+ *
+ * const char* getFunctionName() const;
+ * returns the function name from the location information in the exception
+ *
+ * Private Data Members :
+ * ----------------------
+ * severity_level severity; * Severity of exception
+ * string message_text; * Message associated with exception
+ * string file_name; * File name (from __FILE__)
+ * unsigned long line_number; * Line number (from __LINE__)
+ * string function_name; * Function name
+ *
+ */
+
+class SDORuntimeException
+{
+ public:
+ // Constructor
+ enum severity_level
+ {
+ Normal,
+ Warning,
+ Error,
+ Severe
+ };
+
+ SDO_API SDORuntimeException(const char *name="SDORuntimeException",
+ severity_level sev=Severe,
+ const char* msg_text="");
+
+ SDO_API SDORuntimeException(const SDORuntimeException& c);
+
+ // Destructor
+ virtual SDO_API ~SDORuntimeException();
+
+ /** getEClassName() get the exception class
+ *
+ * returns the name of the exception class, which will be
+ * a subclass of SDORuntimeException
+ */
+
+ SDO_API const char* getEClassName() const;
+
+ /** getSeverity returns a level from severity_levels
+ *
+ * Return severity
+ * from the enumerator severity_levels, which is:
+ *
+ * Normal,Warning, Error,Severe
+ */
+
+ SDO_API severity_level getSeverity() const;
+
+ /**
+ * Return message text associated with exception
+ */
+
+ SDO_API const char* getMessageText() const;
+
+ /** getFileName() the file where the exception occurred
+ *
+ * Return file name where exception was raised
+ */
+
+ SDO_API const char* getFileName() const;
+
+ /** getLineNumber gives the line where the excepion occurred
+ *
+ * Return line number where exception was raised
+ */
+
+ SDO_API unsigned long getLineNumber() const;
+
+ /** getFunctionName give the name of the raising function
+ *
+ * Return function name where exception was raised
+ */
+
+ SDO_API const char* getFunctionName() const;
+
+
+ /** setSeverity
+ *
+ * sets an exception severity
+ */
+
+ SDO_API void setSeverity(severity_level sev);
+
+ /** setMessageText
+ *
+ * set the message text associated with exception
+ */
+
+ SDO_API void setMessageText(const char* msg_text);
+
+
+ /** setExceptionLocation
+ *
+ * set exception location
+ */
+
+ SDO_API void setExceptionLocation(const char* file,
+ unsigned long line,
+ const char* function="");
+
+ SDO_API void setLocation(const char* file,
+ unsigned long line,
+ const char* function="");
+
+ SDO_API void trace(const char* text="%1:\n %3 %4 %2");
+
+ SDO_API virtual std::ostream& PrintSelf(std::ostream &os) const;
+
+ /** operator << to write the exception
+ *
+ * ostream operator <<
+ */
+
+ SDO_API friend std::ostream& operator<< (std::ostream &os, const SDORuntimeException &except);
+
+ protected:
+
+ private:
+
+ char* class_name;
+
+ severity_level severity; // Severity of exception
+
+ char* message_text; // Description of exception
+
+ //* Location where the exception was last thrown*handled
+
+ class location
+ {
+ public:
+ char* file; //* File name (from __FILE__)
+ unsigned long line; //* Line number (from __LINE__)
+ char* function; //* Function name
+ };
+
+ // Array of locations
+ enum {num_locations=5};
+ location locations[num_locations];
+
+ // Index into locations array
+ int location_set;
+
+
+}; // End SDORuntimeException class definition
+
+/**
+ ***************************************************************************
+ *
+ * SDOOutOfMemoryException - Exception for no-storage
+ *
+ * ***************************************************************************
+ */
+
+class SDOOutOfMemoryException: public SDORuntimeException
+{
+ public:
+ SDOOutOfMemoryException(unsigned long size)
+ : SDORuntimeException("SDOOutOfMemoryException", Severe,
+ "Unable to obtain storage of length " + size)
+ {
+ }
+ private:
+}; // End SDOOutOfMemory class definition
+
+/**
+ ***************************************************************************
+ *
+ * SDONullPointerException - Exception for no-storage
+ *
+ * ***************************************************************************
+ */
+
+class SDONullPointerException: public SDORuntimeException
+{
+ public:
+ SDONullPointerException(const char* param)
+ : SDORuntimeException("SDONullPointerException", Warning,
+ "The referenced object is null ")
+ {
+ }
+ private:
+}; // End SDOOutOfMemory class definition
+/**
+***************************************************************************
+*
+* SDOPathNotFoundException - Exception for bad path
+*
+****************************************************************************
+*/
+class SDOPathNotFoundException: public SDORuntimeException
+{
+ public:
+ SDOPathNotFoundException(const char* path)
+ : SDORuntimeException("SDOPathNotFoundException", Warning,
+ path)
+ {
+ }
+ private:
+}; // End SDOPathNotFoundException class definition
+
+/**
+***************************************************************************
+*
+* SDOPropertyNotFoundException - Exception for property not found
+*
+****************************************************************************
+*/
+
+class SDOPropertyNotFoundException: public SDORuntimeException
+{
+ public:
+ SDOPropertyNotFoundException(const char* name)
+ : SDORuntimeException("SDOPropertyNotFoundException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOPropertyNotFoundException class definition
+
+/**
+***************************************************************************
+*
+* SDOTypeNotFoundException - Exception for type not found.
+*
+****************************************************************************
+*/
+class SDOTypeNotFoundException: public SDORuntimeException
+{
+ public:
+ SDOTypeNotFoundException(const char* name)
+ : SDORuntimeException("SDOTypeNotFoundException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOTypeNotFoundException class definition
+
+/**
+***************************************************************************
+*
+* SDOFileNotFoundException - Exception for file not found
+*
+****************************************************************************
+*/
+
+class SDOFileNotFoundException: public SDORuntimeException
+{
+ public:
+ SDOFileNotFoundException(const char* name)
+ : SDORuntimeException("SDOFileNotFoundException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOFileNotFoundException class definition
+/**
+***************************************************************************
+*
+* SDOPropertyNotSetException - Exception for asking for the value of an
+* unset/undefaulted prop
+*
+****************************************************************************
+*/
+class SDOPropertyNotSetException: public SDORuntimeException
+{
+ public:
+ SDOPropertyNotSetException(const char* name)
+ : SDORuntimeException("SDOPropertyNotSetException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOPropertyNotSetException class definition
+/**
+***************************************************************************
+*
+* SDOUnsupportedOperationException - Invalid action or unimplemented method.
+*
+****************************************************************************
+*/
+class SDOUnsupportedOperationException: public SDORuntimeException
+{
+ public:
+ SDOUnsupportedOperationException(const char* name)
+ : SDORuntimeException("SDOUnsupportedOperationException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOTypeNotFoundException class definition
+
+/**
+***************************************************************************
+*
+* SDOInvalidConversionException - Invalid conversion - cannot convert to type.
+*
+****************************************************************************
+*/
+class SDOInvalidConversionException: public SDORuntimeException
+{
+ public:
+ SDOInvalidConversionException(const char* name)
+ : SDORuntimeException("SDOInvalidConversionException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOTypeNotFoundException class definition
+/**
+***************************************************************************
+*
+* SDOIllegalArgumentException - Invalid argument passed (null name?).
+*
+****************************************************************************
+*/
+class SDOIllegalArgumentException: public SDORuntimeException
+{
+ public:
+ SDOIllegalArgumentException(const char* name)
+ : SDORuntimeException("SDOIllegalArgumentException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOTypeNotFoundException class definition
+/**
+****************************************************************************
+*
+* SDOIndexOutOfRangeException - element index not in a list.
+*
+****************************************************************************
+*/
+class SDOIndexOutOfRangeException: public SDORuntimeException
+{
+ public:
+ SDOIndexOutOfRangeException(const char* name)
+ : SDORuntimeException("SDOIndexOutOfRangeException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOTypeNotFoundException class definition
+
+/**
+***************************************************************************
+*
+* SDOXMLParserException - XMLParser error
+*
+****************************************************************************
+*/
+class SDOXMLParserException: public SDORuntimeException
+{
+ public:
+ SDOXMLParserException(const char* name)
+ : SDORuntimeException("SDOXMLParserException", Warning,
+ name)
+ {
+ }
+ private:
+}; // End SDOTypeNotFoundException class definition
+
+/*
+***************************************************************************
+*
+* Macro definitions
+*
+****************************************************************************
+*/
+/**
+ * =========================================================================
+ * Macro - SDO_THROW_EXCEPTION
+ *
+ * adds the current file name, line number and function name to the exception.
+ * then throws the exception.
+ * The parameter 'function_name' should be the name of the function throwing
+ * this exception.
+ * The parameter 'type' is the class of exception to throw and must be a
+ * SDORuntimeException or a class derived from SDORuntimeException.
+ * The parameter 'parameter' is the construction parameter for the exception
+ * =========================================================================
+*/
+
+ #define SDO_THROW_EXCEPTION(function_name, type, parameter ) \
+ {\
+ type ex(parameter); \
+ ex.setExceptionLocation(__FILE__,__LINE__,#function_name); \
+ throw ex;\
+ }
+
+/**
+ =========================================================================
+ * Macro - SDO_RETHROW_EXCEPTION
+ *
+ * adds the current file name, line number and function name to the exception.
+ * then re-throws the exception.
+ * The parameter 'function_name' should be the name of the function throwing
+ * this exception.
+ * =========================================================================
+*/
+ #define SDO_RETHROW_EXCEPTION(function_name, exception) \
+ (exception).setLocation(__FILE__,__LINE__,#function_name); \
+ throw;
+
+/**
+ * =========================================================================
+ * Macro - SDO_HANDLE_EXCEPTION
+ *
+ * adds the current file name, line number and function name to the exception.
+ * Writes an exception trace entry then continues.
+ * The parameter 'function_name' should be the name of the function handling
+ * this exception.
+ * =========================================================================
+*/
+ #define SDO_HANDLE_EXCEPTION(function_name, exception) \
+ {\
+ (exception).setLocation(__FILE__,__LINE__,#function_name); \
+ (exception).Trace("Exception handled by %1: \n %3 %4 %2");\
+ }
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.cpp
new file mode 100644
index 0000000000..8240503337
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.cpp
@@ -0,0 +1,1476 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/20 14:24:42 $ */
+
+#include "commonj/sdo/SDOSAX2Parser.h"
+
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/ChangeSummary.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include "commonj/sdo/XMLQName.h"
+#include "commonj/sdo/DASProperty.h"
+#include "commonj/sdo/Logging.h"
+#include "commonj/sdo/DASType.h"
+#include "commonj/sdo/XSDTypeInfo.h"
+#include "commonj/sdo/TypeImpl.h"
+#include "commonj/sdo/DataObjectImpl.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+using namespace std;
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ SDOSAX2Parser::SDOSAX2Parser(
+ DataFactoryPtr df,
+ const SDOXMLString& targetNamespace,
+ DataObjectPtr& rootDO,
+ ParserErrorSetter* insetter
+ )
+
+ : dataFactory(df),
+ targetNamespaceURI(targetNamespace),
+ rootDataObject(rootDO),
+ currentDataObject(0),
+ isDataGraph(false),
+ ignoreEvents(false),
+ dealingWithChangeSummary(false),
+ csbuilder(0),
+ SAX2Parser(insetter)
+
+
+ {
+ reset();
+ if (targetNamespace.isNull())
+ {
+ targetNamespaceURI = "";
+ }
+ rootDataObject = 0;
+ newSequence = true;
+ }
+
+ SDOSAX2Parser::~SDOSAX2Parser()
+ {
+ }
+
+ void SDOSAX2Parser::reset()
+ {
+ rootDataObject = 0;
+ currentDataObject = 0;
+ isDataGraph = false;
+ ignoreEvents = false;
+ changeSummary = false;
+ IDMap.empty();
+ IDRefs.empty();
+ }
+
+
+ void SDOSAX2Parser::startDocument()
+ {
+ LOGINFO(INFO,"SDOSAX2Parser: startDocument");
+ setNamespaces = true;
+ reset();
+ }
+
+ void SDOSAX2Parser::endDocument()
+ {
+ LOGENTRY(INFO,"SDOSAX2Parser: endDocument");
+ // Iterate over IDREFs list and set references
+ ID_REFS::iterator refsIter;
+ for (refsIter = IDRefs.begin(); refsIter != IDRefs.end(); refsIter++)
+ {
+ try
+ {
+ const Type& type = refsIter->dataObject->getType();
+ const Property& prop = refsIter->dataObject->getProperty(refsIter->property);
+ const Type& propType = ((TypeImpl&)type).getRealPropertyType(refsIter->property);
+
+ // Allowing referenes to DataObjects only
+ if (!propType.isDataType())
+ {
+ DataObjectPtr reffedDO;
+ ID_MAP::iterator idIter = IDMap.find(refsIter->value);
+ if (idIter != IDMap.end())
+ {
+ reffedDO = idIter->second;
+ }
+ else
+ {
+ // assume it is an XPath?
+
+ // Remove #/ from front of XPATH as getDataObject doeesnt
+ // support this yet - it does now
+ //SDOXMLString xpath(refsIter->value);
+ //if (xpath.firstIndexOf('#') == 0)
+ // xpath = xpath.substring(1);
+ //if (xpath.firstIndexOf('/') == 0)
+ // xpath = xpath.substring(1);
+
+ reffedDO = rootDataObject->getDataObject(refsIter->value);
+ }
+
+ if (!reffedDO)
+ {
+ continue;
+ }
+
+ if (prop.isMany())
+ {
+ DataObjectList& dol = refsIter->dataObject->getList(prop);
+ dol.append(reffedDO);
+ }
+ else
+ {
+ refsIter->dataObject->setDataObject(prop, reffedDO);
+ }
+ }
+
+ }
+ catch (const SDORuntimeException&)
+ {
+ }
+ }
+ try {
+ // Now rebuild the changeSummary
+ if (csbuilder != 0)
+ {
+ csbuilder->buildChangeSummary(changeSummaryDO);
+ delete csbuilder;
+ csbuilder = 0;
+ }
+ }
+ catch (SDORuntimeException&)
+ {
+ }
+
+ LOGEXIT(INFO,"SDOSAX2Parser: endDocument");
+ }
+
+
+ bool SDOSAX2Parser::setDO(DataObjectPtr newDO,
+ SDOXMLString& propertyName)
+ {
+ LOGENTRY(INFO,"SDOSAX2Parser: setDO");
+
+ if (currentDataObject)
+ {
+ const Type& type = currentDataObject->getType();
+ // go lower level so we can find open properties w/o exception
+ DataObject* dob = currentDataObject;
+ const PropertyImpl* pprop = ((DataObjectImpl*)dob)->getPropertyImpl(propertyName);
+ if (pprop == 0)
+ {
+
+ LOGEXIT(INFO,"SDOSAX2Parser: setDO - exit1");
+ return false;
+ }
+
+ const Property& property = (Property&)*pprop;
+ //const Type& propertyType = ((TypeImpl&)type).getRealPropertyType(propertyName);
+ if (currentDataObject->getType().isSequencedType())
+ {
+ SequencePtr seq = currentDataObject->getSequence();
+ seq->addDataObject(property, newDO);
+ }
+ else
+ {
+ if (!property.isMany())
+ {
+ currentDataObject->setDataObject(propertyName, newDO);
+ }
+ else
+ {
+ DataObjectList& dol = currentDataObject->getList(propertyName);
+ dol.append(newDO);
+ }
+ }
+ }
+
+ setCurrentDataObject(newDO);
+
+ LOGEXIT(INFO,"SDOSAX2Parser: setDO - exit2");
+ return true;
+ }
+
+ void SDOSAX2Parser::handleOpenAttribute(
+ SDOXMLString& tns,
+ const char* propuri,
+ const char* propname,
+ const char* value)
+ {
+ // first, see if there is a global element or attribute corresponding...
+ try
+ {
+ DataFactory* df = dataFactory;
+ const PropertyImpl* prop = 0;
+ const TypeImpl* ti =
+ ((DataFactoryImpl*)df)->findTypeImpl(propuri,"RootType");
+
+ if (ti != 0)
+ {
+ prop = (const PropertyImpl*)ti->getPropertyImpl(propname);
+ }
+ else
+ {
+ ti = ((DataFactoryImpl*)df)->findTypeImpl(tns,"RootType");
+ }
+
+ if (ti != 0)
+ {
+ prop = (const PropertyImpl*)ti->getPropertyImpl(propname);
+ }
+
+ if (prop == 0)
+ {
+ // need to use the sequence interface if it exists
+ if (currentDataObject->getType().isSequencedType())
+ {
+ SequencePtr seq = currentDataObject->getSequence();
+ seq->addCString(propname, value);
+ }
+ else
+ {
+ currentDataObject->setCString(propname,value);
+ }
+ return;
+ }
+
+ DataObject* dob = currentDataObject;
+
+ switch (prop->getTypeEnum())
+ {
+ case Type::BooleanType:
+ ((DataObjectImpl*)dob)->defineBoolean(propname);
+ break;
+ case Type::ByteType:
+ ((DataObjectImpl*)dob)->defineByte(propname);
+ break;
+ case Type::CharacterType:
+ ((DataObjectImpl*)dob)->defineCharacter(propname);
+ break;
+ case Type::BytesType:
+ ((DataObjectImpl*)dob)->defineBytes(propname);
+ break;
+ case Type::StringType:
+ ((DataObjectImpl*)dob)->defineString(propname);
+ break;
+ case Type::ShortType:
+ ((DataObjectImpl*)dob)->defineShort(propname);
+ break;
+ case Type::IntegerType:
+ ((DataObjectImpl*)dob)->defineInteger(propname);
+ break;
+ case Type::LongType:
+ ((DataObjectImpl*)dob)->defineLong(propname);
+ break;
+ case Type::DoubleType:
+ ((DataObjectImpl*)dob)->defineDouble(propname);
+ break;
+ case Type::FloatType:
+ ((DataObjectImpl*)dob)->defineFloat(propname);
+ break;
+ case Type::DateType:
+ ((DataObjectImpl*)dob)->defineDate(propname);
+ break;
+ } // switch
+
+ // regardless of what type the property now is, we can set CString , and the
+ // right conversion will happen
+
+ // need to use the sequence interface if it exists.
+ if (currentDataObject->getType().isSequencedType())
+ {
+ SequencePtr seq = currentDataObject->getSequence();
+ seq->addCString(propname, value);
+ }
+ else
+ {
+ currentDataObject->setCString(propname,value);
+ }
+ }
+ catch (SDORuntimeException)
+ {
+ }
+ return;
+ }
+
+
+ void SDOSAX2Parser::setAttributes(
+ SDOXMLString& tns,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+
+ LOGENTRY(INFO,"SDOSAX2Parser::setAttributes");
+
+ //////////////////////////////////////////////
+ // The attributes are properties on the new DO
+ // Handle attributes
+ //////////////////////////////////////////////
+ for (int i=0; i < attributes.size(); i++)
+ {
+ // Should ignore attributes like xsi:type
+ if (!(attributes[i].getUri().equalsIgnoreCase("http://www.w3.org/2001/XMLSchema-instance")))
+ {
+ try
+ {
+ const SDOXMLString& propertyName = getSDOName(*currentDataObjectType, attributes[i].getName());
+ DataObject* dob = currentDataObject;
+ const PropertyImpl* pprop = ((DataObjectImpl*)dob)->getPropertyImpl(propertyName);
+ if (pprop == 0 )
+ {
+ if (currentDataObject->getType().isOpenType())
+ {
+ // if its an open type, then attributes will be allowed to have
+ // an invalid name, and setCString will create them all as bytes
+ handleOpenAttribute(tns, (const char*)attributes[i].getUri(),
+ (const char*)attributes[i].getName(),
+ (const char*)attributes[i].getValue());
+
+ }
+ else
+ {
+ LOGERROR_1(WARNING,"SDOSAX2Parser: Property not found on closed type (ignored):%s",
+ (const char*)(attributes[i].getName()));
+ }
+ }
+ else
+ {
+ const Property& prop = (Property&)*pprop;
+ SDOXMLString propValue;
+
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)((DASProperty*)&prop)->getDASValue("XMLDAS::PropertyInfo");
+ if (pi && pi->getPropertyDefinition().isQName)
+ {
+ XMLQName qname(attributes[i].getValue(),
+ documentNamespaces, namespaces);
+ propValue = qname.getSDOName();
+ }
+ else
+ {
+ propValue = attributes[i].getValue();
+ }
+
+ if ((pi && pi->getPropertyDefinition().isIDREF)
+ || prop.isReference())
+ {
+ // remember this value to resolve later
+ IDRef ref(currentDataObject, attributes[i].getName(), propValue);
+ IDRefs.insert(IDRefs.end(), ref);
+ }
+ else
+ {
+ if (pi && pi->getPropertyDefinition().isID)
+ {
+ // add this ID to the map
+ IDMap[propValue] = currentDataObject;
+ }
+ // Always set the property as a String. SDO will do the conversion
+ currentDataObject->setCString(attributes[i].getName(), propValue);
+ }
+ }
+ }
+ catch (const SDOPropertyNotFoundException&)
+ {
+ LOGERROR_1(WARNING,"SDOSAX2Parser: Error processing attribute (ignored):%s",
+ (const char*)(attributes[i].getName()));
+ }
+ }
+ } // End iterate over attributes
+
+ LOGEXIT(INFO,"SDOSAX2Parser:setAttributes");
+
+ }
+
+
+ const PropertyImpl* SDOSAX2Parser::handleOpenType(
+ SDOXMLString& tns,
+ const SDOXMLString& localname,
+ DataObjectImpl* dob,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes,
+ SDOXMLString& xsitypeURI,
+ SDOXMLString& xsitypeName,
+ bool bToBeNull)
+ {
+ // first, see if there is a global element or attribute corresponding...
+ const PropertyImpl* pprop;
+ DataObjectPtr newDO = 0;
+ try
+ {
+ DataFactory* df = dataFactory;
+ const TypeImpl* ti = 0;
+ const PropertyImpl* prop = 0;
+ SDOXMLString propertyName;
+
+ ti = ((DataFactoryImpl*)df)->findTypeImpl(tns,"RootType");
+ if (ti != 0)
+ {
+ propertyName = getSDOName((Type&)*ti, localname);
+ prop = ti->getPropertyImpl(propertyName);
+ }
+ else
+ {
+ propertyName = localname;
+ }
+
+ if (prop != 0)
+ {
+ if (prop->isMany())
+ {
+ pprop = ((DataObjectImpl*)dob)->defineList(propertyName);
+
+ // the type of the list needs to be set, as chars sets a CString
+ try
+ {
+ DataObjectList& dl = ((DataObjectImpl*)dob)->getList(propertyName);
+ ((DataObjectListImpl*)&dl)->setType(prop->getType().getURI(),
+ prop->getType().getName());
+ }
+ catch (SDORuntimeException)
+ {
+ // let it pass - the type will be Bytes
+ }
+
+ if (prop->getType().isDataType())
+ {
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ }
+ else
+ {
+ newDO = dataFactory->create(
+ prop->getType().getURI(),
+ prop->getType().getName());
+ // here we need to use the sequence interface if it exists.
+ if (dob->getType().isSequencedType())
+ {
+ SequencePtr seq = currentPropertySetting.dataObject->getSequence();
+ seq->addDataObject(propertyName,newDO);
+ }
+ else
+ {
+ DataObjectList& dol = dob->getList(propertyName);
+ dol.append(newDO);
+ }
+ setCurrentDataObject(newDO);
+ setAttributes(tns, namespaces,attributes);
+ }
+ return pprop;
+ }
+ else
+ {
+ switch (prop->getTypeEnum())
+ {
+ case Type::BooleanType:
+ pprop = ((DataObjectImpl*)dob)->defineBoolean(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::ByteType:
+ pprop = ((DataObjectImpl*)dob)->defineByte(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::CharacterType:
+ pprop = ((DataObjectImpl*)dob)->defineCharacter(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::BytesType:
+ pprop = ((DataObjectImpl*)dob)->defineBytes(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::StringType:
+ pprop = ((DataObjectImpl*)dob)->defineString(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::ShortType:
+ pprop = ((DataObjectImpl*)dob)->defineShort(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::IntegerType:
+ pprop = ((DataObjectImpl*)dob)->defineInteger(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::LongType:
+ pprop = ((DataObjectImpl*)dob)->defineLong(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::DoubleType:
+ pprop = ((DataObjectImpl*)dob)->defineDouble(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::FloatType:
+ pprop = ((DataObjectImpl*)dob)->defineFloat(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::DateType:
+ pprop = ((DataObjectImpl*)dob)->defineDate(propertyName);
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ break;
+ case Type::DataObjectType:
+ pprop = ((DataObjectImpl*)dob)->defineDataObject(propertyName,
+ prop->getType().getURI(), prop->getType().getName());
+ newDO = dataFactory->create(
+ prop->getType().getURI(),
+ prop->getType().getName());
+ // here we need to use the sequence interface if it exists.
+ if (dob->getType().isSequencedType())
+ {
+ SequencePtr seq = dob->getSequence();
+ seq->addDataObject(propertyName, newDO);
+ }
+ else
+ {
+ dob->setDataObject(propertyName, newDO);
+ }
+ setCurrentDataObject(newDO);
+ setAttributes(tns,namespaces,attributes);
+ break;
+ }
+ } // else
+ } // if prop != 0
+ else
+ {
+ // The type is open, and the property doesnt exist, so we are creating
+ // a property, and need to find out the type to create.
+ // As I cannot tell if its a single value or many valued, I create all
+ // as many valued
+ // could be data object or primitive. All primitives will appear
+ // as bytes.
+ // UPDATE: Spec says that all elements will appear as DataObjects which
+ // are sequenced - the text will come out as text elements in the sequence
+
+ if (!xsitypeName.isNull())
+ {
+ // it has a type from xsi:type
+ newDO = dataFactory->create(xsitypeURI, xsitypeName);
+ }
+ else
+ {
+ newDO = dataFactory->create(Type::SDOTypeNamespaceURI, "OpenDataObject");
+ }
+ pprop = ((DataObjectImpl*)dob)->defineList(propertyName);
+ // here we need to use the sequence interface if it exists.
+ if (dob->getType().isSequencedType())
+ {
+ SequencePtr seq = dob->getSequence();
+ seq->addDataObject(propertyName, newDO);
+ }
+ else
+ {
+ DataObjectList& dol = dob->getList(propertyName);
+ dol.append(newDO);
+ }
+ setCurrentDataObject(newDO);
+ setAttributes(tns,namespaces,attributes);
+ }
+ return pprop;
+ }
+ catch (SDORuntimeException)
+ {
+ // fail to find the property or create a dummy
+ return 0;
+ }
+ }
+
+ void SDOSAX2Parser::startElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+
+ {
+ LOGENTRY(INFO,"SDOSAX2Parser: startElementNs");
+
+ LOGINFO_1(INFO,"SDOSAX2Parser: startElementNs:%s",
+ (const char*)localname);
+
+ newSequence = true;
+
+ bool bToBeNull = false;
+ // Save the namespace information from the first element
+ if (setNamespaces)
+ {
+ documentNamespaces = namespaces;
+ setNamespaces = false;
+ }
+
+ if (ignoreEvents)
+ {
+ // Check for the tag we are waiting for
+ if ( (ignoreTag.localname.equals(localname))
+ && (ignoreTag.uri.equals(URI))
+ && (ignoreTag.prefix.equals(prefix)) )
+ {
+ ignoreTag.tagCount++;
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit1");
+ return;
+ }
+
+ if (URI.equalsIgnoreCase("http://www.w3.org/2001/XMLSchema"))
+ {
+ // ignore anything within a schema
+ LOGINFO_1(INFO,"SDOSAX2Parser ignores schema element:%s",
+ (const char *)localname);
+
+ // We need to ignore all events until the end tag for this element
+ ignoreEvents = true;
+ ignoreTag.localname = localname;
+ ignoreTag.uri = URI;
+ ignoreTag.prefix = prefix;
+ ignoreTag.tagCount = 0;
+ return;
+ }
+
+
+
+ if (dealingWithChangeSummary)
+ {
+ if (csbuilder == 0)
+ {
+ LOGERROR(ERROR,"SDOSAX2Parser:Parser builds summary with no builder");
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit2");
+ return;
+ }
+ csbuilder->processStart(
+ localname,
+ prefix,
+ URI,
+ namespaces,
+ attributes);
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit3");
+ return;
+ }
+
+
+ if (URI.equalsIgnoreCase(Type::SDOTypeNamespaceURI.c_str()))
+ {
+ ///////////////////////////////////////////////////////////////////////
+ // Handle datagraph
+ ///////////////////////////////////////////////////////////////////////
+ if (localname.equalsIgnoreCase("datagraph"))
+ {
+ // Remember this is a datagraph. The root DO will be created
+ // later when we can have a better guess at the namespaceURI
+ isDataGraph = true;
+ } // end handling sdo:datagraph
+
+ ////////////////////////////////////
+ // Handle ChangeSummary on datagraph
+ ////////////////////////////////////
+ if (localname.equals("changeSummary"))
+ {
+ changeSummary = true;
+ changeSummaryDO = currentDataObject;
+
+ csbuilder = new ChangeSummaryBuilder(
+ dataFactory, rootDataObject );
+
+ changeSummaryLogging = true;
+
+
+ SDOXMLString logging = attributes.getValue("logging");
+ if (!logging.isNull())
+ {
+ if (logging.equals("false"))
+ {
+ changeSummaryLogging = false;
+ }
+ }
+
+ LOGINFO(INFO,"SDOSAX2Parser:Start change summary");
+ dealingWithChangeSummary = true;
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit4");
+ return;
+
+ }
+
+ }
+ else
+ {
+ ///////////////////////////////////////////////////////////////////////
+ // Each element is a DataObject or a Property on the current DO
+ ///////////////////////////////////////////////////////////////////////
+ DataObjectPtr newDO = 0;
+
+ SDOXMLString typeURI, typeName, propertyName;
+
+ ///////////////////////////////////////////////////////////////////////
+ // Determine the type. It is either specified by the xsi:type attribute
+ // or the localname is the name of a property on "RootType"
+ ///////////////////////////////////////////////////////////////////////
+ int i;
+ for (i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getUri().equalsIgnoreCase("http://www.w3.org/2001/XMLSchema-instance"))
+ {
+ if (attributes[i].getName().equalsIgnoreCase("type"))
+ {
+ SDOXMLString fullTypeName = attributes[i].getValue();
+ SDOXMLString pref;
+
+ int index = fullTypeName.firstIndexOf(':');
+ if (index < 0)
+ {
+ typeName = fullTypeName;
+ }
+ else
+ {
+ // Is the namespace prefix defined?
+ typeName = fullTypeName.substring(index+1);
+ pref = fullTypeName.substring(0, index);
+ }
+
+ // Convert the prefix to a namespace URI
+ const SDOXMLString* namespaceURI = namespaces.find(pref);
+ if (namespaceURI == 0)
+ {
+ namespaceURI = documentNamespaces.find(pref);
+ }
+ if (namespaceURI != 0)
+ {
+ typeURI = *namespaceURI;
+ }
+ }
+ else if (attributes[i].getName().equalsIgnoreCase("nil"))
+ {
+ if (attributes[i].getValue().equalsIgnoreCase("true"))
+ {
+ // the current setting needs to be setNull
+ bToBeNull = true;
+ }
+ }
+ }
+ } // End - attribute loop
+
+ if (typeURI.isNull())
+ {
+ typeURI = "";
+ }
+
+ SDOXMLString tns = URI;
+
+ try
+ {
+ if (currentDataObject == 0)
+ {
+ // This element should become the root data object
+
+ // Target namespace will be:
+ // the targetNamespaceURI if specified
+ // or the URI of xsi:type if specified
+ // or the URI of this element
+ if (!typeURI.equals(""))
+ {
+ tns = typeURI;
+ }
+
+ if (!targetNamespaceURI.isNull() && !targetNamespaceURI.equals(""))
+ {
+ tns = targetNamespaceURI;
+ }
+
+ // Check for localname as a property of the RootType
+ // if we do not already know the type
+ if (typeName.isNull())
+ {
+ const Type& rootType = dataFactory->getType(tns, "RootType");
+ propertyName = getSDOName(rootType, localname);
+ const Type& newType =
+ ((TypeImpl&)(rootType)).getRealPropertyType(propertyName);
+
+ typeURI = newType.getURI();
+ typeName = newType.getName();
+ }
+
+ // Create the root DataObject
+ if (isDataGraph)
+ {
+ DataObjectPtr rootdo = dataFactory->create(tns, "RootType");
+ setCurrentDataObject(rootdo);
+ changeSummaryDO = currentDataObject;
+ }
+ else
+ {
+ DataFactory* df = dataFactory;
+ ((DataFactoryImpl*)df)->setRootElementName(localname);
+ }
+
+ // NOTE: always creating DO doesn't cater for DataType as top element
+
+ const Type& tp = dataFactory->getType(typeURI,typeName);
+ if (tp.isDataType())
+ {
+ newDO = dataFactory->create(tns, "RootType");
+ currentPropertySetting = PropertySetting(newDO, localname,
+ bToBeNull);
+
+ // TODO - need instead to record the fact that its a primitive, not
+ // a real DO - and then present it as the root.
+ // newDO = dataFactory->create(tns, "RootType");
+ // const Type& tpr = dataFactory->getType(tns,"RootType");
+ // XSDTypeInfo* typeInfo = (XSDTypeInfo*)
+ // ((DASType*)&tpr)->getDASValue("XMLDAS::TypeInfo");
+ // if (typeInfo)
+ // {
+ // TypeDefinitionImpl* td;
+ // td = (TypeDefinitionImpl*)&(typeInfo->getTypeDefinition());
+ // if (td)td->isExtendedPrimitive = true;
+ // currentPropertySetting = PropertySetting(newDO, "value" /*localname*/,
+ // bToBeNull);
+
+ // }
+ // else
+ // {
+ // currentPropertySetting = PropertySetting(newDO, localname,
+ // bToBeNull);
+ // }
+
+ }
+ else
+ {
+
+ newDO = dataFactory->create(typeURI, typeName);
+
+ // get the type definition, and see if its an extended primitive.
+
+ XSDTypeInfo* typeInfo = (XSDTypeInfo*)
+ ((DASType*)&tp)->getDASValue("XMLDAS::TypeInfo");
+ if (typeInfo)
+ {
+ const TypeDefinitionImpl& typeDefinition = typeInfo->getTypeDefinition();
+ if (typeDefinition.isExtendedPrimitive)
+ {
+ // The name of this element is the name of a property on the current DO
+ currentPropertySetting = PropertySetting(newDO, localname,
+ bToBeNull);
+ }
+ }
+ }
+
+ } // End - currentDataObject == 0
+
+ else
+ { // currentDataObject != 0
+
+ // Get the Property from the dataObject
+ propertyName = getSDOName(*currentDataObjectType, localname);
+ const Type& type = currentDataObject->getType();
+
+
+ // go lower level so we can find open properties w/o exception
+ DataObject* dob = currentDataObject;
+ const PropertyImpl* pprop = ((DataObjectImpl*)dob)->getPropertyImpl(propertyName);
+ if (pprop == 0)
+ {
+ if (type.isOpenType())
+ {
+ pprop = handleOpenType(
+ tns,
+ localname,
+ (DataObjectImpl*)dob,
+ namespaces,
+ attributes,
+ typeURI,
+ typeName,
+ bToBeNull);
+ }
+ if (pprop == 0)
+ {
+ // this is an open property , we will need to create it
+ LOGERROR_1(WARNING,"SDOSAX2Parser Unknown element:%s",
+ (const char *)localname);
+
+ // We need to ignore all events until the end tag for this element
+ ignoreEvents = true;
+ ignoreTag.localname = localname;
+ ignoreTag.uri = URI;
+ ignoreTag.prefix = prefix;
+ ignoreTag.tagCount = 0;
+ if (setter != 0)
+ {
+ char *msg = new char[strlen((const char*)localname) + 32];
+ if (msg) {
+ sprintf(msg,"Parser found unknown element %s",
+ (const char*)localname);
+ setter->setError( msg );
+ delete msg;
+ }
+ }
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit5");
+ return;
+ }
+ else
+ {
+
+ const Property& prop = (Property&)*pprop;
+ const TypeImpl* propType = ((TypeImpl&)type).getRealPropertyTypeImpl(propertyName);
+ if (propType == 0)
+ {
+ // could be a previously created open type property
+ propType = (const TypeImpl*)pprop->getTypeImpl();
+ }
+ if (propType != 0)
+ {
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)((DASProperty*)&prop)->getDASValue("XMLDAS::PropertyInfo");
+ if ((pi && pi->getPropertyDefinition().isIDREF)
+ || prop.isReference())
+ {
+ // The name of this element is the name of a property on the current DO
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName, bToBeNull,
+ true);
+ }
+
+ // If it is a DataType then we need set the value
+ else if (propType->isDataType() )
+ {
+ // The name of this element is the name of a property on the current DO
+ currentPropertySetting = PropertySetting(currentDataObject, propertyName,
+ bToBeNull);
+ }
+ else
+ {
+
+ // If typeName is not set then create object of Type of Property
+ // otherwise use the typeURI and typeName specified by e.g. xsi:type
+ if (typeName.isNull())
+ {
+ newDO = dataFactory->create(propType->getURI(), propType->getName());
+ }
+ else
+ {
+ newDO = dataFactory->create(typeURI, typeName);
+ }
+
+ XSDTypeInfo* typeInfo = (XSDTypeInfo*)
+ ((DASType*)propType)->getDASValue("XMLDAS::TypeInfo");
+ if (typeInfo && typeInfo->getTypeDefinition().isExtendedPrimitive)
+ {
+ // The name of this element is the name of a property on the current DO
+ currentPropertySetting = PropertySetting(newDO, "value", bToBeNull);
+ }
+
+ }
+ }
+ } // End // currentDataObject != 0
+ } // end prop != 0
+ if (newDO)
+ {
+ if (!setDO(newDO, propertyName))
+ {
+ LOGERROR_1(WARNING,"SDOSAX2Parser Unknown element:%s",
+ (const char *)localname);
+
+ // We need to ignore all events until the end tag for this element
+ ignoreEvents = true;
+ ignoreTag.localname = localname;
+ ignoreTag.uri = URI;
+ ignoreTag.prefix = prefix;
+ ignoreTag.tagCount = 0;
+ if (setter != 0)
+ {
+ char *msg = new char[strlen((const char*)localname) + 32];
+ if (msg) {
+ sprintf(msg,"Parser found unknown element %s",
+ (const char*)localname);
+ setter->setError( msg );
+ delete msg;
+ }
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit6");
+ return;
+ }
+ }
+ } // end try
+
+ catch (const SDOTypeNotFoundException& )
+ {
+
+ LOGERROR_1(WARNING,"SDOSAX2Parser Unknown element:%s",
+ (const char *)localname);
+
+ // We need to ignore all events until the end tag for this element
+ ignoreEvents = true;
+ ignoreTag.localname = localname;
+ ignoreTag.uri = URI;
+ ignoreTag.prefix = prefix;
+ ignoreTag.tagCount = 0;
+ if (setter != 0)
+ {
+ char *msg = new char[strlen((const char*)localname) + 32];
+ if (msg) {
+ sprintf(msg,"Parser found unknown element %s",
+ (const char*)localname);
+ setter->setError( msg );
+ delete msg;
+ }
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit7");
+ return;
+ }
+
+#ifdef _DEBUG
+ catch (const SDOPropertyNotFoundException& e )
+#else
+ catch (const SDOPropertyNotFoundException& )
+#endif
+ {
+ LOGERROR_1(WARNING,"SDOSAX2Parser Unknown element exception:%s",
+ (const char *)localname);
+ LOGSDOEXCEPTION(WARNING,"Exception:",e);
+
+ // We need to ignore all events until the end tag for this element
+ ignoreEvents = true;
+ ignoreTag.localname = localname;
+ ignoreTag.uri = URI;
+ ignoreTag.prefix = prefix;
+ ignoreTag.tagCount = 0;
+ if (setter != 0)
+ {
+ char *msg = new char[strlen((const char*)localname) + 32];
+ if (msg)
+ {
+ sprintf(msg,"Parser found unknown element %s",
+ (const char*)localname);
+ setter->setError( msg );
+ delete msg;
+ }
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit8");
+ return;
+ }
+
+ setAttributes(tns,namespaces, attributes);
+
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: startElementNs - exit9");
+ }
+
+
+ void SDOSAX2Parser::endElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI)
+ {
+
+ LOGENTRY(INFO,"SDOSAX2Parser: endElementNs");
+
+ newSequence = true;
+
+ if (localname.equals("changeSummary"))
+ {
+ // end of change summary
+ dealingWithChangeSummary = false;
+ LOGINFO(INFO,"SDOSAX2Parser: Finished change summary");
+ LOGEXIT(INFO,"SDOSAX2Parser: endElementNs - exit1");
+ return;
+ }
+
+ if (dealingWithChangeSummary)
+
+ {
+ if (csbuilder == 0)
+ {
+ LOGERROR(WARNING,"SDOSAX2Parser: End change summary with no builder");
+ LOGEXIT(INFO,"SDOSAX2Parser: endElementNs - exit2");
+ return;
+ }
+ csbuilder->processEnd(localname,
+ prefix,
+ URI);
+ LOGEXIT(INFO,"SDOSAX2Parser: endElementNs - exit3");
+ return;
+ }
+
+
+ if (ignoreEvents)
+ {
+ // Check for the tag we are waiting for
+ if ( (ignoreTag.localname.equals(localname))
+ && (ignoreTag.uri.equals(URI))
+ && (ignoreTag.prefix.equals(prefix)) )
+ {
+ if (ignoreTag.tagCount == 0)
+ {
+ ignoreEvents = false;
+ }
+ ignoreTag.tagCount--;
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: endElementNs - exit4");
+ return;
+ }
+
+ // If currentPropertySetting is set (name is not null)
+ // then we need to set the property now
+ if (!currentPropertySetting.name.isNull())
+ {
+ if (currentPropertySetting.isNULL)
+ {
+
+ currentPropertySetting.dataObject->
+ setNull((const char*)currentPropertySetting.name);
+
+ }
+ else
+ {
+ if (currentPropertySetting.value.isNull())
+ {
+ currentPropertySetting.value = SDOXMLString("");
+ }
+ try
+ {
+ const Type& tp = currentPropertySetting.dataObject->getType();
+ XSDTypeInfo* typeInfo = (XSDTypeInfo*)
+ ((DASType*)&tp)->getDASValue("XMLDAS::TypeInfo");
+ if (typeInfo && typeInfo->getTypeDefinition().isExtendedPrimitive)
+ {
+ const Property& p = currentPropertySetting.dataObject->getProperty(
+ "value");
+ if (p.isMany())
+ {
+ // use the sequence interface if it exists.
+ if (currentPropertySetting.dataObject->getType().isSequencedType())
+ {
+ SequencePtr seq = currentPropertySetting.dataObject->getSequence();
+ seq->addCString("value", currentPropertySetting.value);
+ }
+ else
+ {
+ DataObjectList& dl = currentPropertySetting.dataObject->
+ getList((const char*)"value");
+ dl.append((const char*)currentPropertySetting.value);
+ }
+
+ }
+ else
+ {
+ // use the sequence interface if it exists
+ if (currentPropertySetting.dataObject->getType().isSequencedType())
+ {
+ SequencePtr seq = currentPropertySetting.dataObject->getSequence();
+ seq->addCString("value", currentPropertySetting.value);
+ }
+ else
+ {
+ currentPropertySetting.dataObject->
+ setCString((const char*)"value", currentPropertySetting.value );
+ }
+ }
+ if (dataObjectStack.size() == 0 || rootDataObject == dataObjectStack.top())
+ {
+ currentDataObject = 0;
+ currentDataObjectType = 0;
+ }
+ else
+ {
+ dataObjectStack.pop();
+ currentDataObject = dataObjectStack.top();
+ currentDataObjectType = &(currentDataObject->getType());
+ }
+
+ }
+ else
+ {
+ if (currentPropertySetting.isIDREF)
+ {
+ // remember this value to resolve later
+ IDRef ref(currentPropertySetting.dataObject,
+ currentPropertySetting.name,
+ currentPropertySetting.value );
+ IDRefs.insert(IDRefs.end(), ref);
+ }
+ else
+ {
+ if (currentPropertySetting.dataObject->getType().isSequencedType())
+ {
+ SequencePtr seq = currentPropertySetting.dataObject->getSequence();
+ seq->addCString(currentPropertySetting.name, currentPropertySetting.value);
+ }
+ // Always set the property as a String. SDO will do the conversion
+
+ // It might be a single setting for a many-valued property.
+ // may throw SDOPropertyNotFoundException
+ else {
+ const Property& p = currentPropertySetting.dataObject->getProperty(
+ currentPropertySetting.name);
+ if (p.isMany())
+ {
+ DataObjectList& dl = currentPropertySetting.dataObject->
+ getList((const char*)currentPropertySetting.name);
+ dl.append((const char*)currentPropertySetting.value);
+ }
+ else
+ {
+ currentPropertySetting.dataObject->
+ setCString((const char*)currentPropertySetting.name, currentPropertySetting.value );
+ }
+ }
+ }
+ }
+ }
+#ifdef _DEBUG
+ catch (const SDOPropertyNotFoundException& e)
+#else
+ catch (const SDOPropertyNotFoundException&)
+#endif
+ {
+ LOGSDOEXCEPTION(WARNING,"SDOSAX2Parser error attribute (ignored)",e);
+ }
+ }
+ currentPropertySetting = PropertySetting();
+
+ }
+ else
+ {
+ if (changeSummary
+ && changeSummaryLogging
+ && changeSummaryDO == currentDataObject)
+ {
+ // Set logging on for this DO before it is popped from stack
+ ChangeSummary* cs = currentDataObject->getChangeSummary();
+ if (cs)
+ {
+ cs->beginLogging();
+ }
+ changeSummary = false;
+ }
+
+ if (dataObjectStack.size() == 0 || rootDataObject == dataObjectStack.top())
+ {
+ currentDataObject = 0;
+ currentDataObjectType = 0;
+ }
+ else
+ {
+ dataObjectStack.pop();
+ currentDataObject = dataObjectStack.top();
+ currentDataObjectType = &(currentDataObject->getType());
+ }
+ }
+ LOGEXIT(INFO,"SDOSAX2Parser: endElementNs - exit4");
+ }
+
+
+
+ void SDOSAX2Parser::characters(const SDOXMLString& chars)
+ {
+ if (chars.isNull()) return;
+
+ if (!strcmp((const char*)chars,"\r") ||
+ !strcmp((const char*)chars,"\n"))
+ {
+ newSequence = true;
+ return;
+ }
+
+ if (dealingWithChangeSummary)
+ {
+ if (csbuilder == 0)
+ {
+ LOGERROR(WARNING,"SDOSAX2Parser: no builder");
+ return;
+ }
+ csbuilder->processChars(chars);
+ return;
+ }
+
+ if (ignoreEvents)
+ return;
+
+ if (!currentPropertySetting.name.isNull())
+ {
+ currentPropertySetting.value = currentPropertySetting.value + chars;
+ return;
+ }
+ DataObject* dob = currentDataObject;
+ if ((dob != 0) && ((DataObjectImpl*)dob)->getTypeImpl().isFromList())
+ {
+ // this is a list,so we need to split it up
+ DataObjectList& dl = currentDataObject->getList(
+ (const char *)"values");
+
+ const char* str = (const char*)chars;
+ char* buf = new char[strlen(str)+1];
+ if (!buf) return;
+
+ strcpy(buf,str);
+
+ int start_point = 0;
+ int end_point;
+ int final = strlen(buf);
+
+ do {
+ if (start_point >= final)break;
+ while (buf[start_point] == (char)0x20 || buf[start_point] == (char)0x09
+ || buf[start_point] == (char)0x0A || buf[start_point] == (char)0x0D )start_point++;
+ end_point = start_point;
+ while (buf[end_point] != (char)0x20 && buf[end_point] != (char)0x09 &&
+ buf[end_point] != (char)0x0A && buf[end_point] != (char)0x0D &&
+ buf[end_point] != 0x0)end_point++;
+ if (end_point == start_point)break;
+ *(buf+end_point) = 0;
+ dl.append((const char*)(buf+start_point));
+ start_point = end_point + 1;
+ } while(1);
+
+ delete buf;
+ return;
+ }
+
+
+ // If the current DataObject is a sequenced Type
+ // then add this as text to the sequence
+ if (currentDataObject && currentDataObjectType->isSequencedType())
+ {
+ SequencePtr seq = currentDataObject->getSequence();
+ if (seq)
+ {
+ if (newSequence == true)
+ {
+ seq->addText(chars);
+ newSequence = false;
+ }
+ else
+ {
+ for (int k= (int)(seq->size())-1; k>=0 ; k --)
+ {
+ if (seq->isText(k))
+ {
+ const char * s = seq->getCStringValue(k);
+
+ if (s)
+ {
+ char *combi =
+ new char[strlen(s)+strlen(chars) + 2];
+ strcpy(combi,s);
+ strcat(combi,chars);
+ seq->setText(k,(const char*)combi);
+ delete combi;
+ }
+ else
+ {
+ seq->setText(k,chars);
+ }
+ return;
+ }
+ }
+ seq->addText(chars);
+ }
+ return;
+ }
+ }
+
+ }
+
+
+ void SDOSAX2Parser::setCurrentDataObject(DataObjectPtr currentDO)
+ {
+ currentDataObject = currentDO;
+ dataObjectStack.push(currentDataObject);
+ currentDataObjectType = &(currentDataObject->getType());
+ if (rootDataObject == 0)
+ {
+ rootDataObject = currentDataObject;
+ }
+ }
+
+ const SDOXMLString& SDOSAX2Parser::getSDOName(const Type& type, const SDOXMLString& localName)
+ {
+
+/* XSDTypeInfo* typeInfo = (XSDTypeInfo*)((DASType*)&type)->getDASValue("XMLDAS::TypeInfo");
+ if (typeInfo)
+ {
+ const TypeDefinitionImpl& typeDefinition = typeInfo->getTypeDefinition();
+ XmlDasPropertyDefs::const_iterator propsIter;
+ for (propsIter = typeDefinition.properties.begin(); propsIter != typeDefinition.properties.end(); propsIter++)
+ {
+ const PropertyDefinitionImpl& prop = *propsIter;
+ if (prop.localname.equals(localName))
+ {
+ return prop.name;
+ }
+ for (int i=0;i< prop.substituteNames.size();i++)
+ {
+ if (prop.substituteLocalNames[i].equals(localName))
+ {
+ return prop.substituteNames[i];
+ // possibly should be return prop.name;
+ }
+ }
+ }
+ }
+ */
+
+ PropertyList pl = type.getProperties();
+ for (int i = 0; i < pl.size(); i++)
+ {
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)((DASProperty*)&pl[i])->getDASValue("XMLDAS::PropertyInfo");
+ if (pi)
+ {
+ const PropertyDefinitionImpl& propdef = pi->getPropertyDefinition();
+ if (localName .equals(propdef.localname))
+ return propdef.name;
+
+ for (int j=0;j< propdef.substituteNames.size();j++)
+ {
+ if (propdef.substituteLocalNames[j].equals(localName))
+ {
+ return propdef.substituteNames[j];
+ // possibly should be return propdef.name;
+ }
+ }
+ }
+ }
+
+
+
+ return localName;
+ }
+
+
+ std::istream& operator>>(std::istream& input, SDOSAX2Parser& parser)
+ {
+ parser.stream(input);
+
+ return input;
+ }
+
+ std::istringstream& operator>>(std::istringstream& input, SDOSAX2Parser& parser)
+ {
+ parser.stream(input);
+
+ return input;
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.h
new file mode 100644
index 0000000000..4a985a8c02
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSAX2Parser.h
@@ -0,0 +1,170 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SDOSAX2PARSER_H_
+#define _SDOSAX2PARSER_H_
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SAX2Parser.h"
+
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/PropertySetting.h"
+#include "commonj/sdo/ChangeSummaryImpl.h"
+#include "commonj/sdo/ChangeSummaryBuilder.h"
+
+
+#include <stack>
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+/**
+ * SDOSAX2Parser implements SAX2Parser.
+ * This class gets called back by the libxml library, and
+ * deals with the creation of data objects from XML.
+ */
+
+ class SDOSAX2Parser : public SAX2Parser
+ {
+
+
+ public:
+
+
+ SDOSAX2Parser(
+ DataFactoryPtr df,
+ const SDOXMLString& targetNamespaceURI,
+ DataObjectPtr& rootDO,
+ ParserErrorSetter* insetter);
+
+ virtual ~SDOSAX2Parser();
+
+ virtual void startDocument();
+ virtual void endDocument();
+
+ virtual bool setDO(DataObjectPtr newDO,
+ SDOXMLString& propertyName);
+
+ virtual void setAttributes(
+ SDOXMLString& tns,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void handleOpenAttribute(
+ SDOXMLString& tns,
+ const char* propuri,
+ const char* propname,
+ const char* value);
+
+ virtual const PropertyImpl* handleOpenType(
+ SDOXMLString& tns,
+ const SDOXMLString& localname,
+ DataObjectImpl* dob,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes,
+ SDOXMLString& xsitypeURI,
+ SDOXMLString& xsitypeName,
+ bool bToBeNull);
+
+ virtual void startElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void endElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI);
+
+ virtual void characters(const SDOXMLString& chars);
+
+ friend std::istream& operator>>(std::istream& input, SDOSAX2Parser& parser);
+ friend std::istringstream& operator>>(std::istringstream& input, SDOSAX2Parser& parser);
+
+
+ private:
+ SDOXMLString targetNamespaceURI;
+ DataFactoryPtr dataFactory;
+ DataObjectPtr& rootDataObject;
+
+
+ std::stack<DataObjectPtr> dataObjectStack;
+
+ DataObjectPtr currentDataObject;
+ bool isDataGraph;
+ bool newSequence;
+
+ void setCurrentDataObject(DataObjectPtr currentDO);
+ const Type* currentDataObjectType;
+ const SDOXMLString& getSDOName(const Type& type, const SDOXMLString& localName);
+
+ PropertySetting currentPropertySetting;
+
+ void reset();
+
+ bool setNamespaces;
+ SAX2Namespaces documentNamespaces;
+
+ bool changeSummary;
+ DataObjectPtr changeSummaryDO;
+ bool changeSummaryLogging;
+ bool dealingWithChangeSummary;
+ ChangeSummaryBuilder* csbuilder;
+
+ bool ignoreEvents;
+ struct ignoretag
+ {
+ SDOXMLString localname;
+ SDOXMLString uri;
+ SDOXMLString prefix;
+ int tagCount;
+ } ignoreTag;
+
+
+ typedef std::map<SDOXMLString, DataObjectPtr> ID_MAP;
+ ID_MAP IDMap;
+
+ class IDRef
+ {
+ public:
+ IDRef(DataObjectPtr dataobj,
+ const SDOXMLString& prop,
+ const SDOXMLString& val)
+ : dataObject(dataobj), property(prop), value(val)
+ {}
+
+ DataObjectPtr dataObject;
+ SDOXMLString property;
+ SDOXMLString value;
+ };
+
+ typedef std::list<IDRef> ID_REFS;
+ ID_REFS IDRefs;
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif //_SDOSAX2PARSER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSPI.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSPI.h
new file mode 100644
index 0000000000..1165514123
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSPI.h
@@ -0,0 +1,25 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/ChangeSummary.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/SDO.h"
+
+#include "commonj/sdo/DASValues.h"
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp
new file mode 100644
index 0000000000..c9476ca867
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.cpp
@@ -0,0 +1,1337 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+#include "libxml/uri.h"
+#include "commonj/sdo/SDOSchemaSAX2Parser.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include "commonj/sdo/XSDTypeInfo.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/Logging.h"
+#include "commonj/sdo/SDOUtils.h"
+
+
+#include <stdio.h>
+
+extern "C" {
+ void sdo_error(void *ctx, const char *msg, ...);
+}
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ SDOSchemaSAX2Parser::SDOSchemaSAX2Parser(SchemaInfo& schemaInf,
+ ParserErrorSetter* insetter)
+ : schemaInfo(schemaInf) ,SAX2Parser(insetter)
+ {
+ bInSchema = false;
+ bInvalidElement = false;
+ bInInvalidContent = false;
+ bInvalidList = false;
+ inGroup = 0;
+ preParsing = true;
+ }
+
+ SDOSchemaSAX2Parser::~SDOSchemaSAX2Parser()
+ {
+ }
+
+
+ void SDOSchemaSAX2Parser::storeStartElementEvent(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ // copy the event to as list for replay.
+ if (currentGroup)
+ {
+ currentGroup->events.insert( currentGroup->events.end(),
+ GroupEvent(
+ localname,prefix,URI,namespaces,attributes));
+ }
+
+ }
+
+ void SDOSchemaSAX2Parser::storeEndElementEvent(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI)
+ {
+ // copy the event to as list for replay.
+ if (currentGroup)
+ {
+ currentGroup->events.insert(currentGroup->events.end(),
+ GroupEvent(localname,prefix,URI));
+ }
+
+ }
+
+ void SDOSchemaSAX2Parser::replayEvents(
+ const SDOXMLString& uri,
+ const SDOXMLString& name,
+ bool isGroup)
+ {
+ for (int i=0;i< groupList.size(); i++)
+ {
+ if (groupList[i].isAttributeGroup != isGroup)
+ {
+ if (
+ (!name.isNull() && name.equals(groupList[i].name))
+ &&
+ (
+ (uri.isNull() && groupList[i].uri.isNull())
+ || uri.equals(groupList[i].uri))
+ )
+ {
+ for (int j=0;j< groupList[i].events.size();j++)
+ {
+ if (groupList[i].events[j].isStartEvent)
+ {
+ startElementNs(
+ (const SDOXMLString&)
+ groupList[i].events[j].localname,
+ (const SDOXMLString&)
+ groupList[i].events[j].prefix,
+ (const SDOXMLString&)
+ groupList[i].events[j].URI,
+ (const SAX2Namespaces&)
+ groupList[i].events[j].namespaces,
+ (const SAX2Attributes&)
+ groupList[i].events[j].attributes);
+ }
+ else
+ {
+ endElementNs(
+ (const SDOXMLString&)
+ groupList[i].events[j].localname,
+ (const SDOXMLString&)
+ groupList[i].events[j].prefix,
+ (const SDOXMLString&)
+ groupList[i].events[j].URI);
+ }
+ }
+ return;
+ }
+ }
+ }
+ // no group found
+ if (setter)
+ {
+ char *msg = new char[strlen((const char*)name) + 32];
+ if (msg)
+ {
+ sprintf(msg,"Use of undefined group %s",
+ (const char*)name);
+ setter->setError( msg );
+ delete msg;
+ }
+ }
+ }
+
+ // ============================================================================
+ // endDocument
+ // ============================================================================
+ void SDOSchemaSAX2Parser::endDocument()
+ {
+ preParsing=!preParsing;
+ schemaInfo.getSchemaNamespaces().empty();
+ }
+
+
+ // ============================================================================
+ // startElementNS
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ LOGINFO_1( INFO,"SchemaParser:startElementNs:%s",(const char*)localname);
+
+ if (URI.equalsIgnoreCase("http://www.w3.org/2001/XMLSchema"))
+ {
+
+ ///////////////////////////////////////////////////////////////////////
+ // Handle schema
+ // Set the URI from the targetNamespace of the xsd:schema element
+ // Remember namespace mappings
+ // Create the root Type
+ ///////////////////////////////////////////////////////////////////////
+
+
+ if (localname.equalsIgnoreCase("schema"))
+ {
+ bInSchema = true;
+ // Handle namespace definitions
+
+
+ schemaInfo.getSchemaNamespaces().merge(namespaces);
+
+ // Handle attributes
+ for (int i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getName().equalsIgnoreCase("targetNamespace"))
+ {
+ schemaInfo.setTargetNamespaceURI(attributes[i].getValue());
+ }
+ }
+
+
+ currentType.uri = schemaInfo.getTargetNamespaceURI();
+ currentType.name = "RootType";
+ currentType.localname="RootType";
+ return;
+
+ } // end schema handling
+ if (preParsing)
+ {
+ // we are now pre-parsing groups so that we can allow them to be
+ // defined after use.
+
+ if (inGroup > 0)
+ {
+ if ( localname.equalsIgnoreCase("group")
+ || localname.equalsIgnoreCase("attributeGroup"))
+ {
+ inGroup++;
+ }
+ // check for a group reference first
+ // we are inside a group....
+ storeStartElementEvent(
+ localname,
+ prefix,
+ URI,
+ namespaces,
+ attributes);
+ return;
+ }
+
+ if ( localname.equalsIgnoreCase("group")
+ || localname.equalsIgnoreCase("attributeGroup"))
+ {
+ inGroup++;
+ int i;
+ for (i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getName().equalsIgnoreCase("ref"))
+ {
+ // dont store references.
+ return;
+ }
+ }
+
+ groupList.insert(groupList.begin(),GroupDefinition());
+ currentGroup = &groupList[0];
+
+ if (localname.equalsIgnoreCase("group"))
+ currentGroup->isAttributeGroup = false;
+ else currentGroup->isAttributeGroup = true;
+
+ for (i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getName().equalsIgnoreCase("name"))
+ {
+ currentGroup->uri = schemaInfo.getTargetNamespaceURI();
+ currentGroup->name = attributes[i].getValue();
+ }
+ }
+ }
+ } // end of preParsing groups.
+ else
+ {
+ if (inGroup == 0)
+ {
+ // Handle <import> of other schema
+ if (localname.equalsIgnoreCase("import"))
+ {
+ // TODO - import and include treated equally for now - need to
+ // separate out the namespace info for import
+ startInclude(localname, prefix, URI, namespaces, attributes);
+ }
+
+ // Handle <include> of other schema
+ else if (localname.equalsIgnoreCase("include"))
+ {
+ startInclude(localname, prefix, URI, namespaces, attributes);
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ // Handle elements and attributes
+ // These become Properties of the current Type
+ // ?? Any special handling of global elements???
+ ///////////////////////////////////////////////////////////////////////
+ else if (localname.equalsIgnoreCase("element"))
+ {
+ if (!bInInvalidContent) startElement(localname, prefix, URI, namespaces, attributes);
+ }
+ else if (localname.equalsIgnoreCase("attribute"))
+ {
+ if (!bInInvalidContent) startAttribute(localname, prefix, URI, namespaces, attributes);
+ }
+ else if (localname.equalsIgnoreCase("any")
+ || localname.equalsIgnoreCase("anyAttribute"))
+ {
+ // the type containing this is to be created as open
+ if (!bInInvalidContent) currentType.isOpen = true;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////
+ // Handle complexType
+ // These become new types
+ ///////////////////////////////////////////////////////////////////////
+ else if (localname.equalsIgnoreCase("complexType"))
+ {
+ if (!bInInvalidContent) startComplexType(localname, prefix, URI, namespaces, attributes);
+ } // end complexType handling
+
+ else if (localname.equalsIgnoreCase("choice")
+ || localname.equalsIgnoreCase("sequence")
+ || localname.equalsIgnoreCase("all"))
+ {
+ if (!bInInvalidContent) startGroup(localname, prefix, URI, namespaces, attributes);
+ } // end Group handling
+
+ else if ( localname.equalsIgnoreCase("group")
+ || localname.equalsIgnoreCase("attributeGroup"))
+ {
+
+ int i;
+ for (i=0; i < attributes.size(); i++)
+ {
+ if (attributes[i].getName().equalsIgnoreCase("ref"))
+ {
+ XMLQName qname(attributes[i].getValue(),
+ schemaInfo.getSchemaNamespaces(),
+ namespaces);
+ if (qname.getURI().isNull())
+ {
+ replayEvents(schemaInfo.getTargetNamespaceURI(), qname.getLocalName(),
+ localname.equalsIgnoreCase("group"));
+ }
+ else
+ {
+ replayEvents(qname.getURI(), qname.getLocalName(),
+ localname.equalsIgnoreCase("group"));
+ }
+ }
+ }
+ inGroup++;
+ // if theres no 'ref' then its a group definition, and we
+ // already pre-parsed it.
+ }
+ else if (localname.equalsIgnoreCase("list"))
+ {
+ startList(
+ localname,
+ prefix,
+ URI,
+ namespaces,
+ attributes);
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ // Handle simpleType
+ // These become new types
+ ///////////////////////////////////////////////////////////////////////
+ else if (localname.equalsIgnoreCase("simpleType"))
+ {
+ if (!bInInvalidContent) startSimpleType(localname, prefix, URI, namespaces, attributes);
+ } // end complexType handling
+
+ else if (localname.equalsIgnoreCase("restriction"))
+ {
+ if (!bInInvalidContent) startRestriction(localname, prefix, URI, namespaces, attributes);
+ }
+
+ else if (localname.equalsIgnoreCase("extension"))
+ {
+ if (!bInInvalidContent) startExtension(localname, prefix, URI, namespaces, attributes);
+ }
+ // Handle <import> of other schema
+ else if (localname.equalsIgnoreCase("union"))
+ {
+ // TODO - unions not yet supported
+ bInInvalidContent = true;
+ if (setter)
+ {
+ setter->setError("Schema contains a union which is not yet implemented");
+ }
+ }
+ }
+ }
+ }
+ else // not in schema - check for any extra namespaces
+ {
+ schemaInfo.getSchemaNamespaces().merge(namespaces);
+ }
+
+ }
+
+
+ // ============================================================================
+ // endElementNs
+ // ============================================================================
+ void SDOSchemaSAX2Parser::endElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI)
+ {
+ LOGINFO_1( INFO,"SchemaParser:endElementNs:%s",(const char*)localname);
+
+ if (URI.equalsIgnoreCase("http://www.w3.org/2001/XMLSchema"))
+ {
+ if (localname.equalsIgnoreCase("schema"))
+ {
+ bInSchema = false;
+ }
+
+ ///////////////////////////////////////////////////////////////////////
+ // Handle complexType
+ // Pop the Type off our stack
+ ///////////////////////////////////////////////////////////////////////
+
+ // We do not support unions, so all inside a union, plus the containing
+ // element are invalid for now.
+ //
+ if (!bInInvalidContent)
+ {
+ if (preParsing)
+ {
+ if (inGroup > 0)
+ {
+ if (localname.equalsIgnoreCase("group")
+ || localname.equalsIgnoreCase("attributeGroup"))
+ {
+ inGroup--;
+ if (inGroup < 0)inGroup = 0; // should never happen.
+ }
+ if (inGroup > 0) // still need to store end of group ref
+ {
+ storeEndElementEvent(
+ localname,
+ prefix,
+ URI);
+ }
+ }
+ }
+ else
+ {
+ if (localname.equalsIgnoreCase("group")
+ || localname.equalsIgnoreCase("attributeGroup"))
+ {
+ inGroup--;
+ if (inGroup < 0) inGroup = 0;
+ // outside of preparse, dont need to do anything.
+ }
+ else if (inGroup == 0)
+ {
+ if (localname.equalsIgnoreCase("complexType"))
+ {
+ if (!bInvalidElement) defineType();
+ } // end complexType handling
+ else if (localname.equalsIgnoreCase("simpleType"))
+ {
+ if (!bInvalidElement) defineType();
+ }
+ else if (localname.equalsIgnoreCase("schema"))
+ {
+ if (!bInvalidElement) defineType();
+ } // end complexType handling
+ else if (localname.equalsIgnoreCase("element")
+ || localname.equalsIgnoreCase("attribute"))
+ {
+ // PropertyDefinition should now be complete
+ if (!bInvalidElement) defineProperty();
+ }
+ else if (localname.equalsIgnoreCase("choice")
+ || localname.equalsIgnoreCase("sequence")
+ || localname.equalsIgnoreCase("all"))
+ {
+ if (!bInvalidElement) currentType.isMany = false;
+ }
+ else if (localname.equalsIgnoreCase("list"))
+ {
+ // PropertyDefinition should now be complete
+ if (!bInvalidList) defineProperty();
+ bInvalidList = false;
+ }
+ bInvalidElement = false;
+ }
+ }
+
+ } // bInUnsupportedContent
+ if (localname.equalsIgnoreCase("union"))
+ {
+ bInInvalidContent = false;
+ // the enclosing element is not useful
+ bInvalidElement = true;
+ }
+ }
+
+ }
+
+ // ============================================================================
+ // used by startInclude to try to locate the file
+ // ============================================================================
+
+ int SDOSchemaSAX2Parser::startSecondaryParse(
+ SDOSchemaSAX2Parser& schemaParser,
+ SDOXMLString& schemaLocation)
+ {
+ int i,j,k;
+ SDOXMLString sl = getCurrentFile();
+
+ i = sl.lastIndexOf('/');
+ j = sl.lastIndexOf('\\');
+ if ((j > i) || (i < 0))i=j;
+ if (i>=0)
+ {
+ sl = sl.substring(0,i+1) + schemaLocation;
+ try {
+ if (-1 != schemaParser.parse((const char *)sl))
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+ k = schemaLocation.lastIndexOf('/');
+ j = schemaLocation.lastIndexOf('\\');
+ if ((j > k) || (k < 0))k=j;
+ if (k>=0)
+ {
+ sl = sl.substring(0,i+1) + schemaLocation.substring(0,k+1);
+ try {
+ if (-1 != schemaParser.parse((const char *)sl))
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+ }
+ }
+ try {
+ if (-1 != schemaParser.parse((const char *)schemaLocation))
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+ k = schemaLocation.lastIndexOf('/');
+ j = schemaLocation.lastIndexOf('\\');
+ if ((j > k) || (k < 0))k=j;
+ if (k>=0)
+ {
+ sl = schemaLocation.substring(0,k+1);
+ try {
+ if (-1 != schemaParser.parse((const char *)sl))
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+ }
+ return 0;
+ }
+
+
+ // ============================================================================
+ // startInclude
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startInclude(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ LOGINFO_1( INFO,"SchemaParser:startInclude:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ SDOXMLString schemaLocation = attributes.getValue("schemaLocation");
+ if (!schemaLocation.isNull())
+ {
+ SchemaInfo schemaInf;
+ SDOSchemaSAX2Parser schemaParser(schemaInf, (ParserErrorSetter*)setter);
+
+ if (startSecondaryParse(schemaParser,schemaLocation) == 0)
+ {
+ //
+ // we were not able to start the parse
+ return;
+ }
+
+
+ TypeDefinitionsImpl& typedefs = schemaParser.getTypeDefinitions();
+ XMLDAS_TypeDefs types = typedefs.types;
+ XMLDAS_TypeDefs::iterator iter;
+ for (iter=types.begin(); iter != types.end(); iter++)
+ {
+ if ((*iter).second.name.equals("RootType")
+ && currentType.name.equals("RootType")
+ && (*iter).second.uri.equals(currentType.uri))
+ {
+ // This must be true for an import/include to be
+ // legally positioned
+
+ XMLDAS_TypeDefs::iterator find = typeDefinitions.types.find(
+ (*iter).first);
+
+ std::list<PropertyDefinitionImpl>::iterator propit;
+ std::list<PropertyDefinitionImpl>::iterator currpropit;
+ bool found;
+
+ for (propit = (*iter).second.properties.begin() ;
+ propit != (*iter).second.properties.end(); ++ propit)
+ {
+ found = false;
+ // do not merge properties whose names clash
+ for ( currpropit = currentType.properties.begin();
+ currpropit != currentType.properties.end();
+ ++currpropit)
+ {
+ if ((*currpropit).name.equals((*propit).name))
+ {
+ found = true;
+ break;
+ }
+ }
+ if (!found)
+ {
+ currentType.properties.insert(
+ currentType.properties.end(),*propit);
+ }
+ }
+ }
+ else
+ {
+ typeDefinitions.types.insert(*iter);
+ }
+ }
+ }
+ }
+
+
+ // ============================================================================
+ // startList
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startList(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+
+ LOGINFO_1( INFO,"SchemaParser:startList:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ // invent a property called "values" to hold the list
+
+ SDOXMLString typeName = attributes.getValue("itemType");
+
+ if (typeName.isNull())
+ {
+ // we do not support lists with no item type (yet).
+ if (setter)
+ {
+ setter->setError("Schema contains a list with no type - not supported");
+ }
+ bInvalidList = true;
+ return;
+ }
+
+ currentType.dataType = false;
+ currentType.isFromList = true;
+
+ // attribute to set the list type
+ // define an internal property to hold the list
+ PropertyDefinitionImpl thisProperty;
+ thisProperty.name = "values";
+ thisProperty.localname = "values";
+ thisProperty.isContainment = false;
+ thisProperty.isElement=true;
+ thisProperty.isMany = true;
+
+ XMLQName qname = resolveTypeName(
+ typeName,
+ namespaces,
+ thisProperty.typeUri,
+ thisProperty.typeName);
+ thisProperty.fullTypeName = typeName;
+
+ setCurrentProperty(thisProperty);
+
+ }
+
+ // ============================================================================
+ // startElement
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startElement(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+
+ if (!bInSchema) return;
+
+ PropertyDefinitionImpl thisProperty;
+
+ LOGINFO_1( INFO,"SchemaParser:startElement:%s",(const char*)localname);
+
+ thisProperty.isElement = true;
+
+ setName(attributes,
+ thisProperty.name,
+ thisProperty.localname);
+
+
+ setType(thisProperty, attributes, namespaces);
+
+ SDOXMLString maxOccurs = attributes.getValue("maxOccurs");
+ if (!maxOccurs.isNull())
+ {
+ if (!maxOccurs.equalsIgnoreCase("1"))
+ {
+ thisProperty.isMany = true;
+ }
+ }
+
+ // find aliases
+ thisProperty.aliases = attributes.getValue("aliasName");
+
+ // mark this as a substitution group.
+ // TODO - what about properties which have already been set into the tree,
+ // and might have a substitution?
+
+ SDOXMLString substituteName = attributes.getValue("substitutionGroup");
+ if (! substituteName.isNull())
+ {
+ XMLQName qname = resolveTypeName(
+ substituteName,
+ namespaces,
+ thisProperty.substituteUri,
+ thisProperty.substituteName);
+ thisProperty.isSubstitute=true;
+ }
+
+ // count the number of elements in the group
+ if (currentType.isMany)
+ {
+ currentType.groupElementCount++;
+ }
+
+ setCurrentProperty(thisProperty);
+
+ }
+
+ // ============================================================================
+ // startAttribute
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startAttribute(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+
+ LOGINFO_1( INFO,"SchemaParser:startAttribute:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ PropertyDefinitionImpl thisProperty;
+
+ thisProperty.isElement = false;
+
+ setName(attributes,
+ thisProperty.name,
+ thisProperty.localname);
+
+ setType(thisProperty, attributes, namespaces);
+
+ setCurrentProperty(thisProperty);
+ }
+
+ // ============================================================================
+ // startComplexType
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startComplexType(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ LOGINFO_1( INFO,"SchemaParser:startComplexType:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ TypeDefinitionImpl thisType; // set defaults
+ thisType.uri=schemaInfo.getTargetNamespaceURI();
+
+ setTypeName(thisType, attributes,namespaces);
+
+
+
+ for (int i=0; i < attributes.size(); i++)
+ {
+ // If sdo:sequence="true" or mixed="true" it is sequenced
+ if ( (attributes[i].getUri().equalsIgnoreCase("commonj.sdo/xml")
+ && attributes[i].getName().equalsIgnoreCase("sequence"))
+ || attributes[i].getName().equalsIgnoreCase("mixed"))
+ {
+ if (attributes[i].getValue().equals("true"))
+ {
+ thisType.isSequenced = true;
+ }
+ }
+ // If abstract="true" it is abstract
+ else if (attributes[i].getName().equalsIgnoreCase("abstract"))
+ {
+ if (attributes[i].getValue().equals("true"))
+ {
+ thisType.isAbstract = true;
+ }
+ }
+ else if (attributes[i].getName().equalsIgnoreCase("aliasName"))
+ {
+ thisType.aliases = attributes[i].getValue();
+ }
+ }
+
+ setCurrentType(thisType);
+ }
+
+ // ============================================================================
+ // startSimpleType
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startSimpleType(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ LOGINFO_1( INFO,"SchemaParser:startSimpleType:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ TypeDefinitionImpl thisType; // set defaults
+ thisType.uri=schemaInfo.getTargetNamespaceURI();
+ thisType.dataType = true;
+
+ for (int i=0; i < attributes.size(); i++)
+ {
+ // If abstract="true" it is abstract
+ if (attributes[i].getName().equalsIgnoreCase("abstract"))
+ {
+ if (attributes[i].getValue().equals("true"))
+ {
+ thisType.isAbstract = true;
+ }
+ }
+ else if (attributes[i].getName().equalsIgnoreCase("aliasName"))
+ {
+ thisType.aliases = attributes[i].getValue();
+ }
+ }
+ setTypeName(thisType, attributes,namespaces);
+
+ // see if the type is going to be abstract...
+
+
+ setCurrentType(thisType);
+ }
+
+ // ============================================================================
+ // startRestriction
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startRestriction(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ LOGINFO_1( INFO,"SchemaParser:startRestriction:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ SDOXMLString base = attributes.getValue("base");
+ if (!base.isNull())
+ {
+ // Resolve typename to uri:name
+ XMLQName qname = resolveTypeName(
+ base,
+ namespaces,
+ currentType.parentTypeUri,
+ currentType.parentTypeName);
+
+ currentType.isRestriction=true;
+
+
+ if(qname.getLocalName().equals("QName"))
+ {
+ currentType.isQName = true;
+ }
+ }
+ }
+
+ // ============================================================================
+ // startExtension
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startExtension(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ LOGINFO_1( INFO,"SchemaParser:startExtension:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ SDOXMLString base = attributes.getValue("base");
+ if (!base.isNull())
+ {
+ SDOXMLString typeUri;
+ SDOXMLString typeName;
+ // Resolve typename to uri:name
+ XMLQName qname = resolveTypeName(
+ base,
+ namespaces,
+ typeUri,
+ typeName);
+
+ // If extending a simple type (an SDO DataType) we create a
+ // Property named "value" of this type rather than set the
+ // simple type as a base
+ currentType.isRestriction=false;
+
+ // ?? Does this only apply within a <simpleContent> tag??
+ if (typeUri.equalsIgnoreCase(Type::SDOTypeNamespaceURI.c_str()))
+ {
+ // here the type needs to be flagged so that
+ // we know to serialize this property as an element with
+ // just the contents <element>abc</element> rather than
+ // value=abc
+
+
+ PropertyDefinitionImpl thisProperty;
+ thisProperty.name = "value";
+ thisProperty.localname = "value";
+ thisProperty.typeUri = typeUri;
+ thisProperty.typeName = typeName;
+ thisProperty.fullTypeName = base;
+ thisProperty.isContainment = false;
+ thisProperty.isElement=true;
+
+ currentType.isExtendedPrimitive= true;
+
+ if(qname.getLocalName().equals("QName"))
+ {
+ thisProperty.isQName = true;
+ }
+
+ setCurrentProperty(thisProperty);
+ defineProperty();
+ }
+ else
+ {
+ currentType.parentTypeUri = typeUri;
+ currentType.parentTypeName = typeName;
+ }
+ }
+ }
+
+ // ============================================================================
+ // startGroup
+ // ============================================================================
+ void SDOSchemaSAX2Parser::startGroup(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes)
+ {
+ LOGINFO_1( INFO,"SchemaParser:startGroup:%s",(const char*)localname);
+
+ if (!bInSchema) return;
+
+ SDOXMLString maxOccurs = attributes.getValue("maxOccurs");
+ if (!maxOccurs.isNull())
+ {
+ if (!maxOccurs.equalsIgnoreCase("1"))
+ {
+ currentType.isMany = true;
+ }
+ }
+ }
+
+ // ============================================================================
+ // setCurrentType
+ // ============================================================================
+ void SDOSchemaSAX2Parser::setCurrentType(const TypeDefinitionImpl& type)
+ {
+ typeStack.push(currentType);
+ currentType = type;
+ }
+
+ // ============================================================================
+ // defineType
+ // ============================================================================
+ void SDOSchemaSAX2Parser::defineType()
+ {
+ // Set this Type as sequenced of more than one element in a group definition
+ if (currentType.groupElementCount > 1)
+ {
+ currentType.isSequenced = true;
+ }
+
+ SDOXMLString typeQname = TypeDefinitionsImpl::getTypeQName(currentType.uri, currentType.localname);
+ typeDefinitions.types[typeQname] = currentType;
+
+ if (currentProperty.typeName.isNull())
+ {
+ // Set the type name to the name of this type
+ currentProperty.typeUri = currentType.uri;
+ currentProperty.typeName = currentType.localname;
+ }
+
+ if (typeStack.size() != 0)
+ {
+ currentType = typeStack.top();
+ typeStack.pop();
+ }
+ else
+ {
+ currentType = TypeDefinitionImpl();
+ }
+ }
+
+ // ============================================================================
+ // setCurrentProperty
+ // ============================================================================
+ void SDOSchemaSAX2Parser::setCurrentProperty(const PropertyDefinitionImpl& prop)
+ {
+ propertyStack.push(currentProperty);
+ currentProperty = prop;
+ }
+
+ // ============================================================================
+ // defineProperty
+ // ============================================================================
+ void SDOSchemaSAX2Parser::defineProperty()
+ {
+
+ if (currentProperty.typeName.isNull())
+ {
+ // Set the type of this property to default (sdo:String)
+ currentProperty.typeUri = Type::SDOTypeNamespaceURI.c_str();
+ currentProperty.typeName = "String";
+ }
+
+ if (currentProperty.localname.isNull())
+ currentProperty.localname = currentProperty.typeName;
+
+ // Set isMany if property isMany OR if containing type isMany
+ // NOTE: The above comment is as per the SDO2.0 spec however this does not
+ // work when serializing a sequence containing a single-valued property and
+ // then deserializing.
+ // currentProperty.isMany = currentProperty.isMany || currentType.isMany;
+
+
+ currentType.properties.insert(currentType.properties.end(), currentProperty);
+ if (propertyStack.size() != 0)
+ {
+ currentProperty = propertyStack.top();
+ propertyStack.pop();
+ }
+ else
+ currentProperty = PropertyDefinitionImpl();
+
+ }
+
+ // ============================================================================
+ // setDefault
+ // ============================================================================
+ void SDOSchemaSAX2Parser::setDefault(
+ PropertyDefinitionImpl& thisProperty,
+ const SAX2Attributes& attributes)
+ {
+ thisProperty.defaultValue = attributes.getValue("fixed");
+ if (!thisProperty.defaultValue.isNull())
+ {
+ thisProperty.isReadOnly = true;
+ }
+ else
+ {
+ thisProperty.defaultValue = attributes.getValue("default");
+ }
+ }
+
+ // ============================================================================
+ // setName
+ // ============================================================================
+ void SDOSchemaSAX2Parser::setName(
+ const SAX2Attributes& attributes,
+ SDOXMLString& sdoname,
+ SDOXMLString& localname)
+ {
+ for (int i=0; i < attributes.size(); i++)
+ {
+ // Handle sdo: annotations
+ if (attributes[i].getUri().equalsIgnoreCase("commonj.sdo/xml"))
+ {
+ // sdo:name overrides the property name
+ if (attributes[i].getName().equalsIgnoreCase("name"))
+ {
+ sdoname = attributes[i].getValue();
+ }
+ }
+ else
+ {
+
+ if (attributes[i].getName().equalsIgnoreCase("name"))
+ {
+ localname = attributes[i].getValue();
+ // If name is already set it must have been an
+ // override using sdo:name
+ if (sdoname.isNull())
+ {
+ sdoname = localname;
+ }
+ }
+ }
+ }
+
+ }
+
+ // ============================================================================
+ // setType
+ // ============================================================================
+ void SDOSchemaSAX2Parser::setType(
+ PropertyDefinitionImpl& property,
+ const SAX2Attributes& attributes,
+ const SAX2Namespaces& namespaces)
+ {
+ property.fullLocalTypeName = attributes.getValue("type");
+ if (!property.fullLocalTypeName.isNull())
+ {
+ XMLQName qname(property.fullLocalTypeName,schemaInfo.getSchemaNamespaces(), namespaces);
+ if (qname.getLocalName().equals("IDREF")
+ || qname.getLocalName().equals("IDREFS"))
+ {
+ property.fullTypeName = attributes.getValue("commonj.sdo/xml","propertyType");
+
+ property.isIDREF = true;
+ property.isContainment = false;
+
+ if (qname.getLocalName().equals("IDREFS"))
+ {
+ property.isMany = true;
+ }
+ }
+ else if (qname.getLocalName().equals("anyURI"))
+ {
+ property.fullTypeName = attributes.getValue("commonj.sdo/xml","propertyType");
+ }
+ else if (qname.getLocalName().equals("ID"))
+ {
+ property.isID = true;
+ currentType.IDPropertyName = property.name;
+ }
+
+ else
+ {
+ property.fullTypeName = attributes.getValue("commonj.sdo/xml","dataType");
+ }
+ }
+
+ else
+ {
+ property.fullLocalTypeName = attributes.getValue("ref");
+ if (!property.fullLocalTypeName.isNull())
+ {
+ property.isReference = true;
+ }
+ }
+
+ if (property.fullTypeName.isNull())
+ {
+ property.fullTypeName = property.fullLocalTypeName;
+ }
+
+ if (!property.fullTypeName.isNull())
+ {
+ // Resolve typename to uri:name
+ XMLQName qname = resolveTypeName(
+ property.fullTypeName,
+ namespaces,
+ property.typeUri,
+ property.typeName);
+
+ if(qname.getLocalName().equals("QName"))
+ {
+ property.isQName = true;
+ }
+ }
+
+ }
+
+ // ============================================================================
+ // setTypeName
+ // ============================================================================
+ void SDOSchemaSAX2Parser::setTypeName(
+ TypeDefinitionImpl& type,
+ const SAX2Attributes& attributes,
+ const SAX2Namespaces& namespaces)
+ {
+ std::map<SDOXMLString,SDOXMLString>::iterator it;
+ setName(attributes, type.name, type.localname);
+ // If localname is not set it is anonymous so use the enclosing element name
+
+
+ if (type.localname.isNull())
+ {
+ type.localname = currentProperty.name;
+ }
+ else
+ {
+ // check for an overriding url in the name
+ int i;
+ if ((i = type.localname.firstIndexOf(':')) > 0)
+ {
+ XMLQName qname(type.localname,
+ schemaInfo.getSchemaNamespaces(),
+ namespaces);
+ type.uri = qname.getURI();
+ type.localname = qname.getLocalName();
+ }
+ }
+
+ // Set SDO name if not specified
+ if (type.name .isNull())
+ {
+ type.name = type.localname ;
+ }
+ else
+ {
+ // check for an overriding url in the name
+ int i;
+ if ((i = type.name.firstIndexOf(':')) > 0)
+ {
+ XMLQName qname(type.name,
+ schemaInfo.getSchemaNamespaces(),
+ namespaces);
+ type.uri = qname.getURI();
+ type.name = qname.getLocalName();
+ }
+ }
+ }
+
+ std::istream& operator>>(std::istream& input, SDOSchemaSAX2Parser& parser)
+ {
+ parser.stream(input);
+
+ return input;
+ }
+
+ std::istringstream& operator>>(std::istringstream& input, SDOSchemaSAX2Parser& parser)
+ {
+ parser.stream(input);
+
+ return input;
+ }
+
+ void SDOSchemaSAX2Parser::stream(std::istream& input)
+ {
+ // override to parse twice for groups
+
+ stream_twice(input);
+ }
+
+
+ int SDOSchemaSAX2Parser::parse(const char* filename)
+ {
+ return parse_twice(filename);
+ }
+
+
+
+ // ============================================================================
+ // resolveTypeName
+ // ============================================================================
+ XMLQName SDOSchemaSAX2Parser::resolveTypeName(
+ const SDOXMLString& fullTypeName,
+ const SAX2Namespaces& namespaces,
+ SDOXMLString& uri,
+ SDOXMLString& name)
+ {
+ XMLQName qname(fullTypeName,
+ schemaInfo.getSchemaNamespaces(),
+ namespaces);
+
+ uri = qname.getURI();
+ name = qname.getLocalName();
+
+ ///////////////////////////////////////////////////////////////////////
+ // Map the xsd types to SDO Types
+ ///////////////////////////////////////////////////////////////////////
+ if (qname.getURI().equalsIgnoreCase("http://www.w3.org/2001/XMLSchema"))
+ {
+ uri = Type::SDOTypeNamespaceURI.c_str();
+ name = SDOUtils::XSDToSDO((const char*)(qname.getLocalName()));
+ if (name.isNull())
+ {
+ name = "String";
+ }
+
+ }
+
+ // Temporary hack: ChangeSummaryType is ChangeSummary in core
+ else if (qname.getURI().equalsIgnoreCase(Type::SDOTypeNamespaceURI.c_str()))
+ {
+ if (qname.getLocalName().equalsIgnoreCase("ChangeSummaryType"))
+ {
+ name = "ChangeSummary";
+ }
+
+ }
+ else if (qname.getURI().isNull())
+ {
+ uri = schemaInfo.getTargetNamespaceURI();
+ }
+
+ return qname;
+ }
+
+ } // End - namespace sdo
+
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
new file mode 100644
index 0000000000..c3cd319183
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOSchemaSAX2Parser.h
@@ -0,0 +1,232 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+
+#ifndef _SDOSCHEMASAX2PARSER_H_
+#define _SDOSCHEMASAX2PARSER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SAX2Parser.h"
+#include "commonj/sdo/SchemaInfo.h"
+#include "stack"
+#include "commonj/sdo/TypeDefinitionsImpl.h"
+#include "commonj/sdo/GroupDefinition.h"
+#include "commonj/sdo/XMLQName.h"
+#include "commonj/sdo/ParserErrorSetter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+/**
+ * SDOSAX2Parser implements SAX2Parser.
+ * This class gets called back by the libxml library, and
+ * deals with the creation of metadata objects from XSD.
+ */
+
+ class SDOSchemaSAX2Parser : public SAX2Parser
+ {
+
+ public:
+
+ SDOSchemaSAX2Parser(SchemaInfo& schemaInfo,
+ ParserErrorSetter* insetter);
+
+ virtual ~SDOSchemaSAX2Parser();
+
+
+ virtual void startElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void endElementNs(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI);
+
+
+ virtual void stream(std::istream& input);
+
+ virtual int parse(const char* filename);
+
+ virtual void endDocument();
+
+
+ const SDOXMLString& getTargetNamespaceURI() const {return schemaInfo.getTargetNamespaceURI();}
+
+ TypeDefinitionsImpl& getTypeDefinitions() {return typeDefinitions;}
+
+ friend std::istream& operator>>(std::istream& input, SDOSchemaSAX2Parser& parser);
+ friend std::istringstream& operator>>(std::istringstream& input, SDOSchemaSAX2Parser& parser);
+
+
+ private:
+
+ // group handling.
+
+ int inGroup;
+ bool preParsing;
+ GroupDefinition* currentGroup;
+ std::vector<GroupDefinition> groupList;
+
+ bool bInSchema; // only parse when within a schema
+ bool bInvalidElement; // where element content is not valid
+ bool bInInvalidContent; // actually inside invalid content.
+ bool bInvalidList; // a list with no type - not supported.
+
+ virtual void replayEvents(
+ const SDOXMLString& uri,
+ const SDOXMLString& name,
+ bool isGroup);
+
+ virtual void storeStartElementEvent(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void storeEndElementEvent(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI
+ );
+
+ virtual int startSecondaryParse(
+ SDOSchemaSAX2Parser& schemaParser,
+ SDOXMLString& schemaLocation);
+
+ virtual void startInclude(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startElement(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startAttribute(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startComplexType(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startSimpleType(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startRestriction(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startExtension(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startGroup(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ virtual void startList(
+ const SDOXMLString& localname,
+ const SDOXMLString& prefix,
+ const SDOXMLString& URI,
+ const SAX2Namespaces& namespaces,
+ const SAX2Attributes& attributes);
+
+ XMLQName resolveTypeName(
+ const SDOXMLString& fullTypeName,
+ const SAX2Namespaces& namespaces,
+ SDOXMLString& uri,
+ SDOXMLString& name);
+
+ void setName(
+ const SAX2Attributes& attributes,
+ SDOXMLString& sdoname,
+ SDOXMLString& localname
+ );
+
+ void setType(
+ PropertyDefinitionImpl& property,
+ const SAX2Attributes& attributes,
+ const SAX2Namespaces& namespaces);
+
+ void setTypeName(
+ TypeDefinitionImpl& type,
+ const SAX2Attributes& attributes,
+ const SAX2Namespaces& namespaces);
+
+ void setDefault(
+ PropertyDefinitionImpl& thisProperty,
+ const SAX2Attributes& attributes);
+
+
+ SchemaInfo& schemaInfo;
+
+
+ PropertyDefinitionImpl currentProperty;
+ std::stack<PropertyDefinitionImpl> propertyStack;
+ void setCurrentProperty(const PropertyDefinitionImpl& property);
+ void defineProperty();
+
+ TypeDefinitionImpl currentType;
+ std::stack<TypeDefinitionImpl> typeStack;
+ void setCurrentType(const TypeDefinitionImpl& type);
+ void defineType();
+
+ TypeDefinitionsImpl typeDefinitions;
+
+
+ };
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
+#endif //_SDOSCHEMASAX2PARSER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.cpp
new file mode 100644
index 0000000000..e291c38f76
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.cpp
@@ -0,0 +1,50 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+// This class probably needs to inherit from RefCountingObject to ensure that objects of this type get cleaned up correctly.
+
+#include "commonj/sdo/SDOString.h"
+#include <iostream>
+// #include "libxml/globals.h"
+
+#include <ctype.h>
+#include <string>
+
+// C6 duff compilation - see http://www.codecomments.com/message294418.html
+using std::string;
+#define std_string string
+
+namespace commonj
+{
+ namespace sdo
+ {
+ SDOString SDOString::toLower(unsigned int start, unsigned int length)
+ {
+ std::string result_string;
+ result_string.reserve(size());
+
+ for (unsigned int i = start; (i < size() && i < length); i++)
+ {
+ result_string[i] = tolower((*this)[i]);
+ }
+
+ return SDOString(result_string);
+ }
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.h
new file mode 100644
index 0000000000..2452a7f3a7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOString.h
@@ -0,0 +1,79 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+// #include "commonj/sdo/disable_warn.h"
+
+#ifndef _SDOString_H_
+#define _SDOString_H_
+#include "commonj/sdo/export.h"
+
+#include <iostream>
+using std::string;
+
+namespace commonj
+{
+ namespace sdo
+ {
+ /**
+ * SDOString - utility class for string handling.
+ * Keeps the string handling local to one place, so we can
+ * replace it with a more NLS friendly version later.
+ */
+
+ class SDOString : public string
+ {
+ public:
+ SDO_API SDOString substr(size_t i = 0, size_t n = std::string::npos) const
+ {
+ return SDOString(string::substr(i, n));
+ }
+
+ SDO_API SDOString toLower(unsigned int start = 0,
+ unsigned int length = 0);
+ SDO_API SDOString(const string& str) : string(str) {}
+ // SDO_SPI SDOString(const std::string& str, size_t pos);
+ SDO_API SDOString(const std::string& str, size_t pos, size_t n = std::string::npos)
+ : string(str, pos, n) {}
+ SDO_API SDOString(const char* str) : string(str) {}
+ SDO_API SDOString() : string() {}
+ SDO_API virtual ~SDOString() {}
+
+
+ // User defined conversion so that the compiler will automatically convert SDOString to const char *
+
+ // This is currently omitted because it can lead to confusion over
+ // which method should be called. For example, suppose we have two
+ // (overloaded) methods
+ // 1. void fn(const char* first, const char* second)
+ // 2. void fn(const SDOString& first, const SDOString& second)
+ // and we make a call passing a C style string as the first parameter and an SDOString
+ // as the second parameter. Currently, the first parameter is
+ // converted to an SDOString and the second method is called. If the
+ // conversion below is uncommented, then the compiler also has the
+ // option to convert the second parameter to a C style string and then
+ // call the first method - and it is ambiguous which of these to choose,
+ // leading to a compile time error.
+
+ // operator const char*() const { return c_str(); }
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif // _SDOString_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.cpp
new file mode 100644
index 0000000000..8916400144
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.cpp
@@ -0,0 +1,228 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/03/16 12:21:39 $ */
+
+#include "commonj/sdo/SDOUtils.h"
+
+using namespace std;
+
+//
+// Utility methods to print a DataObject tree
+//
+
+namespace commonj {
+ namespace sdo {
+
+//////////////////////////////////////////////////////////////////////////
+// Conversions
+//////////////////////////////////////////////////////////////////////////
+
+
+ std::map<std::string,std::string> SDOUtils::SdoToXsd;
+
+ std::map<std::string,std::string> SDOUtils::XsdToSdo;
+
+ bool SDOUtils::populated = false;
+
+ bool SDOUtils::populate()
+ {
+ SDOUtils::XsdToSdo["ID"] = "String";
+ SDOUtils::XsdToSdo["NCName"] = "String";
+ SDOUtils::XsdToSdo["string"] = "String";
+ SDOUtils::XsdToSdo["anyType"] = "DataObject";
+ SDOUtils::XsdToSdo["int"] = "Integer";
+ SDOUtils::XsdToSdo["integer"] = "Integer";
+ SDOUtils::XsdToSdo["negativeInteger"] = "Integer";
+ SDOUtils::XsdToSdo["nonNegativeInteger"] = "Integer";
+ SDOUtils::XsdToSdo["positiveInteger"] = "Integer";
+ SDOUtils::XsdToSdo["nonpositiveInteger"] = "Integer";
+ SDOUtils::XsdToSdo["unsignedShort"] = "Integer";
+ SDOUtils::XsdToSdo["unsignedInt"] = "Integer";
+ SDOUtils::XsdToSdo["unsignedLong"] = "Long";
+ SDOUtils::XsdToSdo["double"] = "Double";
+ SDOUtils::XsdToSdo["short"] = "Short";
+ SDOUtils::XsdToSdo["unsignedByte"] = "Short";
+ SDOUtils::XsdToSdo["float"] = "Float";
+ SDOUtils::XsdToSdo["boolean"] = "Boolean";
+ SDOUtils::XsdToSdo["byte"] = "Byte";
+ SDOUtils::XsdToSdo["base64Binary"] = "Bytes";
+ SDOUtils::XsdToSdo["hexBinary"] = "Bytes";
+ SDOUtils::XsdToSdo["anyURI"] = "URI";
+ SDOUtils::XsdToSdo["QName"] = "URI";
+
+ SDOUtils::SdoToXsd["String"] = "string";
+ SDOUtils::SdoToXsd["DataObject"] = "anyType";
+ SDOUtils::SdoToXsd["Integer"] = "integer";
+ SDOUtils::SdoToXsd["Long"] = "unsignedLong";
+ SDOUtils::SdoToXsd["Double"] = "double";
+ SDOUtils::SdoToXsd["Short"] = "short";
+ SDOUtils::SdoToXsd["Float"] = "float";
+ SDOUtils::SdoToXsd["Boolean"] = "boolean";
+ SDOUtils::SdoToXsd["Byte"] = "byte";
+ SDOUtils::SdoToXsd["Bytes"] = "base64Binary";
+ SDOUtils::SdoToXsd["URI"] = "anyURI";
+
+ SDOUtils::populated = true;
+ return true;
+ }
+
+ const char* SDOUtils::SDOToXSD(const char* sdoname)
+ {
+ if (sdoname == 0)
+ {
+ return SDOUtils::SdoToXsd["String"].c_str();
+ }
+ if (!SDOUtils::populated) SDOUtils::populate();
+ string& s = SDOUtils::SdoToXsd[sdoname];
+ if (s.empty())
+ {
+ return SDOUtils::SdoToXsd["String"].c_str();
+ }
+ return s.c_str();
+ }
+
+
+ const char* SDOUtils::XSDToSDO(const char* xsdname)
+ {
+ if (xsdname == 0)
+ {
+ return SDOUtils::XsdToSdo["string"].c_str();
+ }
+ if (!SDOUtils::populated) SDOUtils::populate();
+ string& s = SDOUtils::XsdToSdo[xsdname];
+ if (s.empty())
+ return SDOUtils::XsdToSdo["string"].c_str();
+ return s.c_str();
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// Print Tabs
+//////////////////////////////////////////////////////////////////////////
+
+ void SDOUtils::printTabs(ostream& out, unsigned int incr)
+ {
+ for (int ind=0; ind < incr; ind++)
+ {
+ out << " ";
+ }
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// Print a DatObject tree
+//////////////////////////////////////////////////////////////////////////
+
+ void SDOUtils::printDataObject(ostream& out, DataObjectPtr dataObject)
+ {
+ printDataObject(out, dataObject,0);
+ }
+
+
+ void SDOUtils::printDataObject(ostream& out ,DataObjectPtr dataObject,
+ unsigned int incr)
+ {
+
+ out << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO"
+ << endl;
+
+ if (!dataObject)return;
+
+ const Type& dataObjectType = dataObject->getType();
+ printTabs(out, incr);
+ out << "DataObject type: "
+ << dataObjectType.getURI()
+ << "#" << dataObjectType.getName() << endl;
+
+ incr++;
+
+ //////////////////////////////////////////////////////////////
+ // Iterate over all the properties
+ //////////////////////////////////////////////////////////////
+ PropertyList pl = dataObject->getInstanceProperties();
+ for (int i = 0; i < pl.size(); i++)
+ {
+ printTabs(out, incr);
+ out << "Property: " << pl[i].getName() << endl;
+
+ const Type& propertyType = pl[i].getType();
+
+ printTabs(out, incr);
+
+ out << "Property Type: "
+ << propertyType.getURI()
+ << "#" << propertyType.getName() << endl;
+
+ if (dataObject->isSet(pl[i]))
+ {
+
+ ///////////////////////////////////////////////////////////
+ // For a many-valued property get the list of values
+ ///////////////////////////////////////////////////////////
+ if (pl[i].isMany())
+ {
+ incr++;
+ DataObjectList& dol = dataObject->getList(pl[i]);
+ char cc[20];
+ for (int j = 0; j <dol.size(); j++)
+ {
+ printTabs(out, incr);
+ // seems to be a bug in ostream? Will not print j
+ // as an integer.
+ out << "Value ";
+ sprintf(cc,"%d",j);
+ out << cc;
+ out << endl;
+ incr++;
+ printDataObject(out, dol[j],incr);
+ incr--;
+ out << endl;
+ }
+ incr--;
+ } // end IsMany
+
+ //////////////////////////////////////////////////////////////////////
+ // For a primitive data type print the value
+ //////////////////////////////////////////////////////////////////////
+ else if (propertyType.isDataType())
+ {
+ printTabs(out, incr);
+ out<< "Property Value: "
+ << dataObject->getCString(pl[i]) <<endl ;
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // For a dataobject print the do
+ //////////////////////////////////////////////////////////////////////
+ else
+ {
+ incr++;
+ printDataObject(out, dataObject->getDataObject(pl[i]),incr);
+ incr--;
+ }
+ }
+ else
+ {
+ printTabs(out, incr);
+ out << "Property Value: not set" <<endl ;
+ }
+
+ }
+ incr--;
+ out << "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do" << endl;
+ }
+ };
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.h
new file mode 100644
index 0000000000..0fed291164
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOUtils.h
@@ -0,0 +1,63 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/03/16 12:21:39 $ */
+
+#ifndef _SDOUTILS_H_
+#define _SDOUTILS_H_
+
+#include "commonj/sdo/DataObject.h"
+#include <map>
+#include <string>
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+ /**
+ * SDOUtils will provide utility functions.
+ * The class currently holds a method to print data objects.
+ */
+
+ class SDOUtils
+ {
+
+ public:
+
+ static SDO_API void printDataObject(std::ostream& out, DataObjectPtr d);
+ static SDO_API const char* SDOToXSD(const char* sdoname);
+ static SDO_API const char* XSDToSDO(const char* xsdname);
+
+ private:
+
+ static bool populate();
+ static bool populated;
+
+ static void printDataObject(std::ostream& out, DataObjectPtr d, unsigned int incr);
+ static void printTabs(std::ostream& out, unsigned int incr);
+
+ static std::map<std::string,std::string> XsdToSdo;
+ static std::map<std::string,std::string> SdoToXsd;
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOUTILS_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.cpp
new file mode 100644
index 0000000000..6812ef166b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.cpp
@@ -0,0 +1,55 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SDOXMLBufferWriter.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXMLBufferWriter::SDOXMLBufferWriter(DataFactoryPtr dataFactory)
+ : SDOXMLWriter(dataFactory)
+ {
+ buf = xmlBufferCreate();
+ if (buf == NULL)
+ {
+ SDO_THROW_EXCEPTION("SDOXMLBufferWriter", SDOXMLParserException, "xmlBufferCreate failed");
+ }
+ setWriter(xmlNewTextWriterMemory(buf, 0));
+ }
+
+ SDOXMLBufferWriter::~SDOXMLBufferWriter()
+ {
+ freeWriter();
+ xmlBufferFree(buf);
+ }
+
+ SDOXMLString SDOXMLBufferWriter::getBuffer()
+ {
+ freeWriter();
+ return buf->content;
+ }
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.h
new file mode 100644
index 0000000000..489f44b86c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLBufferWriter.h
@@ -0,0 +1,51 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SDOXMLBUFFERWRITER_H_
+#define _SDOXMLBUFFERWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLWriter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXMLBufferWriter extends SDOXMLWriter and writes a buffer.
+ */
+ class SDOXMLBufferWriter : public SDOXMLWriter
+ {
+
+ public:
+
+ SDOXMLBufferWriter(DataFactoryPtr dataFactory = NULL);
+ virtual ~SDOXMLBufferWriter();
+
+ SDOXMLString getBuffer();
+ private:
+ xmlBufferPtr buf;
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXMLBUFFERWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.cpp
new file mode 100644
index 0000000000..09d80075c9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.cpp
@@ -0,0 +1,44 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SDOXMLFileWriter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXMLFileWriter::SDOXMLFileWriter(const char* xmlFile, DataFactoryPtr dataFactory)
+ : SDOXMLWriter(dataFactory)
+ {
+ setWriter(xmlNewTextWriterFilename(xmlFile, 0));
+ }
+
+ SDOXMLFileWriter::~SDOXMLFileWriter()
+ {
+
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.h
new file mode 100644
index 0000000000..cddfb41293
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLFileWriter.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SDOXMLFILEWRITER_H_
+#define _SDOXMLFILEWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLWriter.h"
+
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXMLFileWriter extends SDOXMLWriter and writes a file.
+ */
+ class SDOXMLFileWriter : public SDOXMLWriter
+ {
+
+ public:
+
+ SDOXMLFileWriter(const char* xmlFile, DataFactoryPtr dataFactory = NULL);
+
+ virtual ~SDOXMLFileWriter();
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXMLFILEWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.cpp
new file mode 100644
index 0000000000..00d76b1b6e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.cpp
@@ -0,0 +1,50 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#include "commonj/sdo/SDOXMLStreamWriter.h"
+#include <sstream>
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXMLStreamWriter::SDOXMLStreamWriter(std::ostream& outXML, DataFactoryPtr dataFactory)
+ : SDOXMLBufferWriter(dataFactory), outXmlStream(outXML)
+ {
+ }
+
+ SDOXMLStreamWriter::~SDOXMLStreamWriter()
+ {
+ }
+
+ int SDOXMLStreamWriter::write(XMLDocumentPtr doc, int indent)
+ {
+ int rc = SDOXMLBufferWriter::write(doc, indent);
+
+ // Now stream the buffer
+ outXmlStream << getBuffer();
+ return rc;
+ }
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.h
new file mode 100644
index 0000000000..92bbfa3cf0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLStreamWriter.h
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#ifndef _SDOXMLSTREAMWRITER_H_
+#define _SDOXMLSTREAMWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXMLBufferWriter.h"
+#include <iostream>
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXMLStreamWriter extends SDOXMLWriter and writes a stream.
+ */
+ class SDOXMLStreamWriter : public SDOXMLBufferWriter
+ {
+
+ public:
+
+ SDOXMLStreamWriter(std::ostream& outXML, DataFactoryPtr dataFactory = NULL);
+ virtual ~SDOXMLStreamWriter();
+
+ int write(XMLDocumentPtr doc, int indent = -1);
+ private:
+ std::ostream& outXmlStream;
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXMLSTREAMWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.cpp
new file mode 100644
index 0000000000..248df58a7f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.cpp
@@ -0,0 +1,223 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/01/23 16:39:24 $ */
+
+#include "commonj/sdo/SDOXMLString.h"
+#include <iostream>
+#include "libxml/globals.h"
+
+#include <ctype.h>
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ SDOXMLString::SDOXMLString()
+ : xmlForm(0)
+ {
+ }
+
+ SDOXMLString::SDOXMLString(const xmlChar* xmlString)
+ {
+ xmlForm = xmlStrdup(xmlString);
+ }
+
+ SDOXMLString::SDOXMLString(const char* localString)
+ {
+ xmlForm = xmlCharStrdup(localString);
+ }
+
+ SDOXMLString::SDOXMLString(const SDOXMLString& str)
+ {
+ xmlForm = xmlStrdup(str.xmlForm);
+ }
+
+ SDOXMLString::SDOXMLString(const xmlChar* str, int start, int len)
+ {
+ xmlForm = xmlStrsub(str, start, len);
+ }
+
+ SDOXMLString& SDOXMLString::operator=(const SDOXMLString& str)
+ {
+ if (this != &str)
+ {
+ release();
+ xmlForm = xmlStrdup(str.xmlForm);
+ }
+ return *this;
+ }
+
+ SDOXMLString SDOXMLString::operator+(const SDOXMLString& str) const
+ {
+ xmlChar* newString = xmlStrncatNew(xmlForm, str.xmlForm, xmlStrlen(str.xmlForm));
+ SDOXMLString retString(newString);
+ if (newString)
+ xmlFree(newString);
+ return retString;
+ }
+
+ SDOXMLString& SDOXMLString::operator+=(const SDOXMLString& str)
+ {
+ xmlForm = xmlStrncat(xmlForm, str.xmlForm, xmlStrlen(str.xmlForm));
+ return *this;
+ }
+
+ SDOXMLString::~SDOXMLString()
+ {
+ release();
+ }
+
+ void SDOXMLString::release()
+ {
+ if (xmlForm)
+ xmlFree((void*)xmlForm);
+ }
+
+ bool SDOXMLString::operator< (const SDOXMLString& str) const
+ {
+ if (xmlStrcmp(xmlForm, str.xmlForm) <0)
+ return true;
+ else
+ return false;
+ }
+
+ bool SDOXMLString::operator==(const SDOXMLString& str) const
+ {
+ if (xmlStrEqual(xmlForm, str.xmlForm))
+ return true;
+ else
+ return false;
+ }
+
+ bool SDOXMLString::equals(const SDOXMLString& str) const
+ {
+ return equals(str.xmlForm);
+ }
+
+ bool SDOXMLString::equals(const char* localString) const
+ {
+ return equals(SDOXMLString(localString));
+ }
+
+
+ bool SDOXMLString::equals(const xmlChar* xmlString) const
+ {
+ if (xmlStrEqual(xmlForm, xmlString))
+ return true;
+ else
+ return false;
+ }
+
+ bool SDOXMLString::equalsIgnoreCase(const SDOXMLString& str) const
+ {
+ return equalsIgnoreCase(str.xmlForm);
+ }
+
+ bool SDOXMLString::equalsIgnoreCase(const char* localString) const
+ {
+ return equalsIgnoreCase(SDOXMLString(localString));
+ }
+
+
+ bool SDOXMLString::equalsIgnoreCase(const xmlChar* xmlString) const
+ {
+ if (xmlStrcasecmp(xmlForm, xmlString) == 0)
+ return true;
+ else
+ return false;
+ }
+
+
+ std::ostream& operator<<(std::ostream& output, const SDOXMLString& str)
+ {
+ if (str.xmlForm)
+ output << str.xmlForm;
+ return output;
+ }
+
+ bool SDOXMLString::isNull() const
+ {
+ if (xmlForm)
+ return false;
+ else
+ return true;
+ }
+
+ SDOXMLString SDOXMLString::toLower(unsigned int start, unsigned int length)
+ {
+ char* newString = new char[strlen(*this)+1];
+ strcpy(newString, *this);
+ for (int i = start; (i<=(strlen(newString)) && i < length); i++)
+ {
+ newString[i] = tolower(newString[i]);
+ }
+ SDOXMLString retString(newString);
+ delete newString;
+ return retString;
+ }
+
+ int SDOXMLString::firstIndexOf(const char ch) const
+ {
+ const xmlChar* loc = xmlStrchr(xmlForm, ch);
+ if (loc == 0)
+ {
+ return -1;
+ }
+
+ return int(loc-xmlForm);
+ }
+
+ int SDOXMLString::lastIndexOf(const char ch) const
+ {
+ const xmlChar* index = 0;
+ const xmlChar* loc = xmlStrchr(xmlForm, ch);
+ while (loc !=0)
+ {
+ index = loc;
+ loc = xmlStrchr(loc+1, ch);
+ }
+
+ if (index == 0)
+ return -1;
+
+ return int(index-xmlForm);
+ }
+
+ SDOXMLString SDOXMLString::substring(int start, int length) const
+ {
+ if (length >0)
+ {
+ return xmlStrsub(xmlForm, start, length);
+ }
+ else
+ return SDOXMLString();
+ }
+
+ SDOXMLString SDOXMLString::substring(int start) const
+ {
+
+ return xmlStrsub(xmlForm, start, xmlStrlen(xmlForm) - start);
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.h
new file mode 100644
index 0000000000..9cbf48be1d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLString.h
@@ -0,0 +1,91 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/disable_warn.h"
+
+#ifndef _SDOXMLString_H_
+#define _SDOXMLString_H_
+#include "commonj/sdo/export.h"
+
+#include <libxml/xmlstring.h>
+#include <iostream>
+
+namespace commonj
+{
+ namespace sdo
+ {
+ /**
+ * SDOXMLString - utility class for string handling.
+ * Keeps the string handling local to one place, so we can
+ * replace it with a more NLS friendly version later.
+ * Many places within the core should use this too instead
+ * of allocated char* buffers. (DataObject etc...)
+ */
+
+ class SDOXMLString
+ {
+ public:
+ SDO_SPI SDOXMLString();
+ SDO_SPI SDOXMLString(const xmlChar* xmlString);
+ SDO_SPI SDOXMLString(const char* localString);
+ SDO_SPI SDOXMLString(const SDOXMLString& str);
+ SDO_SPI SDOXMLString(const xmlChar* str, int start, int len);
+ SDO_SPI virtual ~SDOXMLString();
+
+ SDO_SPI SDOXMLString& operator=(const SDOXMLString& str);
+ SDO_SPI SDOXMLString operator+(const SDOXMLString& str) const;
+ SDO_SPI SDOXMLString& operator+=(const SDOXMLString& str);
+
+
+ SDO_SPI bool operator== (const SDOXMLString& str) const;
+ SDO_SPI bool equals(const xmlChar* xmlString) const;
+ SDO_SPI bool equals(const char* localString) const;
+ SDO_SPI bool equals(const SDOXMLString& str) const;
+ SDO_SPI bool equalsIgnoreCase(const xmlChar* xmlString) const;
+ SDO_SPI bool equalsIgnoreCase(const char* localString) const;
+ SDO_SPI bool equalsIgnoreCase(const SDOXMLString& str) const;
+
+ SDO_SPI bool operator< (const SDOXMLString& str) const;
+
+ SDO_SPI operator const char*() const {return (const char*) xmlForm;}
+ SDO_SPI operator const xmlChar*() const {return xmlForm;}
+
+ SDO_SPI friend std::ostream& operator<<(std::ostream& output, const SDOXMLString& str);
+
+ SDO_SPI bool isNull() const;
+
+ SDO_SPI SDOXMLString toLower(
+ unsigned int start = 0,
+ unsigned int length = 0);
+
+
+ SDO_SPI int firstIndexOf(const char ch) const;
+ SDO_SPI int lastIndexOf(const char ch) const;
+ SDO_SPI SDOXMLString substring(int start, int length) const;
+ SDO_SPI SDOXMLString substring(int start) const;
+ private :
+ xmlChar* xmlForm;
+ void release();
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+
+#endif // _SDOXMLString_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp
new file mode 100644
index 0000000000..baf3a762cb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.cpp
@@ -0,0 +1,1171 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/03/07 15:35:56 $ */
+
+#include "commonj/sdo/SDOXMLWriter.h"
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/SDOString.h"
+#include "iostream"
+using namespace::std;
+#include "commonj/sdo/DASProperty.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include "commonj/sdo/XSDTypeInfo.h"
+#include "commonj/sdo/ChangeSummary.h"
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/XMLQName.h"
+#include "commonj/sdo/DataObjectImpl.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXMLWriter::SDOXMLWriter(
+ DataFactoryPtr dataFact)
+ : dataFactory(dataFact)
+ {
+
+ }
+
+ SDOXMLWriter::~SDOXMLWriter()
+ {
+ freeWriter();
+ }
+
+ void SDOXMLWriter::setWriter(xmlTextWriterPtr textWriter)
+ {
+ writer = textWriter;
+ }
+
+ void SDOXMLWriter::freeWriter()
+ {
+ if (writer != NULL)
+ {
+ xmlFreeTextWriter(writer);
+ writer = NULL;
+ }
+ }
+
+ int SDOXMLWriter::write(XMLDocumentPtr doc, int indent)
+ {
+ if (!doc)
+ {
+ return 0;
+ }
+
+ if (writer == NULL)
+ {
+ // Throw exception
+ return -1;
+ }
+
+ int rc = 0;
+
+ //namespaceUriStack.empty();
+ //namespaceUriStack.push(SDOXMLString());
+ //namespaces.empty();
+ //namespaceStack.push(namespaces);
+ namespaceMap.empty();
+
+ if (indent >= 0)
+ {
+ xmlTextWriterSetIndent(writer, 1);
+ if (indent > 0)
+ {
+ char * chars = new char[indent+1];
+ for (int i=0;i<indent;i++)chars[i] = ' ';
+ chars[indent] = 0;
+ xmlTextWriterSetIndentString(writer, SDOXMLString(chars));
+ delete chars;
+ }
+ else
+ {
+ xmlTextWriterSetIndentString(writer, SDOXMLString(""));
+ }
+ }
+
+ if (doc->getXMLDeclaration())
+ {
+ rc = xmlTextWriterStartDocument(writer, doc->getXMLVersion(), doc->getEncoding(), NULL);
+ if (rc < 0) {
+ SDO_THROW_EXCEPTION("write", SDOXMLParserException, "xmlTextWriterStartDocument failed");
+ }
+ }
+
+ DataObjectPtr root = doc->getRootDataObject();
+ if (root)
+ {
+ bool writeXSIType = false;
+ // For the root DataObject we need to determine the element name
+ SDOXMLString elementURI = doc->getRootElementURI();
+ if (elementURI.isNull() || elementURI.equals(""))
+ {
+ elementURI = root->getType().getURI();
+ }
+ SDOXMLString elementName = doc->getRootElementName();
+ if (elementName.isNull() || elementName.equals(""))
+ {
+ elementName = root->getType().getName();
+ elementName = elementName.toLower(0,1);
+ writeXSIType = true;
+ }
+
+ writeDO(root, elementURI, elementName, true, true);
+ }
+ rc = xmlTextWriterEndDocument(writer);
+ if (rc < 0) {
+ SDO_THROW_EXCEPTION("write", SDOXMLParserException, "xmlTextWriterEndDocument failed");
+ return rc;
+ }
+
+ xmlTextWriterFlush(writer);
+ freeWriter();
+
+ return rc;
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // Write Change Summary attributes
+ //////////////////////////////////////////////////////////////////////////
+
+ void SDOXMLWriter::handleChangeSummaryAttributes(
+ ChangeSummaryPtr cs,
+ DataObjectPtr dol)
+ {
+ int rc;
+
+ SettingList& sl = cs->getOldValues(dol);
+ if (sl.size() == 0)
+ {
+ // no attributes
+ return;
+ }
+ for (int j=0;j< sl.size(); j++)
+ {
+ try {
+
+ if (sl.get(j)->getProperty().isMany())
+ {
+ // manys are elements
+ continue;
+ }
+
+ if (sl.get(j)->getProperty().getType().isDataType())
+ {
+ // data types are OK
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString(sl.get(j)->getProperty().getName()),
+ SDOXMLString(sl.get(j)->getCStringValue()));
+ }
+ else
+ {
+ DataObjectPtr dob = sl.get(j)->getDataObjectValue();
+ if (dob)
+ {
+ if (cs->isDeleted(dob))
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString(sl.get(j)->getProperty().getName()),
+ SDOXMLString(cs->getOldXpath(dob)));
+ }
+ else
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString(sl.get(j)->getProperty().getName()),
+ SDOXMLString(dob->objectToXPath()));
+ }
+ }
+ else
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString(sl.get(j)->getProperty().getName()),
+ SDOXMLString(""));
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ // ignore this attribute
+ }
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // Write Change Summary elements
+ //////////////////////////////////////////////////////////////////////////
+
+ void SDOXMLWriter::handleChangeSummaryElements(
+ ChangeSummaryPtr cs,
+ DataObjectPtr dob)
+ {
+ int rc;
+
+ SettingList& sl = cs->getOldValues(dob);
+
+ if (sl.size() == 0)
+ {
+ // there are no setting for this element.
+ return;
+ }
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ try
+ {
+
+ // single values will have been covered by the attributes.
+ if (!sl.get(j)->getProperty().isMany()) continue;
+
+ if (sl.get(j)->getProperty().getType().isDataType())
+ {
+
+ rc = xmlTextWriterWriteElement(
+ writer,
+ SDOXMLString(sl.get(j)->getProperty().getName()),
+ SDOXMLString(sl.get(j)->getCStringValue()));
+
+ } // if datatype
+ else
+ {
+ DataObjectPtr dob2 = sl.get(j)->getDataObjectValue();
+ if (!dob2)
+ {
+ continue;
+ }
+ if (cs->isDeleted(dob2))
+ {
+ handleChangeSummaryDeletedObject(sl.get(j)->getProperty().getName(), cs,dob2);
+ }
+ else
+ {
+ rc = xmlTextWriterStartElement(
+ writer,
+ SDOXMLString(sl.get(j)->getProperty().getName()));
+ rc = xmlTextWriterWriteAttribute(
+ writer,
+ SDOXMLString("sdo:ref"),
+ SDOXMLString(dob2->objectToXPath()));
+ rc = xmlTextWriterEndElement(
+ writer);
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ // ignore this element
+ }
+ } // for
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // Write a deleted object and all its props
+ //////////////////////////////////////////////////////////////////////////
+
+ void SDOXMLWriter::handleChangeSummaryDeletedObject(
+ const char* name,
+ ChangeSummaryPtr cs,
+ DataObjectPtr dob)
+ {
+
+ int rc, k; // TODO error handling
+
+ SettingList& sl = cs->getOldValues(dob);
+
+ rc = xmlTextWriterStartElement(
+ writer,
+ SDOXMLString(name));
+
+ if (sl.size() == 0)
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdo:ref"),
+ SDOXMLString(cs->getOldXpath(dob)));
+ rc = xmlTextWriterEndElement(writer);
+ return;
+ }
+
+
+ try
+ {
+ // print single valued datatypes as attributes
+
+ for (int j=0;j< sl.size(); j++)
+ {
+ //if (!sl.get(j)->isSet())
+ //{
+ // // unset properties dont need recording - ah but they do!
+ //
+ // continue;
+ //}
+ if ( sl.get(j)->getProperty().isMany())
+ {
+ // manys are elements
+ continue;
+ }
+ if (!sl.get(j)->getProperty().getType().isDataType())
+ {
+ // data objects are element in a deleted data object.
+ continue;
+ }
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString(sl.get(j)->getProperty().getName()),
+ SDOXMLString(sl.get(j)->getCStringValue()));
+
+ } // for attributes
+
+
+ // now we are onto the many-values,
+ // and dataobject single values.
+ //
+ // handle deletions within deletions in reverse order, so they match the
+ // deletion records above.
+
+ for (k=sl.size()-1;k>=0; k--)
+ {
+
+ if ( !sl.get(k)->getProperty().getType().isDataType() &&
+ sl.get(k)->getProperty().isMany())
+ {
+ // its a dataobject type
+ DataObjectPtr dob2 = sl.get(k)->getDataObjectValue();
+ if (!dob2) continue;
+ if (!cs->isDeleted(dob2)) continue;
+ handleChangeSummaryDeletedObject(sl.get(k)->
+ getProperty().getName(),cs,dob2);
+ }
+ } // for attributes
+
+ for (k=0;k< sl.size(); k++)
+ {
+
+ if ( !sl.get(k)->getProperty().getType().isDataType())
+ {
+ if (sl.get(k)->getProperty().isMany()) continue;
+ // its a single valued dataobject type
+
+ DataObjectPtr dob2 = sl.get(k)->getDataObjectValue();
+ if (!dob2) continue;
+ if (!cs->isDeleted(dob2)) continue;
+ handleChangeSummaryDeletedObject(sl.get(k)->
+ getProperty().getName(),cs,dob2);
+
+ }
+ else
+ {
+ if ( !sl.get(k)->getProperty().isMany()) continue;
+
+ // could only be many valued data type
+
+ rc = xmlTextWriterWriteElement(writer,
+ SDOXMLString(sl.get(k)->getProperty().getName()),
+ SDOXMLString(sl.get(k)->getCStringValue()));
+ }
+ } // for attributes
+ }
+ catch (SDORuntimeException e)
+ {
+ // ignore - and write the end-element
+ }
+
+ rc = xmlTextWriterEndElement(writer);
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // Write the list of elements of a change summary
+ //////////////////////////////////////////////////////////////////////////
+
+ void SDOXMLWriter::handleSummaryChange(
+ const SDOXMLString& elementName,
+ ChangeSummaryPtr cs,
+ DataObjectPtr dob)
+ {
+ int rc;
+ DataObject* temp = dob;
+ const char* name;
+ try
+ {
+ name = temp->getContainmentProperty().getName();
+ }
+ catch (SDORuntimeException e)
+ {
+ // This could be a root, and have no name.
+ name = 0;
+ }
+
+ if (name == 0)
+ {
+ rc = xmlTextWriterStartElement(
+ writer,
+ elementName);
+ }
+ else
+ {
+ rc = xmlTextWriterStartElement(
+ writer,
+ SDOXMLString(name));
+ }
+
+ if (rc != 0)
+ {
+ // failed to write an element
+ return;
+ }
+
+ try
+ {
+ name = temp->objectToXPath();
+ }
+ catch (SDORuntimeException e)
+ {
+ name = 0;
+ }
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdo:ref"),
+ SDOXMLString(name));
+
+ handleChangeSummaryAttributes(cs, temp);
+
+ handleChangeSummaryElements(cs, temp);
+
+ rc = xmlTextWriterEndElement(writer);
+
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // Write a Change Summary
+ //////////////////////////////////////////////////////////////////////////
+
+ void SDOXMLWriter::handleChangeSummary(
+ const SDOXMLString& elementName,
+ ChangeSummaryPtr cs)
+ {
+ int i;
+ int rc;
+
+ ChangedDataObjectList& changedDOs = cs->getChangedDataObjects();
+ rc = xmlTextWriterStartElementNS(writer,
+ SDOXMLString("sdo"), SDOXMLString("changeSummary"), SDOXMLString(Type::SDOTypeNamespaceURI.c_str()));
+ if (rc != 0) return;
+ if (cs->isLogging())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("logging"),
+ SDOXMLString("true"));
+ }
+
+ if (changedDOs.size() > 0)
+ {
+
+ // write the creates/deletes in the order they
+ // happened, as elements.
+
+ for (i=0;i< changedDOs.size();i++)
+ {
+ if (cs->isCreated(changedDOs[i])
+ && changedDOs.getType(i) == ChangedDataObjectList::Create)
+ {
+ // TODO - should work out if theres a IDREF here
+ // TODO - can we have more than one create like this?
+ try
+ {
+ rc = xmlTextWriterWriteElement(writer,
+ SDOXMLString("create"),
+ SDOXMLString(changedDOs[i]->objectToXPath()));
+ }
+ catch (SDORuntimeException e)
+ {
+ // The object was not in our tree - we ignore it.
+ }
+ }
+ if (cs->isDeleted(changedDOs[i])
+ && changedDOs.getType(i) == ChangedDataObjectList::Delete)
+ {
+ // TODO - should work out if theres a IDREF here
+ try
+ {
+ rc = xmlTextWriterWriteElement(writer,
+ SDOXMLString("delete"),
+ SDOXMLString(cs->getOldXpath(changedDOs[i])));
+ }
+ catch (SDORuntimeException e)
+ {
+ // The object was not in the deleted list - we ignore it.
+ }
+ }
+ }
+
+
+ for (i=0;i< changedDOs.size();i++)
+ {
+ if (cs->isModified(changedDOs[i]))
+ {
+ handleSummaryChange(elementName, cs, changedDOs[i]);
+ }
+ }
+
+ }
+ rc = xmlTextWriterEndElement(writer);
+ }
+
+ //////////////////////////////////////////////////////////////////////////
+ // Add to namespaces
+ //////////////////////////////////////////////////////////////////////////
+
+ void SDOXMLWriter::addToNamespaces(DataObjectImpl* dob)
+ {
+ std::map<SDOXMLString,SDOXMLString>::iterator it;
+ SDOXMLString uri = dob->getType().getURI();
+
+ it = namespaceMap.find(uri);
+ if (it == namespaceMap.end())
+ {
+ char buf[20];
+ sprintf(buf,"%d",++spacescount);
+ SDOXMLString s = SDOXMLString("tns") + buf;
+ namespaceMap.insert(make_pair(uri,s));
+ }
+
+ PropertyList pl = dob->getInstanceProperties();
+ for (int i = 0; i < pl.size(); i++)
+ {
+ if (!dob->isSet(pl[i]))continue;
+
+ if (pl[i].isMany())
+ {
+ if (!pl[i].getType().isDataType())
+ {
+ DataObjectList& dl = dob->getList(pl[i]);
+ for (int k=0;k< dl.size() ;k++)
+ {
+ DataObjectImpl* d = (DataObjectImpl*)(DataObject*)dl[k];
+ if (d != 0)addToNamespaces(d);
+ }
+ }
+ }
+ else
+ {
+ if (!pl[i].getType().isDataType())
+ {
+ DataObjectImpl* d = (DataObjectImpl*)(DataObject*)dob->getDataObject(pl[i]);
+ if (d != 0)addToNamespaces(d);
+ }
+ else
+ {
+ XSDPropertyInfo* pi = getPropertyInfo(dob->getType(), pl[i]);
+ if (pi)
+ {
+ PropertyDefinitionImpl propdef;
+ propdef = pi->getPropertyDefinition();
+ if (propdef.isElement)continue;
+ if (!propdef.isQName)continue;
+
+ SDOXMLString propertyValue = (dob->getCString(pl[i]));
+ XMLQName qname(propertyValue);
+
+ it = namespaceMap.find(qname.getURI());
+ if (it == namespaceMap.end())
+ {
+ char buf[20];
+ sprintf(buf,"%d",++spacescount);
+ SDOXMLString s = SDOXMLString("tns") + buf;
+ namespaceMap.insert(make_pair(qname.getURI(),s));
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // Write a DatObject tree
+ //////////////////////////////////////////////////////////////////////////
+
+ int SDOXMLWriter::writeDO(
+ DataObjectPtr dataObject,
+ const SDOXMLString& elementURI,
+ const SDOXMLString& elementName,
+ bool writeXSIType,
+ bool isRoot)
+ {
+
+ int rc;
+
+ if (dataObject == 0)
+ return 0;
+
+
+ //SDOXMLString uri;
+ //if (!elementURI.equals(namespaceUriStack.top()))
+ //{
+ // uri = elementURI;
+ // namespaceUriStack.push(elementURI);
+ //}
+
+ const Type& dataObjectType = dataObject->getType();
+
+ //////////////////////////////////////////////////////////////////////////
+ // suppose its a primitive type - just write the value
+ //////////////////////////////////////////////////////////////////////////
+ if (dataObjectType.isDataType())
+ {
+ if (dataObject->isNull(""))
+ {
+ rc = xmlTextWriterStartElementNS(writer,
+ NULL, elementName, elementURI);
+ if (rc < 0)
+ {
+ SDO_THROW_EXCEPTION("writeDO",
+ SDOXMLParserException,
+ "xmlTextWriterStartElementNS failed");
+ }
+ rc = xmlTextWriterWriteAttribute(writer,
+ (const unsigned char*)"xsi:nil",
+ (const unsigned char*)"true");
+ rc = xmlTextWriterEndElement(writer);
+ }
+ else
+ {
+ xmlTextWriterWriteElement(
+ writer,
+ elementName,
+ SDOXMLString(dataObject->getCString("")));
+ }
+
+ // need to pop stacks before returning
+ //if (!uri.isNull())
+ //{
+ // namespaceUriStack.pop();
+ //}
+ return 0;
+
+ }
+
+
+ //namespaceStack.push(namespaces);
+
+
+ if (isRoot)
+ {
+ tnsURI=elementURI;
+ if (elementURI.equals("")) {
+ rc = xmlTextWriterStartElementNS(writer, NULL, elementName, NULL);
+ }
+ else
+ {
+ rc = xmlTextWriterStartElementNS(writer, NULL, elementName, elementURI);
+ }
+ if (rc < 0) {
+ SDO_THROW_EXCEPTION("writeDO", SDOXMLParserException, "xmlTextWriterStartElementNS failed");
+ }
+ }
+ else
+ {
+ //xmlTextWriterWriteString(writer,SDOXMLString("\n"));
+
+ SDOXMLString theName=elementName;
+
+ if (!elementURI.isNull() && !elementURI.equals(tnsURI) && !elementURI.equals(""))
+ {
+ std::map<SDOXMLString,SDOXMLString>::iterator it = namespaceMap.find(elementURI);
+ if (it != namespaceMap.end())
+ {
+ theName = (*it).second;
+ theName += ":";
+ theName += elementName;
+ }
+ }
+
+ rc = xmlTextWriterStartElementNS(writer, NULL, theName, NULL);
+ if (rc < 0) {
+ SDO_THROW_EXCEPTION("writeDO", SDOXMLParserException, "xmlTextWriterStartElementNS failed");
+ }
+ }
+
+
+ if (writeXSIType)
+ {
+ rc = xmlTextWriterWriteAttributeNS(writer,
+ SDOXMLString("xsi"), SDOXMLString("type"),
+ NULL,
+ /*SDOXMLString("http://www.w3.org/2001/XMLSchema-instance"),*/
+ SDOXMLString(dataObject->getType().getName()));
+ if (isRoot)
+ {
+ namespaceMap.insert(make_pair(
+ SDOXMLString("http://www.w3.org/2001/XMLSchema-instance"),
+ SDOXMLString("xsi")));
+
+ }
+ }
+
+
+ if (isRoot)
+ {
+ std::map<SDOXMLString,SDOXMLString>::iterator it = namespaceMap.find(elementURI);
+ if (it == namespaceMap.end())
+ {
+ SDOXMLString s = SDOXMLString("tns");
+ namespaceMap.insert(make_pair(elementURI,s));
+ }
+ DataObjectImpl* d = (DataObjectImpl*)(DataObject*)dataObject;
+ spacescount = 1;
+ addToNamespaces(d);
+
+/////////////////////////////////////////////////////////////////////////////////////
+// // build the namespace map, and write the items out at the
+// // top of the tree.
+// int spacecount = 0;
+// DataObjectImpl* d = (DataObjectImpl*)(DataObject*)dataObject;
+// if (d != 0)
+// {
+// TypeList types = (d->getDataFactory())->getTypes();
+// std::map<SDOXMLString,SDOXMLString>::iterator it;
+//
+// for (int i = 0; i<types.size(); i++)
+// {
+// SDOXMLString uri = types[i].getURI();
+// if (uri.equals(Type::SDOTypeNamespaceURI)) continue;
+// std::map<SDOXMLString,SDOXMLString>::iterator it = namespaceMap.find(uri);
+// if (it == namespaceMap.end())
+// {
+// char buf[4];
+// if (!elementURI.isNull())
+// {
+// if (elementURI.equals(uri))
+// {
+// SDOXMLString s = SDOXMLString("tns");
+// namespaceMap.insert(make_pair(uri,s));
+// }
+// else
+// {
+// sprintf(buf,"%d",++spacecount);
+// SDOXMLString s = SDOXMLString("tns") + buf;
+// namespaceMap.insert(make_pair(uri,s));
+// }
+// }
+// }
+// }
+////////////////////////////////////////////////////////////////////////////////////
+
+ for (it = namespaceMap.begin();it != namespaceMap.end(); ++it)
+ {
+ if ((*it).first.equals("")) continue;
+ SDOXMLString space = SDOXMLString("xmlns:") + (*it).second;
+ rc = xmlTextWriterWriteAttribute(writer,
+ space, (*it).first);
+ }
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // write out the type if the xsi:type if the containing type is open
+ // and the property is not one of the declared properties
+ //////////////////////////////////////////////////////////////////////////
+ DataObject* dob = dataObject;
+ DataObjectImpl* cont =
+ ((DataObjectImpl*)dob)->getContainerImpl();
+ if (cont != 0)
+ {
+ if (cont->getType().isOpenType())
+ {
+ //if (dataObject->getType().getURI() != 0)
+ //{
+ // std::string value =
+ // dataObject->getType().getURI();
+ // value += ":";
+ // value += dataObject->getType().getName();
+ // rc = xmlTextWriterWriteAttribute(writer,
+ // (const unsigned char*)"xsi:type",
+ // (const unsigned char*)value.c_str());
+ //}
+ //else
+ //{
+ if (cont->getTypeImpl().getPropertyImpl(elementName) == 0)
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ (const unsigned char*)"xsi:type",
+ (const unsigned char*)dataObject->getType().getName());
+ }
+ }
+ }
+
+ // write nil if required
+ if (dataObject->isNull(""))
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ (const unsigned char*)"xsi:nil",
+ (const unsigned char*)"true");
+ }
+
+
+ //////////////////////////////////////////////////////////////////////////
+ // Iterate over all the properties to find attributes
+ //////////////////////////////////////////////////////////////////////////
+ int i;
+ int j = 1;
+ PropertyList pl = dataObject->getInstanceProperties();
+ for (i = 0; i < pl.size(); i++)
+ {
+ if (dataObject->isSet(pl[i]))
+ {
+ SDOXMLString propertyName(pl[i].getName());
+ XSDPropertyInfo* pi = getPropertyInfo(dataObjectType, pl[i]);
+ PropertyDefinitionImpl propdef;
+ if (pi)
+ {
+ propdef = pi->getPropertyDefinition();
+ propertyName = propdef.localname;
+ }
+
+ // Elements are written as <element>
+ if (propdef.isElement)
+ continue;
+
+ // Many-valued properties are written as <element>
+ if (pl[i].isMany())
+ continue;
+
+ // if (pl[i].isContainment())
+ // continue;
+
+ //////////////////////////////////////////////////////////////////////
+ // Non contained properties become attributes
+ //////////////////////////////////////////////////////////////////////
+ const Type& propertyType = pl[i].getType();
+
+ if (propertyType.isDataType())
+ {
+ SDOXMLString propertyValue = (dataObject->getCString(pl[i]));
+ if (pi && pi->getPropertyDefinition().isQName)
+ {
+ XMLQName qname(propertyValue);
+
+ //{
+ //const SDOXMLString* prefix = namespaces.findPrefix(qname.getURI());
+ //if (prefix == 0)
+ //{
+ // char buffer[100];
+ // SDOXMLString pref = "tns";
+ // sprintf(buffer, "%d", i);
+ // pref += buffer;
+ // namespaces.add(pref, qname.getURI());
+ // prefix = namespaces.findPrefix(qname.getURI());
+ //}
+
+ //if (prefix != 0 && !(*prefix).equals(""))
+
+ std::map<SDOXMLString,SDOXMLString>::iterator it = namespaceMap.find(qname.getURI());
+ if (it != namespaceMap.end())
+ {
+ propertyValue = (*it).second + ":" + qname.getLocalName();
+ }
+ else
+ {
+ char buffer[20];
+ SDOXMLString pref = "tnss";
+ sprintf(buffer, "%d", j++);
+ pref += buffer;
+ rc = xmlTextWriterWriteAttributeNS(writer,
+ SDOXMLString("xmlns"), pref, NULL, qname.getURI());
+ propertyValue = pref + ":" + qname.getLocalName();
+ }
+
+ }
+ rc = xmlTextWriterWriteAttribute(writer,
+ propertyName, propertyValue);
+ }
+ else
+ {
+ // Handle non-containment reference to DataObject
+ if (pl[i].isReference())
+ {
+ writeReference(dataObject, pl[i], false);
+ }
+ }
+ }
+ }
+
+ // --------------------
+ // Handle ChangeSummary
+ // --------------------
+ if (dataObject->getType().isChangeSummaryType())
+ {
+ ChangeSummaryPtr changeSummary = dataObject->getChangeSummary();
+ if (changeSummary)
+ {
+ handleChangeSummary(elementName, changeSummary);
+ }
+ }
+
+ if (dataObjectType.isSequencedType())
+ {
+ SequencePtr sequence = dataObject->getSequence();
+ if (sequence)
+ {
+ for (i=0; i<sequence->size(); i++)
+ {
+
+ if (sequence->isText(i))
+ {
+ rc = xmlTextWriterWriteString(
+ writer,
+ SDOXMLString(sequence->getCStringValue(i)));
+ continue;
+ } // end TextType
+
+ const Property& seqProp = sequence->getProperty(i);
+ SDOXMLString seqPropName = seqProp.getName();
+ const Type& seqPropType = seqProp.getType();
+
+ if (seqPropType.isDataObjectType())
+ {
+ DataObjectPtr doValue;
+ if (seqProp.isMany())
+ {
+ int index = sequence->getListIndex(i);
+ doValue = dataObject->getList(seqProp)[index];
+ }
+ else
+ {
+ doValue = dataObject->getDataObject(seqProp);
+ }
+
+ if (doValue)
+ {
+ // Handle non-containment reference to DataObject
+ if (seqProp.isReference())
+ {
+ writeReference(dataObject, seqProp, true, doValue);
+ }
+ else
+ {
+ writeDO(doValue, doValue->getType().getURI(), seqPropName);
+ }
+ }
+ } // end DataObject
+
+
+ else
+ {
+ // Sequence member is a primitive
+ xmlTextWriterWriteElement(
+ writer,
+ seqPropName,
+ SDOXMLString(sequence->getCStringValue(i)));
+
+ } // end DataType
+ } // end - iterate over sequence
+
+ }
+
+ } // end sequence handling
+
+ else
+ {
+
+ //////////////////////////////////////////////////////////////////////////
+ // Iterate over all the properties to find elements
+ //////////////////////////////////////////////////////////////////////////
+ for (i = 0; i < pl.size(); i++)
+ {
+ if (dataObject->isSet(pl[i]))
+ {
+
+ SDOXMLString propertyName(pl[i].getName());
+ XSDPropertyInfo* pi = getPropertyInfo(dataObjectType, pl[i]);
+ if (pi)
+ {
+ if (!pi->getPropertyDefinition().isElement)
+ continue;
+ propertyName = pi->getPropertyDefinition().localname;
+ }
+
+ const Type& propertyType = pl[i].getType();
+
+ //////////////////////////////////////////////////////////////////////
+ // For a many-valued property get the list of values
+ //////////////////////////////////////////////////////////////////////
+ if (pl[i].isMany())
+ {
+ DataObjectList& dol = dataObject->getList(pl[i]);
+ for (int j = 0; j <dol.size(); j++)
+ {
+ // Handle non-containment reference to DataObject
+ if (pl[i].isReference() )
+ {
+ writeReference(dataObject, pl[i], true, dol[j]);
+ }
+ else
+ {
+ SDOXMLString typeURI = dol[j]->getType().getURI();
+ writeDO(dol[j], dol[j]->getType().getURI(), propertyName);
+ }
+ }
+ } // end IsMany
+
+ //////////////////////////////////////////////////////////////////////
+ // For a dataobject write the do
+ //////////////////////////////////////////////////////////////////////
+ else if (!propertyType.isDataType())
+ {
+ // Handle non-containment reference to DataObject
+ if (pl[i].isReference())
+ {
+ if (pi)
+ writeReference(dataObject, pl[i], true);
+ }
+ else
+ {
+ DataObjectPtr propDO = dataObject->getDataObject(pl[i]);
+ writeDO(propDO, propDO->getType().getURI(), propertyName);
+ }
+ }
+
+ //////////////////////////////////////////////////////////////////////
+ // For a primitive
+ //////////////////////////////////////////////////////////////////////
+ else
+ {
+ // Only write a primitive as an element if defined by the XSD
+ if (pi)
+ {
+ const Type& tp = dataObject->getType();
+ XSDTypeInfo* typeInfo = (XSDTypeInfo*)
+ ((DASType*)&tp)->getDASValue("XMLDAS::TypeInfo");
+ if (typeInfo && typeInfo->getTypeDefinition().isExtendedPrimitive)
+ {
+ xmlTextWriterWriteRaw(
+ writer,
+ SDOXMLString(dataObject->getCString(pl[i])));
+ }
+ else
+ {
+ if (dataObject->isNull(pl[i]))
+ {
+ rc = xmlTextWriterStartElementNS(writer,
+ NULL, elementName, elementURI);
+ if (rc < 0)
+ {
+ SDO_THROW_EXCEPTION("writeDO",
+ SDOXMLParserException,
+ "xmlTextWriterStartElementNS failed");
+ }
+ rc = xmlTextWriterWriteAttribute(writer,
+ (const unsigned char*)"xsi:nil",
+ (const unsigned char*)"true");
+ rc = xmlTextWriterEndElement(writer);
+ }
+ else
+ {
+ xmlTextWriterWriteElement(
+ writer,
+ propertyName,
+ SDOXMLString(dataObject->getCString(pl[i])));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ rc = xmlTextWriterEndElement(writer);
+ return rc;
+
+ //namespaces = namespaceStack.top();
+ //namespaceStack.pop();
+ //if (!uri.isNull())
+ //{
+ // namespaceUriStack.pop();
+ //}
+ }
+
+ XSDPropertyInfo* SDOXMLWriter::getPropertyInfo(const Type& type, const Property& property)
+ {
+ if (dataFactory)
+ {
+ return (XSDPropertyInfo*)dataFactory->getDASValue(type, property.getName(), "XMLDAS::PropertyInfo");
+ }
+ else
+ {
+ return (XSDPropertyInfo*)((DASProperty*)&property)->getDASValue("XMLDAS::PropertyInfo");
+ }
+
+ }
+
+ void SDOXMLWriter::writeReference(
+ DataObjectPtr dataObject,
+ const Property& property,
+ bool isElement,
+ DataObjectPtr refferedToObject)
+ {
+ DataObjectPtr reffedObject = refferedToObject;
+ if (reffedObject == 0)
+ {
+ reffedObject = dataObject->getDataObject(property);
+ }
+
+ // Get ID from referred to DataObject or use XPath
+ SDOXMLString refValue;
+ XSDTypeInfo* ti = (XSDTypeInfo*)((DASType*)&reffedObject->getType())->
+ getDASValue("XMLDAS::TypeInfo");
+ if (ti)
+ {
+ TypeDefinitionImpl typeDef = ti->getTypeDefinition();
+ if (!typeDef.IDPropertyName.isNull())
+ {
+ refValue = reffedObject->getCString(typeDef.IDPropertyName);
+ }
+ }
+
+ if (refValue.isNull())
+ {
+ // need to get XPATH
+ refValue = ((DataObjectImpl*)(DataObject*)reffedObject)->objectToXPath();
+ }
+
+ if (!refValue.isNull())
+ {
+ if (isElement)
+ {
+ // Set the IDREF value
+ xmlTextWriterWriteElement(writer,
+ SDOXMLString(property.getName()), refValue);
+ }
+ else
+ {
+ // Set the IDREF value
+ xmlTextWriterWriteAttribute(writer,
+ SDOXMLString(property.getName()), refValue);
+ }
+ }
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.h
new file mode 100644
index 0000000000..b862a492e1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXMLWriter.h
@@ -0,0 +1,117 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 12:53:49 $ */
+
+#ifndef _SDOXMLWRITER_H_
+#define _SDOXMLWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include <libxml/xmlwriter.h>
+#include "commonj/sdo/XMLDocument.h"
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/SchemaInfo.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include <stack>
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/DataObjectImpl.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXMLWriter writes a data object tree to XML
+ */
+ class SDOXMLWriter
+ {
+
+ public:
+
+ SDOXMLWriter(DataFactoryPtr dataFactory = NULL);
+
+ virtual ~SDOXMLWriter();
+
+ int write(XMLDocumentPtr doc, int indent=-1);
+
+ protected:
+ void setWriter(xmlTextWriterPtr textWriter);
+ void freeWriter();
+
+ private:
+ xmlTextWriterPtr writer;
+
+ void handleChangeSummaryAttributes(
+ ChangeSummaryPtr cs,
+ DataObjectPtr doB);
+
+ void handleChangeSummaryElements(
+ ChangeSummaryPtr cs,
+ DataObjectPtr dob);
+
+ void handleChangeSummaryDeletedObject(
+ const char* name,
+ ChangeSummaryPtr cs,
+ DataObjectPtr dob);
+
+ void handleSummaryChange(
+ const SDOXMLString& elementName,
+ ChangeSummaryPtr cs,
+ DataObjectPtr dob);
+
+ void handleChangeSummary(
+ const SDOXMLString& elementName,
+ ChangeSummaryPtr cs);
+
+ void addToNamespaces(DataObjectImpl* dob);
+
+ int writeDO(
+ DataObjectPtr dataObject,
+ const SDOXMLString& elementURI,
+ const SDOXMLString& elementName,
+ bool writeXSIType = false,
+ bool isRoot = false);
+
+ SchemaInfo* schemaInfo;
+ DataFactoryPtr dataFactory;
+
+ XSDPropertyInfo* getPropertyInfo(const Type& type, const Property& property);
+
+ //std::stack<SDOXMLString> namespaceUriStack;
+ //SAX2Namespaces namespaces;
+ //std::stack<SAX2Namespaces> namespaceStack;
+ int spacescount;
+ std::map<SDOXMLString,SDOXMLString> namespaceMap;
+ SDOXMLString tnsURI;
+
+
+ void writeReference(
+ DataObjectPtr dataObject,
+ const Property& property,
+ bool isElement,
+ DataObjectPtr refferedToObject = 0);
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXMLWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.cpp
new file mode 100644
index 0000000000..e92b0eb48e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.cpp
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SDOXSDBufferWriter.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXSDBufferWriter::SDOXSDBufferWriter()
+ {
+ buf = xmlBufferCreate();
+ if (buf == NULL)
+ {
+ SDO_THROW_EXCEPTION("SDOXSDBufferWriter", SDOXMLParserException, "xmlBufferCreate failed");
+ }
+ setWriter(xmlNewTextWriterMemory(buf, 0));
+ }
+
+ SDOXSDBufferWriter::~SDOXSDBufferWriter()
+ {
+ freeWriter();
+ xmlBufferFree(buf);
+ }
+
+ SDOXMLString SDOXSDBufferWriter::getBuffer()
+ {
+ freeWriter();
+ return xmlBufferContent(buf);
+ }
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.h
new file mode 100644
index 0000000000..a923c32bd1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDBufferWriter.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SDOXSDBUFFERWRITER_H_
+#define _SDOXSDBUFFERWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXSDWriter.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXSDBufferWriter extends SDOXSDWriter and writes a buffer.
+ */
+ class SDOXSDBufferWriter : public SDOXSDWriter
+ {
+
+ public:
+
+ SDOXSDBufferWriter();
+ virtual ~SDOXSDBufferWriter();
+
+ SDOXMLString getBuffer();
+ private:
+ xmlBufferPtr buf;
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXSDBUFFERWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.cpp
new file mode 100644
index 0000000000..e0a5b78de4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.cpp
@@ -0,0 +1,43 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SDOXSDFileWriter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXSDFileWriter::SDOXSDFileWriter(const char* xsdFile)
+ {
+ setWriter(xmlNewTextWriterFilename(xsdFile, 0));
+ }
+
+ SDOXSDFileWriter::~SDOXSDFileWriter()
+ {
+
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.h
new file mode 100644
index 0000000000..b85b88bbc4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDFileWriter.h
@@ -0,0 +1,51 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SDOXSDFILEWRITER_H_
+#define _SDOXSDFILEWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXSDWriter.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXSDFileWriter extends SDOXSDWriter and writes a file.
+ */
+ class SDOXSDFileWriter : public SDOXSDWriter
+ {
+
+ public:
+
+ SDOXSDFileWriter(const char* xsdFile);
+
+ virtual ~SDOXSDFileWriter();
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXSDFILEWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.cpp
new file mode 100644
index 0000000000..664dbe1c6f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.cpp
@@ -0,0 +1,51 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#include "commonj/sdo/SDOXSDStreamWriter.h"
+#include <sstream>
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXSDStreamWriter::SDOXSDStreamWriter(std::ostream& outXML)
+ : outXmlStream(outXML)
+ {
+ }
+
+ SDOXSDStreamWriter::~SDOXSDStreamWriter()
+ {
+ }
+
+ int SDOXSDStreamWriter::write(const TypeList& types, const SDOXMLString& targetNamespaceURI,
+ const propertyMap& openprops, int indent)
+ {
+ int rc = SDOXSDBufferWriter::write(types, targetNamespaceURI, openprops, indent);
+
+ // Now stream the buffer
+ outXmlStream << getBuffer();
+ return rc;
+ }
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.h
new file mode 100644
index 0000000000..5f80536f4d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDStreamWriter.h
@@ -0,0 +1,55 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#ifndef _SDOXSDSTREAMWRITER_H_
+#define _SDOXSDSTREAMWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SDOXSDBufferWriter.h"
+#include <iostream>
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXSDStreamWriter extends SDOXSDWriter and writes a stream.
+ */
+ class SDOXSDStreamWriter : public SDOXSDBufferWriter
+ {
+
+ public:
+
+ SDOXSDStreamWriter(std::ostream& outXML);
+ virtual ~SDOXSDStreamWriter();
+
+ int write(const TypeList& types, const SDOXMLString& targetNamespaceURI,
+ const propertyMap& openprops, int indent = -1);
+ private:
+ std::ostream& outXmlStream;
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXSDSTREAMWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.cpp
new file mode 100644
index 0000000000..d80b6cc9e4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.cpp
@@ -0,0 +1,840 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 12:53:49 $ */
+
+#include "commonj/sdo/SDOXSDWriter.h"
+#include "iostream"
+using namespace::std;
+#include "commonj/sdo/DASProperty.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+
+
+ SDOXSDWriter::SDOXSDWriter(
+ DataFactoryPtr dataFact)
+ : dataFactory(dataFact)
+ {
+
+ }
+
+ SDOXSDWriter::~SDOXSDWriter()
+ {
+ freeWriter();
+ }
+
+ void SDOXSDWriter::setWriter(xmlTextWriterPtr textWriter)
+ {
+ writer = textWriter;
+ }
+
+ void SDOXSDWriter::freeWriter()
+ {
+ if (writer != NULL)
+ {
+ xmlFreeTextWriter(writer);
+ writer = NULL;
+ }
+ }
+
+
+ void SDOXSDWriter::writeProps( const propertyMap& pl, const SDOXMLString& targetNamespaceURI,
+ SDOXMLString& xsd)
+ {
+ int rc;
+
+ // -------------------------------------------------------
+ // Create <element> definitions
+ // -------------------------------------------------------
+
+ propertyMap::const_iterator j;
+ for (j = pl.begin(); j != pl.end(); ++j)
+ {
+ const PropertyImpl& prop = (*j).second;
+ const Type& propType = prop.getType();
+
+
+ SDOXMLString propTypeName = resolveName(propType.getURI(),
+ propType.getName(), targetNamespaceURI);
+
+
+ if (prop.isMany() || !prop.getType().isDataType())
+ {
+ // -----------------------------
+ // Write an <element> definition
+ // -----------------------------
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("element"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ SDOXMLString(prop.getName()));
+
+ if (!propType.isDataType() && !prop.isContainment())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdoxml:propertyType"),
+ propTypeName);
+ propTypeName = "xsd:anyURI";
+ }
+
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("type"),
+ propTypeName);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("minOccurs"),
+ SDOXMLString("0"));
+
+ if (prop.isMany())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("maxOccurs"),
+ SDOXMLString("unbounded"));
+ }
+
+ // End element
+ rc = xmlTextWriterEndElement(writer);
+ }
+ else
+ {
+ // -------------------------------
+ // Write an <attribute> definition
+ // -------------------------------
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("attribute"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ SDOXMLString(prop.getName()));
+
+ if (!propType.isDataType())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdoxml:propertyType"),
+ propTypeName);
+ if (prop.isReference())
+ {
+ propTypeName = "xsd:IDREF";
+ }
+ else
+ {
+ propTypeName = "xsd:anyURI";
+ }
+ }
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("type"),
+ propTypeName);
+
+ // End attribute
+ rc = xmlTextWriterEndElement(writer);
+
+ } // else
+ } // for
+ } // method
+
+
+ ////////////////////////////////////////
+
+ int SDOXSDWriter::write(const TypeList& types, const SDOXMLString& targetNamespaceURI,
+ const propertyMap& openprops, int indent)
+ {
+ int i;
+ if (writer == NULL)
+ {
+ // Throw exception
+ return -1;
+ }
+
+ int rc = 0;
+
+ if (indent >= 0)
+ {
+ xmlTextWriterSetIndent(writer, 1);
+ if (indent > 0)
+ {
+ char * chars = new char[indent+1];
+ for (int i=0;i<indent;i++)chars[i] = ' ';
+ chars[indent] = 0;
+ xmlTextWriterSetIndentString(writer, SDOXMLString(chars));
+ delete chars;
+ }
+ else
+ {
+ xmlTextWriterSetIndentString(writer, SDOXMLString(""));
+ }
+ }
+
+ // --------------------------------------------------------------
+ // Write the <schema> definition including namespace information
+ // --------------------------------------------------------------
+ SDOXMLString tns;
+ SDOXMLString xsd("xsd");
+ SDOXMLString sdoURI(Type::SDOTypeNamespaceURI.c_str());
+
+ SDOXMLString schemaURI = "http://www.w3.org/2001/XMLSchema";
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("schema"), schemaURI);
+ if (rc < 0) {
+ SDO_THROW_EXCEPTION("write", SDOXMLParserException, "xmlTextWriterStartElementNS failed");
+ }
+
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("xmlns:sdo"),
+ sdoURI);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("xmlns:sdoxml"),
+ sdoURI + "/xml");
+
+ // --------------------------------------------------------------
+ // Add all namespaces found in type list
+ // --------------------------------------------------------------
+ int spacecount = 0;
+
+ std::map<SDOXMLString,SDOXMLString>::iterator it;
+
+ for (i = 0; i<types.size(); i++)
+ {
+ SDOXMLString uri = types[i].getURI();
+ if (uri.equals(Type::SDOTypeNamespaceURI.c_str())) continue;
+ std::map<SDOXMLString,SDOXMLString>::iterator it = namespaceMap.find(uri);
+ if (it == namespaceMap.end())
+ {
+ char buf[4];
+ if (!targetNamespaceURI.isNull()
+ && !targetNamespaceURI.equals(uri))
+ {
+ sprintf(buf,"%d",++spacecount);
+ SDOXMLString s = SDOXMLString("tns") + buf;
+ namespaceMap.insert(make_pair(uri,s));
+ }
+ }
+ }
+
+ for (it = namespaceMap.begin();it != namespaceMap.end(); ++it)
+ {
+ SDOXMLString space = SDOXMLString("xmlns:") + (*it).second;
+ rc = xmlTextWriterWriteAttribute(writer,
+ space, (*it).first);
+ }
+
+ // --------------------------------------------------------------
+ // Add targetNamespace if necessary
+ // --------------------------------------------------------------
+ if (!targetNamespaceURI.isNull() && !targetNamespaceURI.equals(""))
+ {
+ tns = "tns:";
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("xmlns:tns"),
+ targetNamespaceURI);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("targetNamespace"),
+ targetNamespaceURI);
+ }
+
+
+ // --------------------------------------------------------------
+ // Now iterate through the Types creating elements as appropriate
+ // --------------------------------------------------------------
+ for (i = 0; i<types.size(); i++)
+ {
+ const Type& type = types[i];
+ const Type* baseType = type.getBaseType();
+
+ // Do not define SDO DataTypes
+ SDOXMLString uri = type.getURI();
+ if (uri.equals(Type::SDOTypeNamespaceURI.c_str()))
+ continue;
+
+ // Do not define the RootType
+ SDOXMLString name = type.getName();
+ if (uri.equals(targetNamespaceURI) && name.equals("RootType"))
+ continue;
+
+
+ // --------------------------------------------------------------
+ // DataTypes become simpleType definitions
+ // --------------------------------------------------------------
+ if (type.isDataType())
+ {
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("simpleType"), NULL);
+ if (rc < 0) {
+ SDO_THROW_EXCEPTION("write", SDOXMLParserException, "xmlTextWriterStartElementNS failed");
+ }
+
+ SDOXMLString typeName;
+ it = namespaceMap.find(type.getURI());
+ if (it != namespaceMap.end() &&
+ !targetNamespaceURI.equals((*it).first))
+ {
+ typeName = (*it).second + ":" + name;
+ }
+ else
+ {
+ typeName = name;
+ }
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ typeName);
+ // --------------------------------------------------------------
+ // write any alias.
+ // --------------------------------------------------------------
+ if (type.getAliasCount() > 0)
+ {
+ unsigned int j = type.getAliasCount();
+ SDOXMLString value = "";
+ for (int i=0;i<j-1;i++)
+ {
+ value = value + type.getAlias(i);
+ value = value + " ";
+ }
+ value += type.getAlias(j-1);
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdo:aliasName"),value);
+
+ }
+
+ if (baseType != 0)
+ {
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("restriction"), NULL);
+
+ SDOXMLString baseName = resolveName(baseType->getURI(), baseType->getName(), targetNamespaceURI);
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("base"),
+ baseName);
+
+
+ rc = xmlTextWriterEndElement(writer);
+ }
+ rc = xmlTextWriterEndElement(writer);
+
+ }
+ else
+ // ---------------------------------------------------------------------
+ // DataObject Types become ComplexType definitions with a global element
+ // ---------------------------------------------------------------------
+ {
+ rc = xmlTextWriterStartElementNS(writer,xsd, SDOXMLString("element"), NULL);
+ if (rc < 0) {
+ SDO_THROW_EXCEPTION("write", SDOXMLParserException, "xmlTextWriterStartElementNS failed");
+ }
+
+ SDOXMLString typeName;
+ it = namespaceMap.find(type.getURI());
+ if (it != namespaceMap.end() &&
+ !targetNamespaceURI.equals((*it).first))
+ {
+ typeName = (*it).second + ":" + name;
+ }
+ else
+ {
+ typeName = name;
+ }
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ name.toLower(0,1));
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("type"),
+ typeName);
+
+ rc = xmlTextWriterEndElement(writer);
+
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("complexType"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ typeName);
+
+ // -----------------------------------------------------
+ // If there is an alias, write it
+ // -----------------------------------------------------
+ if (type.getAliasCount() > 0)
+ {
+ unsigned int j = type.getAliasCount();
+ SDOXMLString value = "";
+ for (int i=0;i<j-1;i++)
+ {
+ value = value + type.getAlias(i);
+ value = value + " ";
+ }
+ value += type.getAlias(j-1);
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdo:aliasName"),value);
+
+ }
+
+ // -----------------------------------------------------
+ // If there is a base type then we need <complexContent>
+ // -----------------------------------------------------
+ if (baseType != 0)
+ {
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("complexContent"), NULL);
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("extension"), NULL);
+
+ SDOXMLString baseName = resolveName(baseType->getURI(), baseType->getName(), targetNamespaceURI);
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("base"),
+ baseName);
+
+ // End extension
+ rc = xmlTextWriterEndElement(writer);
+ }
+
+ // ---------------------------
+ // Iterate over the properties
+ // ---------------------------
+ PropertyList pl = type.getProperties();
+
+ if (pl.size() != 0)
+ {
+ bool inSequence = false;
+
+ // -------------------------------------------------------
+ // Create <element> definitions
+ // -------------------------------------------------------
+
+ int j;
+ for (j = 0; j < pl.size(); j++)
+ {
+ const Property& prop = pl[j];
+ const Type& propType = prop.getType();
+
+ SDOXMLString propTypeName = resolveName(propType.getURI(),
+ propType.getName(), targetNamespaceURI);
+
+ bool isElement = false;
+ bool isQName = false;
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)
+ ((DASProperty*)&prop)->getDASValue("XMLDAS::PropertyInfo");
+ if (pi)
+ {
+ PropertyDefinitionImpl propdef = pi->getPropertyDefinition();
+ if (propdef.isElement)
+ isElement=true;
+ if (propdef.isQName)
+ isQName=true;
+ }
+
+ if (prop.isMany()
+ || prop.isContainment()
+ || isElement)
+ {
+ // -------------------------------------------------
+ // Write <sequence> or <choice> before first element
+ // -------------------------------------------------
+ if (!inSequence)
+ {
+ if (type.isSequencedType())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("mixed"),
+ SDOXMLString("true"));
+
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("choice"), NULL);
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("maxOccurs"),
+ SDOXMLString("unbounded"));
+ }
+ else
+ {
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("sequence"), NULL);
+ }
+ inSequence = true;
+ }
+ // -----------------------------
+ // Write an <element> definition
+ // -----------------------------
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("element"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ SDOXMLString(prop.getName()));
+
+ if (!propType.isDataType() && !prop.isContainment())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdoxml:propertyType"),
+ propTypeName);
+ propTypeName = "xsd:anyURI";
+ }
+
+ if (isQName)
+ {
+ propTypeName = "xsd:QName";
+ }
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("type"),
+ propTypeName);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("minOccurs"),
+ SDOXMLString("0"));
+
+ if (prop.isMany())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("maxOccurs"),
+ SDOXMLString("unbounded"));
+ }
+
+ // -----------------------------------------------------
+ // If there is an alias...
+ // -----------------------------------------------------
+ if (prop.getAliasCount() > 0)
+ {
+ unsigned int j = prop.getAliasCount();
+ SDOXMLString value = "";
+ for (int i=0;i<j-1;i++)
+ {
+ value = value + prop.getAlias(i);
+ value = value + " ";
+ }
+ value += prop.getAlias(j-1);
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdo:aliasName"),value);
+
+ }
+
+ // End element
+ rc = xmlTextWriterEndElement(writer);
+ }
+ }
+
+
+
+ // -----------------------------------------------------
+ // End <sequence> / <choice> if necessary
+ // -----------------------------------------------------
+ if (inSequence)
+ {
+ // End sequence
+ rc = xmlTextWriterEndElement(writer);
+ }
+
+ // ---------------------------------
+ // Add ChangeSummary if there is one
+ // ---------------------------------
+ if (type.isChangeSummaryType())
+ {
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("element"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ SDOXMLString("changeSummary"));
+
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("type"),
+ SDOXMLString("sdo:ChangeSummaryType"));
+
+ rc = xmlTextWriterEndElement(writer);
+ }
+
+ // -------------------------------------------------------
+ // Create <element> definitions
+ // -------------------------------------------------------
+ for (j = 0; j < pl.size(); j++)
+ {
+ const Property& prop = pl[j];
+ const Type& propType = prop.getType();
+
+
+ SDOXMLString propTypeName = resolveName(propType.getURI(),
+ propType.getName(), targetNamespaceURI);
+
+ bool isElement = false;
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)
+ ((DASProperty*)&prop)->getDASValue("XMLDAS::PropertyInfo");
+ if (pi)
+ {
+ if (pi->getPropertyDefinition().isElement)
+ isElement=true;
+ }
+
+ if (!isElement
+ && !prop.isMany()
+ && !prop.isContainment())
+ {
+ // -------------------------------
+ // Write an <attribute> definition
+ // -------------------------------
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("attribute"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("name"),
+ SDOXMLString(prop.getName()));
+
+ if (!propType.isDataType())
+ {
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("sdoxml:propertyType"),
+ propTypeName);
+ if (prop.isReference())
+ {
+ propTypeName = "xsd:IDREF";
+ }
+ else
+ {
+ propTypeName = "xsd:anyURI";
+ }
+ }
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("type"),
+ propTypeName);
+
+ // End attribute
+ rc = xmlTextWriterEndElement(writer);
+
+ }
+
+ }
+
+ }
+
+ // -----------------------------------------------------
+ // Write open type information
+ // -----------------------------------------------------
+ if (type.isOpenType())
+ {
+ // <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("any"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("namespace"),
+ SDOXMLString("##other"));
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("processContents"),
+ SDOXMLString("lax"));
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("minOccurs"),
+ SDOXMLString("0"));
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("maxOccurs"),
+ SDOXMLString("unbounded"));
+
+
+ // End element
+ rc = xmlTextWriterEndElement(writer);
+
+ // -----------------------------------------------------
+ // Write open type information 2
+ // -----------------------------------------------------
+ //<anyAttribute namespace="##any" processContents="lax"/>
+
+ rc = xmlTextWriterStartElementNS(writer, xsd, SDOXMLString("anyAttribute"), NULL);
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("namespace"),
+ SDOXMLString("##any"));
+
+ rc = xmlTextWriterWriteAttribute(writer,
+ SDOXMLString("processContents"),
+ SDOXMLString("lax"));
+
+ // End element
+ rc = xmlTextWriterEndElement(writer);
+
+ }
+
+ // -----------------------------------------------------
+ // End <complexContent> if necessary
+ // -----------------------------------------------------
+ if (baseType != 0)
+ {
+ rc = xmlTextWriterEndElement(writer);
+ }
+
+
+ rc = xmlTextWriterEndElement(writer);
+ }
+ }
+
+
+ // -----------------------------------------------
+ // Write any open content from the factory
+ // -----------------------------------------------
+ if (openprops.size() != 0)
+ {
+ writeProps(openprops, targetNamespaceURI, xsd);
+ }
+ // End the <schema> definition
+ rc = xmlTextWriterEndElement(writer);
+ return rc;
+ }
+
+
+ // ========================================================================================
+ // resolveName - resolve a Type uri and name to xsd equivalent
+ // ========================================================================================
+ SDOXMLString SDOXSDWriter::resolveName(const SDOXMLString& uri, const SDOXMLString& name, const SDOXMLString& targetNamespaceURI)
+ {
+ SDOXMLString resolvedName = name;
+ if (uri.equals(Type::SDOTypeNamespaceURI.c_str()))
+ {
+ resolvedName = "xsd:";
+ if (name.equalsIgnoreCase("Boolean"))
+ {
+ resolvedName += "boolean";
+ }
+ else if (name.equalsIgnoreCase("Byte"))
+ {
+ resolvedName += "byte";
+ }
+ else if (name.equalsIgnoreCase("Bytes"))
+ {
+ resolvedName += "hexBinary";
+ }
+ else if (name.equalsIgnoreCase("Character"))
+ {
+ resolvedName += "string";
+ }
+ else if (name.equalsIgnoreCase("DataObject"))
+ {
+ resolvedName += "anyType";
+ }
+ else if (name.equalsIgnoreCase("Date"))
+ {
+ resolvedName += "dateTime";
+ }
+ else if (name.equalsIgnoreCase("DateTime"))
+ {
+ resolvedName += "dateTime";
+ }
+ else if (name.equalsIgnoreCase("Day"))
+ {
+ resolvedName += "gDay";
+ }
+ else if (name.equalsIgnoreCase("Decimal"))
+ {
+ resolvedName += "decimal";
+ }
+ else if (name.equalsIgnoreCase("Double"))
+ {
+ resolvedName += "double";
+ }
+ else if (name.equalsIgnoreCase("Duration"))
+ {
+ resolvedName += "duration";
+ }
+ else if (name.equalsIgnoreCase("Float"))
+ {
+ resolvedName += "float";
+ }
+ else if (name.equalsIgnoreCase("Int"))
+ {
+ resolvedName += "int";
+ }
+ else if (name.equalsIgnoreCase("Integer"))
+ {
+ resolvedName += "integer";
+ }
+ else if (name.equalsIgnoreCase("Long"))
+ {
+ resolvedName += "long";
+ }
+ else if (name.equalsIgnoreCase("Month"))
+ {
+ resolvedName += "gMonth";
+ }
+ else if (name.equalsIgnoreCase("MonthDay"))
+ {
+ resolvedName += "gMonthDay";
+ }
+ else if (name.equalsIgnoreCase("Object"))
+ {
+ resolvedName += "anySimpleType";
+ }
+ else if (name.equalsIgnoreCase("Short"))
+ {
+ resolvedName += "short";
+ }
+ else if (name.equals("String"))
+ {
+ resolvedName += "String";
+ }
+ else if (name.equalsIgnoreCase("Strings"))
+ {
+ resolvedName += "string";
+ }
+ else if (name.equalsIgnoreCase("Time"))
+ {
+ resolvedName += "time";
+ }
+ else if (name.equalsIgnoreCase("Year"))
+ {
+ resolvedName += "gYear";
+ }
+ else if (name.equalsIgnoreCase("YearMonth"))
+ {
+ resolvedName += "gYearMonth";
+ }
+ else if (name.equalsIgnoreCase("YearMonthDay"))
+ {
+ resolvedName += "date";
+ }
+ else if (name.equalsIgnoreCase("URI"))
+ {
+ resolvedName += "anyURI";
+ }
+ else
+ {
+ resolvedName += "String";
+ }
+ }
+ else if (!targetNamespaceURI.isNull() && uri.equals(targetNamespaceURI))
+ {
+ resolvedName = "tns:";
+ resolvedName += name;
+ }
+ else
+ {
+ SDOXMLString propTypeName;
+ std::map<SDOXMLString,SDOXMLString>::iterator it;
+ it = namespaceMap.find(uri);
+ if (it != namespaceMap.end() &&
+ !targetNamespaceURI.equals((*it).first))
+ {
+ resolvedName = (*it).second + ":" + name;
+ }
+ }
+
+ return resolvedName;
+ }
+
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.h
new file mode 100644
index 0000000000..88ab27fbe6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SDOXSDWriter.h
@@ -0,0 +1,75 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 12:53:49 $ */
+
+#ifndef _SDOXSDWRITER_H_
+#define _SDOXSDWRITER_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include <libxml/xmlwriter.h>
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ * SDOXSDWriter writes XSD from types and properties.
+ * The writer takes the contents of a data factory and writes an
+ * XSD which will be usable to serialize data from the graph.
+ */
+ class SDOXSDWriter
+ {
+
+ public:
+
+ SDOXSDWriter(DataFactoryPtr dataFactory = NULL);
+
+ virtual ~SDOXSDWriter();
+
+ int write(const TypeList& types, const SDOXMLString& targetNamespaceURI,
+ const propertyMap& openprops, int indent = -1);
+
+ protected:
+ void setWriter(xmlTextWriterPtr textWriter);
+ void freeWriter();
+
+ private:
+ xmlTextWriterPtr writer;
+
+ std::map<SDOXMLString,SDOXMLString> namespaceMap;
+
+ void writeProps( const propertyMap& pl, const SDOXMLString& targetNamespaceURI,
+ SDOXMLString& xsd);
+ int writeDO(DataObjectPtr dataObject, const SDOXMLString& elementName);
+
+ DataFactoryPtr dataFactory;
+
+ SDOXMLString resolveName(const SDOXMLString& uri, const SDOXMLString& name, const SDOXMLString& targetNamespaceURI);
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SDOXSDWRITER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.cpp
new file mode 100644
index 0000000000..024546876a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.cpp
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SchemaInfo.h"
+namespace commonj
+{
+ namespace sdo
+ {
+
+ SchemaInfo::SchemaInfo()
+ {
+ }
+
+ SchemaInfo::~SchemaInfo()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.h
new file mode 100644
index 0000000000..0488df1893
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SchemaInfo.h
@@ -0,0 +1,59 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _SCHEMAINFO_H_
+#define _SCHEMAINFO_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/DataObject.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/**
+ *
+ * SchemaInfo holds information supplied by the parser on the schema
+ * held in an XSD
+ */
+ class SchemaInfo
+ {
+
+ public:
+ SDO_SPI SchemaInfo();
+ SDO_SPI virtual ~SchemaInfo();
+
+ SDO_SPI SAX2Namespaces& getSchemaNamespaces() {return schemaNamespaces;}
+
+ SDO_SPI const SDOXMLString& getTargetNamespaceURI() const {return targetNamespaceURI;}
+ SDO_SPI void setTargetNamespaceURI(const SDOXMLString& URI) {targetNamespaceURI = URI;}
+
+ private:
+ SAX2Namespaces schemaNamespaces;
+ SDOXMLString targetNamespaceURI;
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_SCHEMAINFO_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.cpp
new file mode 100644
index 0000000000..d577d5bd12
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.cpp
@@ -0,0 +1,27 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/SdoCheck.h"
+
+extern "C" {
+ SDO_API int SDOCheck(void)
+ {
+ return 0;
+ }
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.h
new file mode 100644
index 0000000000..daf28c6d6f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoCheck.h
@@ -0,0 +1,33 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/export.h"
+
+
+/**
+ * SDOCheck is a simple C method which can be called to verify that
+ * this is an SDO library - this is used in building
+ */
+
+extern "C" {
+ SDO_API int SDOCheck(void);
+}
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.cpp
new file mode 100644
index 0000000000..175dc6dbd2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.cpp
@@ -0,0 +1,64 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/01/23 16:39:24 $ */
+
+#include "commonj/sdo/SdoRuntime.h"
+#include <iostream>
+#include <stdio.h>
+
+namespace commonj{
+namespace sdo{
+
+
+const unsigned int SdoRuntime::major = 0;
+const unsigned int SdoRuntime::minor = 9;
+const unsigned int SdoRuntime::fix =4;
+char* SdoRuntime::version = 0;
+
+
+
+const char* SdoRuntime::getVersion()
+{
+ if (SdoRuntime::version == 0)
+ {
+ SdoRuntime::version = new char[11];
+ sprintf(SdoRuntime::version,"%02d:%02d:%04d",
+ SdoRuntime::major, SdoRuntime::minor, SdoRuntime::fix);
+ }
+ return (const char *)SdoRuntime::version;
+
+}
+
+const unsigned int SdoRuntime::getMajor()
+{
+ return SdoRuntime::major;
+}
+
+const unsigned int SdoRuntime::getMinor()
+{
+ return SdoRuntime::minor;
+}
+
+const unsigned int SdoRuntime::getFix()
+{
+ return SdoRuntime::fix;
+}
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.h
new file mode 100644
index 0000000000..5720a34a0c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SdoRuntime.h
@@ -0,0 +1,74 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef SDO_RUNTIME_H
+#define SDO_RUNTIME_H
+#include "commonj/sdo/export.h"
+
+namespace commonj{
+namespace sdo{
+
+/**
+ * SDORuntime gives information about the version of the library.
+ */
+
+class SdoRuntime
+{
+ public:
+
+ virtual ~SdoRuntime();
+
+ /**
+ * The version as a string major:minor:fix
+ */
+
+ static SDO_API const char* getVersion();
+
+ /**
+ * The major version as an integer.
+ */
+
+ static SDO_API const unsigned int getMajor();
+
+ /**
+ * The minor version as an integer.
+ */
+
+ static SDO_API const unsigned int getMinor();
+
+ /**
+ * The fix level as an integer.
+ */
+
+ static SDO_API const unsigned int getFix();
+
+
+ private:
+ static const unsigned int major;
+ static const unsigned int minor;
+ static const unsigned int fix;
+ static char* version;
+
+};
+};
+};
+
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.cpp
new file mode 100644
index 0000000000..3e830e9889
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.cpp
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeList.h"
+
+#include "commonj/sdo/Sequence.h"
+
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/SDORuntimeException.h"
+
+
+namespace commonj{
+namespace sdo{
+
+// all delegated to sequenceimpl
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.h
new file mode 100644
index 0000000000..610848ce98
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Sequence.h
@@ -0,0 +1,309 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/02 16:41:30 $ */
+
+#ifndef _SEQUENCE_H_
+#define _SEQUENCE_H_
+
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/RefCountingObject.h"
+#include "commonj/sdo/RefCountingPointer.h"
+#include "commonj/sdo/SDODate.h"
+#include "commonj/sdo/Type.h"
+
+
+namespace commonj{
+namespace sdo{
+
+class Property; /* forward declaration */
+class DataObject;
+
+/**
+ * A sequence is a heterogeneous list of properties and corresponding values.
+ * It represents an ordered arbitrary mixture of data values from more
+ * than one property of a {@link DataObject data object}.
+ */
+
+class Sequence : public RefCountingObject
+{
+ public:
+ /** size() returns the number of elements
+ *
+ * Returns the number of entries in the sequence.
+ */
+
+ SDO_API virtual unsigned int size() = 0;
+
+ /**
+ *
+ * A Sequence element is either a free text item, or represents a property
+ * setting. If the element is a property setting, then the information
+ * held in the element consists of:
+ * -# The property which was set.
+ * -# The element of that property if it was many valued.
+ * -# The value which was set.
+ *
+ * If the sequence element is text, then there is no property, and only the
+ * methods for text retrieval will work. Use the isText() method to check
+ * before calling getProperty().
+ */
+
+ SDO_API virtual const Property& getProperty(unsigned int index) = 0;
+
+ /**
+ * Return the data object associated with this sequence
+ */
+
+ SDO_API virtual const DataObjectPtr getDataObject() = 0;
+
+ /**
+ *
+ * The element of that property if it was many valued. Zero if the
+ * property was single valued.
+ */
+
+ SDO_API virtual unsigned int getListIndex(unsigned int index) = 0;
+
+ /**
+ *
+ * The element contains the actual value set within the property. The
+ * method required to get that value will vary depending on the type
+ * of the property. This is shorthand for getProperty.getTypeEnum().
+ */
+
+ SDO_API virtual Type::Types getTypeEnum(unsigned int index) = 0;
+
+ /**
+ *
+ * This method searched the sequence for a setting which corresponds
+ * to the specified index of the specified property. Searches for single
+ * valued property settings may omit the pindex parameter.
+ */
+
+
+ SDO_API virtual unsigned int getIndex(const Property& p, unsigned int pindex=0) = 0;
+ SDO_API virtual unsigned int getIndex(const char* propName, unsigned int pindex=0) = 0;
+
+ /**
+ *
+ * These methods retrieve the setting according to the type of the
+ * property concerned. If a retrieval method is used which does not correspond to
+ * the correct type, a conversion will be performed, or an illegal conversion
+ * exception will be thrown.
+ */
+
+ SDO_API virtual const char* getCStringValue(unsigned int index) = 0;
+ SDO_API virtual bool getBooleanValue(unsigned int index) = 0;
+ SDO_API virtual char getByteValue(unsigned int index) = 0;
+ SDO_API virtual wchar_t getCharacterValue(unsigned int index) = 0;
+ SDO_API virtual unsigned int getStringValue(unsigned int index, wchar_t* val, unsigned int max) = 0;
+ SDO_API virtual unsigned int getBytesValue(unsigned int index, char* val, unsigned int max) = 0;
+ SDO_API virtual short getShortValue(unsigned int index) = 0;
+ SDO_API virtual long getIntegerValue(unsigned int index) = 0;
+ SDO_API virtual int64_t getLongValue(unsigned int index) = 0;
+ SDO_API virtual float getFloatValue(unsigned int index) = 0;
+ SDO_API virtual long double getDoubleValue(unsigned int index) = 0;
+ SDO_API virtual const SDODate getDateValue(unsigned int index) = 0;
+ SDO_API virtual DataObjectPtr getDataObjectValue(unsigned int index) = 0;
+
+ /**
+ *
+ * getlength applies to string and byte buffer types, and allows the
+ * client to allocate the correct size of buffer before retrieving the
+ * value.
+ */
+
+ SDO_API virtual unsigned int getLength(unsigned int index) = 0;
+
+
+ /**
+ *
+ * The setter methods use an element of the sequence to perform a
+ * property setting. The value in the sequence is updated, and so is the
+ * rel value of the property in the data object.
+ */
+
+ SDO_API virtual void setCStringValue( unsigned int index, const char* s ) = 0;
+ SDO_API virtual void setBooleanValue( unsigned int index, bool b ) = 0;
+ SDO_API virtual void setByteValue( unsigned int index, char c ) = 0;
+ SDO_API virtual void setCharacterValue( unsigned int index, wchar_t c ) = 0;
+ SDO_API virtual void setStringValue( unsigned int index, const wchar_t* s , unsigned int len) = 0;
+ SDO_API virtual void setBytesValue( unsigned int index, const char* s , unsigned int len) = 0;
+ SDO_API virtual void setShortValue( unsigned int index, short s ) = 0;
+ SDO_API virtual void setIntegerValue( unsigned int index, long i ) = 0;
+ SDO_API virtual void setLongValue( unsigned int index, int64_t l ) = 0;
+ SDO_API virtual void setFloatValue( unsigned int index, float f ) = 0;
+ SDO_API virtual void setDoubleValue(unsigned int index, long double d ) = 0;
+ SDO_API virtual void setDateValue(unsigned int index, const SDODate t ) = 0;
+ SDO_API virtual void setDataObjectValue(unsigned int index, DataObjectPtr d ) = 0;
+
+
+ /**
+ *
+ * Sequences may be added to by usign the addXXX methods. These provoke
+ * a setting of the real value of the property concerned, and also append
+ * an element to the sequence to reflect that setting.
+ * Additions may be performed based on property name, property index or
+ * the Property itself.
+ */
+
+ SDO_API virtual bool addCString( const char* propertyName,const char* s ) = 0;
+ SDO_API virtual bool addBoolean( const char* propertyName,bool b ) = 0;
+ SDO_API virtual bool addByte( const char* propertyName,char c ) = 0;
+ SDO_API virtual bool addCharacter( const char* propertyName,wchar_t c ) = 0;
+ SDO_API virtual bool addString( const char* propertyName,const wchar_t* s , unsigned int len) = 0;
+ SDO_API virtual bool addBytes ( const char* propertyName,const char* s , unsigned int len) = 0;
+ SDO_API virtual bool addShort( const char* propertyName,short s ) = 0;
+ SDO_API virtual bool addInteger( const char* propertyName,long i ) = 0;
+ SDO_API virtual bool addLong( const char* propertyName,int64_t l ) = 0;
+ SDO_API virtual bool addFloat( const char* propertyName,float f ) = 0;
+ SDO_API virtual bool addDouble(const char* propertyName,long double d ) = 0;
+ SDO_API virtual bool addDate(const char* propertyName,const SDODate t ) = 0;
+ SDO_API virtual bool addDataObject(const char* propertyName,DataObjectPtr d ) = 0;
+
+
+ SDO_API virtual bool addCString( unsigned int propertyIndex,const char* s ) = 0;
+ SDO_API virtual bool addBoolean( unsigned int propertyIndex,bool b ) = 0;
+ SDO_API virtual bool addByte( unsigned int propertyIndex,char c ) = 0;
+ SDO_API virtual bool addCharacter( unsigned int propertyIndex,wchar_t c ) = 0;
+ SDO_API virtual bool addString( unsigned int propertyIndex,const wchar_t* s , unsigned int len) = 0;
+ SDO_API virtual bool addBytes( unsigned int propertyIndex,const char* s , unsigned int len) = 0;
+ SDO_API virtual bool addShort( unsigned int propertyIndex,short s ) = 0;
+ SDO_API virtual bool addInteger( unsigned int propertyIndex,long i ) = 0;
+ SDO_API virtual bool addLong( unsigned int propertyIndex,int64_t l ) = 0;
+ SDO_API virtual bool addFloat( unsigned int propertyIndex,float f ) = 0;
+ SDO_API virtual bool addDouble(unsigned int propertyIndex,long double d ) = 0;
+ SDO_API virtual bool addDate(unsigned int propertyIndex,const SDODate t ) = 0;
+ SDO_API virtual bool addDataObject(unsigned int propertyIndex,DataObjectPtr d ) = 0;
+
+
+
+ SDO_API virtual bool addCString( const Property& property,const char* s ) = 0;
+ SDO_API virtual bool addBoolean( const Property& property,bool b ) = 0;
+ SDO_API virtual bool addByte( const Property& property,char c ) = 0;
+ SDO_API virtual bool addCharacter( const Property& property,wchar_t c ) = 0;
+ SDO_API virtual bool addString ( const Property& property,const wchar_t* s , unsigned int len) = 0;
+ SDO_API virtual bool addBytes( const Property& property,const char* s , unsigned int len) = 0;
+ SDO_API virtual bool addShort( const Property& property,short s ) = 0;
+ SDO_API virtual bool addInteger( const Property& property,long i ) = 0;
+ SDO_API virtual bool addLong( const Property& property,int64_t l ) = 0;
+ SDO_API virtual bool addFloat( const Property& property,float f ) = 0;
+ SDO_API virtual bool addDouble(const Property& property,long double d ) = 0;
+ SDO_API virtual bool addDate(const Property& property,const SDODate t ) = 0;
+ SDO_API virtual bool addDataObject(const Property& property,DataObjectPtr d ) = 0;
+
+
+ /**
+ *
+ * Sequences may be added to by usign the addXXX methods. These provoke
+ * a setting of the real value of the property concerned, and also append
+ * an element to the sequence to reflect that setting.
+ * Additions may be performed based on property name, property index or
+ * the Property itself.
+ * The add method also has an override to allow insertion of a sequence element
+ * before any index.
+ */
+
+ SDO_API virtual bool addCString( unsigned int index,const char* propertyName,const char* s ) = 0;
+ SDO_API virtual bool addBoolean( unsigned int index,const char* propertyName,bool b ) = 0;
+ SDO_API virtual bool addByte( unsigned int index,const char* propertyName,char c ) = 0;
+ SDO_API virtual bool addCharacter( unsigned int index,const char* propertyName,wchar_t c ) = 0;
+ SDO_API virtual bool addString( unsigned int index,const char* propertyName,const wchar_t* s, unsigned int len ) = 0;
+ SDO_API virtual bool addBytes( unsigned int index,const char* propertyName,const char* s , unsigned int len) = 0;
+ SDO_API virtual bool addShort( unsigned int index,const char* propertyName,short s ) = 0;
+ SDO_API virtual bool addInteger( unsigned int index,const char* propertyName,long i ) = 0;
+ SDO_API virtual bool addLong( unsigned int index,const char* propertyName,int64_t l ) = 0;
+ SDO_API virtual bool addFloat( unsigned int index,const char* propertyName,float f ) = 0;
+ SDO_API virtual bool addDouble(unsigned int index,const char* propertyName,long double d ) = 0;
+ SDO_API virtual bool addDate(unsigned int index,const char* propertyName,const SDODate t ) = 0;
+ SDO_API virtual bool addDataObject(unsigned int index,const char* propertyName,DataObjectPtr d ) = 0;
+
+
+ SDO_API virtual bool addCString( unsigned int index,unsigned int propertyIndex,const char* s ) = 0;
+ SDO_API virtual bool addBoolean( unsigned int index,unsigned int propertyIndex,bool b ) = 0;
+ SDO_API virtual bool addByte( unsigned int index,unsigned int propertyIndex,char c ) = 0;
+ SDO_API virtual bool addCharacter( unsigned int index,unsigned int propertyIndex,wchar_t c ) = 0;
+ SDO_API virtual bool addString( unsigned int index,unsigned int propertyIndex,const wchar_t* s , unsigned int len) = 0;
+ SDO_API virtual bool addBytes( unsigned int index,unsigned int propertyIndex,const char* s , unsigned int len) = 0;
+ SDO_API virtual bool addShort( unsigned int index,unsigned int propertyIndex,short s ) = 0;
+ SDO_API virtual bool addInteger( unsigned int index,unsigned int propertyIndex,long i ) = 0;
+ SDO_API virtual bool addLong( unsigned int index,unsigned int propertyIndex,int64_t l ) = 0;
+ SDO_API virtual bool addFloat( unsigned int index,unsigned int propertyIndex,float f ) = 0;
+ SDO_API virtual bool addDouble(unsigned int index,unsigned int propertyIndex,long double d ) = 0;
+ SDO_API virtual bool addDate(unsigned int index,unsigned int propertyIndex,const SDODate t ) = 0;
+ SDO_API virtual bool addDataObject(unsigned int index,unsigned int propertyIndex,DataObjectPtr d ) = 0;
+
+
+ SDO_API virtual bool addCString( unsigned int index,const Property& property,const char* s ) = 0;
+ SDO_API virtual bool addBoolean( unsigned int index,const Property& property,bool b ) = 0;
+ SDO_API virtual bool addByte( unsigned int index,const Property& property,char c ) = 0;
+ SDO_API virtual bool addCharacter( unsigned int index,const Property& property,wchar_t c ) = 0;
+ SDO_API virtual bool addString( unsigned int index,const Property& property,const wchar_t* s , unsigned int len) = 0;
+ SDO_API virtual bool addBytes( unsigned int index,const Property& property,const char* s , unsigned int len) = 0;
+ SDO_API virtual bool addShort( unsigned int index,const Property& property,short s ) = 0;
+ SDO_API virtual bool addInteger( unsigned int index,const Property& property,long i ) = 0;
+ SDO_API virtual bool addLong( unsigned int index,const Property& property,int64_t l ) = 0;
+ SDO_API virtual bool addFloat( unsigned int index,const Property& property,float f ) = 0;
+ SDO_API virtual bool addDouble(unsigned int index,const Property& property,long double d ) = 0;
+ SDO_API virtual bool addDate(unsigned int index,const Property& property,const SDODate t ) = 0;
+ SDO_API virtual bool addDataObject(unsigned int index,const Property& property,DataObjectPtr d ) = 0;
+
+
+ /** remove() removes an item.
+ *
+ * Remove the item at the specified index in the sequence.
+ * This has no effect on the value of the property in the data object,
+ * but the setting is no longer recorded.
+ */
+ SDO_API virtual void remove(unsigned int index) = 0;
+ SDO_API virtual void removeAll(const Property& p) = 0;
+
+ /**
+ * Moves an entry in the sequence from one index to another. This
+ * makes the entry appear to have been set at a different point in
+ * the sequence, but does not alter the actual value set.
+ */
+
+ SDO_API virtual void move(unsigned int toIndex, unsigned int fromIndex) = 0;
+
+ /**
+ * The text setting APIs add an element to the sequence which
+ * is not a property setting.
+ * This is text which may be retieved in sequence with the settings.
+ */
+
+ SDO_API virtual bool addText(const char* text) = 0;
+ SDO_API virtual bool addText(unsigned int index, const char* text) = 0;
+ SDO_API virtual bool setText(unsigned int index, const char* text) = 0;
+
+ /**
+ * isText returns true if the element is not a property setting.
+ * This method should be used before getting the Property, to avoid an
+ * exception
+ */
+
+ SDO_API virtual bool isText(unsigned int index) = 0;
+
+};
+
+
+};
+};
+
+#endif //_SEQUENCE_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.cpp
new file mode 100644
index 0000000000..37be7881be
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.cpp
@@ -0,0 +1,977 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/07 08:25:11 $ */
+
+#include "commonj/sdo/disable_warn.h"
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeList.h"
+
+#include "commonj/sdo/SequenceImpl.h"
+
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/DataObjectImpl.h"
+#include "commonj/sdo/SDORuntimeException.h"
+using namespace std;
+
+
+#define CHECK_RANGE\
+ if (index >= the_list.size()){\
+ std::string msg("Index out of range:");\
+ msg += index;\
+ SDO_THROW_EXCEPTION("Sequence API", SDOIndexOutOfRangeException,\
+ msg.c_str());\
+ }\
+ unsigned int j = 0;\
+ for (i = the_list.begin(); (j < index) && (i != the_list.end()); ++i)\
+ {\
+ j++;\
+ }
+
+
+namespace commonj{
+namespace sdo{
+
+ SequenceImpl::SequenceImpl()
+ {
+ SDO_THROW_EXCEPTION("Sequence constructor", SDORuntimeException,\
+ "SequenceImpl::construction without a data object");\
+ }
+
+ SequenceImpl::SequenceImpl(DataObject* indo)
+ {
+ the_do = (DataObjectImpl*)indo;
+ }
+
+ SequenceImpl::SequenceImpl(SequenceImpl* inseq)
+ {
+ // take a copy of the_list
+ the_list = inseq->the_list;
+ }
+
+ unsigned int SequenceImpl::size()
+ {
+ return the_list.size();
+ }
+
+
+ /**
+ * Return the data object associated with this sequence
+ */
+
+ const DataObjectPtr SequenceImpl::getDataObject()
+ {
+ return the_do;
+ }
+
+ const Property& SequenceImpl::getProperty(unsigned int index)
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+
+ if (isText(index))
+ {
+ std::string msg("Cannot get property of a text item");
+ msg += index;
+ SDO_THROW_EXCEPTION("getProperty", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ unsigned int j = 0;
+ for (i = the_list.begin() ; (j < index) && (i != the_list.end()); ++i){j++;}
+
+ if (i != the_list.end()) {
+ return *((*i).getProp());
+ }
+ std::string msg("Index out of range:");
+ msg += index;
+ SDO_THROW_EXCEPTION("getProperty", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+
+ Type::Types SequenceImpl::getTypeEnum(unsigned int index)
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+
+ unsigned int j = 0;
+ for (i = the_list.begin() ; (j < index) && (i != the_list.end()); ++i){j++;}
+
+ if (i != the_list.end()) {
+ if ((*i).getProp() == 0) {
+ // text type
+ return Type::TextType;
+ }
+ return (*i).getProp()->getTypeEnum();
+ }
+ std::string msg("Index out of range:");
+ msg += index;
+ SDO_THROW_EXCEPTION("getTypeEnum", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+
+ unsigned int SequenceImpl::getListIndex(unsigned int index)
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ unsigned int j = 0;
+ for (i = the_list.begin() ; (j < index) && (i != the_list.end()); ++i){j++;}
+
+ if (i != the_list.end()) {
+ if ((*i).getProp() == 0)
+ {
+ std::string msg("Get list index on text property");
+ SDO_THROW_EXCEPTION("getListIndex", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ if ( (*i).getProp()->isMany())
+ {
+ return (*i).getIndex();
+ }
+ else
+ {
+ std::string msg("Get list index on text single valued property");
+ SDO_THROW_EXCEPTION("getListIndex", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ }
+ std::string msg("Index out of range:");
+ msg += index;
+ SDO_THROW_EXCEPTION("getListIndex", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+
+ unsigned int SequenceImpl::getIndex(const char* propName, unsigned int pindex)
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ unsigned int j = 0;
+ for (i=the_list.begin(), j=0;i != the_list.end();++i,++j) {
+ const Property* p = (*i).getProp();
+ if (p == 0 ) continue; // avoid text
+ if (!strcmp(p->getName(), propName)) {
+ if (p->isMany())
+ {
+ if( pindex == (*i).getIndex())return j;
+ }
+ else {
+ return j;
+ }
+ }
+ }
+ SDO_THROW_EXCEPTION("getIndex", SDOIndexOutOfRangeException,
+ "SequenceImpl::getIndex - property Setting not in sequence");
+ }
+
+ unsigned int SequenceImpl::getIndex(const Property& p, unsigned int pindex)
+ {
+ return getIndex(p.getName(), pindex);
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // specific getters for prims and data objects
+ ///////////////////////////////////////////////////////////////////////////
+
+
+#define StringGetter(returntype,primtype,defval)\
+ returntype SequenceImpl::get##primtype##Value(unsigned int index)\
+ {\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ CHECK_RANGE;\
+ const Property* p = (*i).getProp();\
+ if (p == 0) {\
+ return (*i).getText();\
+ }\
+ if (p->isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(*p);\
+ DataObject* list_do = dol[(*i).getIndex()];\
+ if (list_do != 0)\
+ {\
+ return ((DataObjectImpl*)list_do)->get##primtype();\
+ }\
+ return defval;\
+ }\
+ return the_do->get##primtype(*((*i).getProp()));\
+ }
+
+#define getter(returntype,primtype,defval)\
+ returntype SequenceImpl::get##primtype##Value(unsigned int index)\
+ {\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ CHECK_RANGE;\
+ const Property* p = (*i).getProp();\
+ if (p == 0) {\
+ return defval;\
+ }\
+ if (p->isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(*p);\
+ DataObject* list_do = dol[(*i).getIndex()];\
+ if (list_do != 0)\
+ {\
+ return ((DataObjectImpl*)list_do)->get##primtype();\
+ }\
+ return defval;\
+ }\
+ return the_do->get##primtype(*((*i).getProp()));\
+ }
+
+#define ObjectGetter(returntype,primtype,defval)\
+ returntype SequenceImpl::get##primtype##Value(unsigned int index)\
+ {\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ CHECK_RANGE;\
+ const Property* p = (*i).getProp();\
+ if (p == 0) {\
+ return defval;\
+ }\
+ if (p->isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(*p);\
+ DataObject* list_do = dol[(*i).getIndex()];\
+ if (list_do != 0)\
+ {\
+ return list_do;\
+ }\
+ return defval;\
+ }\
+ return the_do->get##primtype(*((*i).getProp()));\
+ }
+
+#define CharGetter(returntype,primtype,defval)\
+ unsigned int SequenceImpl::get##primtype##Value(unsigned int index, returntype ptr, unsigned int max)\
+ {\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ CHECK_RANGE;\
+ const Property* p = (*i).getProp();\
+ if (p == 0) {\
+ return defval;\
+ }\
+ if (p->isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(*p);\
+ DataObject* list_do = dol[(*i).getIndex()];\
+ if (list_do != 0)\
+ {\
+ return ((DataObjectImpl*)list_do)->get##primtype(ptr, max);\
+ }\
+ return defval;\
+ }\
+ return the_do->get##primtype(*((*i).getProp()), ptr, max);\
+ }
+
+
+StringGetter(const char* , CString, 0);
+
+CharGetter( wchar_t* , String, 0);
+CharGetter( char*, Bytes, 0);
+
+unsigned int SequenceImpl::getLength(unsigned int index)
+{
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ const Property* p = (*i).getProp();
+ switch (p->getTypeEnum())
+ {
+ case Type::StringType:
+ return getStringValue(index,0,0);
+ case Type::BytesType:
+ return getBytesValue(index,0,0);
+ default:
+ return 0;
+ }
+}
+
+getter(bool, Boolean, false);
+getter(char, Byte, (char)0);
+getter(wchar_t, Character, 0);
+getter(short, Short, 0);
+getter(long, Integer, 0L);
+getter(int64_t, Long, 0);
+getter(float, Float, (float)0);
+getter(long double, Double, 0);
+getter(const SDODate, Date, 0);
+
+ObjectGetter(RefCountingPointer<DataObject> , DataObject, 0);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // generic getter for those types which support it
+ ///////////////////////////////////////////////////////////////////////////
+
+ void SequenceImpl::setCStringValue( unsigned int index, const char* s )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ (*i).setText(s);
+ return;
+ }
+ the_do->setCString(*((*i).getProp()),s);
+
+ }
+ void SequenceImpl::setBooleanValue( unsigned int index, bool b )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setBoolean(*((*i).getProp()),b);
+ }
+
+ void SequenceImpl::setByteValue( unsigned int index, char c )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setByte(*((*i).getProp()),c);
+ }
+
+ void SequenceImpl::setCharacterValue( unsigned int index, wchar_t c )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setCharacter(*((*i).getProp()),c);
+ }
+ void SequenceImpl::setStringValue( unsigned int index, const wchar_t* s , unsigned int len)
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setString(*((*i).getProp()),s, len);
+ }
+ void SequenceImpl::setBytesValue( unsigned int index, const char* s , unsigned int len)
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setBytes(*((*i).getProp()),s, len);
+ }
+ void SequenceImpl::setShortValue( unsigned int index, short s )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setShort(*((*i).getProp()),s);
+ }
+
+ void SequenceImpl::setIntegerValue( unsigned int index, long l)
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setInteger(*((*i).getProp()),l);
+ }
+
+
+ void SequenceImpl::setLongValue( unsigned int index, int64_t l )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setLong(*((*i).getProp()),l);
+ }
+
+ void SequenceImpl::setFloatValue( unsigned int index, float f )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setFloat(*((*i).getProp()),f);
+ }
+
+
+ void SequenceImpl::setDoubleValue(unsigned int index, long double d )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setDouble(*((*i).getProp()),d);
+ }
+
+ void SequenceImpl::setDateValue(unsigned int index, const SDODate t )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setDate(*((*i).getProp()),t);
+ }
+
+ void SequenceImpl::setDataObjectValue(unsigned int index, DataObjectPtr d )
+ {
+ SEQUENCE_ITEM_LIST::iterator i;
+ CHECK_RANGE;
+ if ((*i).getProp() == 0) {
+ return;
+ }
+ the_do->setDataObject(*((*i).getProp()),d);
+ }
+
+
+#define doadder(primtype,primval)\
+ bool SequenceImpl::add##primtype(const char* propertyName, primval v)\
+ {\
+ const PropertyImpl* p = the_do->getPropertyImpl(propertyName);\
+ if (p == 0)\
+ {\
+ if (the_do->getType().isOpenType())\
+ {\
+ p = the_do->define ##primtype (propertyName, v->getType());\
+ }\
+ if (p == 0)\
+ {\
+ std::string msg("Cannot find property:");\
+ msg += propertyName;\
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,\
+ msg.c_str());\
+ }\
+ }\
+ return add##primtype((const Property&)*p,v);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int propertyIndex, primval v)\
+ {\
+ return add##primtype(the_do->getProperty(propertyIndex), v);\
+ }\
+ bool SequenceImpl::add##primtype(const Property& p, primval v)\
+ {\
+ if (p.isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(p);\
+ dol.append((primval)v);\
+ /* the_list.push_back(seq_item(&p,dol.size()-1));*/\
+ return true;\
+ }\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ for (i=the_list.begin();i != the_list.end();++i) {\
+ const Property* pp = (*i).getProp();\
+ if (pp == 0) continue;\
+ if (!strcmp(pp->getName(),p.getName()))\
+ {\
+ SDO_THROW_EXCEPTION("add", SDOUnsupportedOperationException,\
+ "Sequence::add of property which already exists in sequence");\
+ }\
+ }\
+ the_do->set##primtype(p,v);\
+ the_list.push_back(seq_item(&p,0));\
+ return true;\
+ }
+
+
+#define adder(primtype,primval, platval)\
+ bool SequenceImpl::add##primtype(const char* propertyName, primval v)\
+ {\
+ const PropertyImpl* p = the_do->getPropertyImpl(propertyName);\
+ if (p == 0)\
+ {\
+ if (the_do->getType().isOpenType())\
+ {\
+ p = the_do->define ##primtype (propertyName);\
+ }\
+ if (p == 0)\
+ {\
+ std::string msg("Cannot find property:");\
+ msg += propertyName;\
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,\
+ msg.c_str());\
+ }\
+ }\
+ return add##primtype((const Property&)*p,v);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int propertyIndex, primval v)\
+ {\
+ return add##primtype(the_do->getProperty(propertyIndex), v);\
+ }\
+ bool SequenceImpl::add##primtype(const Property& p, primval v)\
+ {\
+ if (p.isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(p);\
+ dol.append((platval)v);\
+ /* the_list.push_back(seq_item(&p,dol.size()-1));*/\
+ return true;\
+ }\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ for (i=the_list.begin();i != the_list.end();++i) {\
+ const Property* pp = (*i).getProp();\
+ if (pp == 0) continue;\
+ if (!strcmp(pp->getName(),p.getName()))\
+ {\
+ SDO_THROW_EXCEPTION("add", SDOUnsupportedOperationException,\
+ "Sequence::add of property which already exists in sequence");\
+ }\
+ }\
+ the_do->set##primtype(p,v);\
+ the_list.push_back(seq_item(&p,0));\
+ return true;\
+ }
+
+adder( CString , const char* , const char* );
+adder( Boolean, bool, bool);
+adder( Byte, char , char );
+adder(Character, wchar_t, wchar_t);
+adder(Short, short, short);
+#if __WORDSIZE ==64
+adder(Integer, long, int64_t);
+#else
+adder(Integer, long, long);
+#endif
+adder(Long, int64_t, int64_t);
+adder(Float, float, float);
+adder(Double, long double, long double);
+adder(Date, const SDODate, const SDODate);
+doadder(DataObject, RefCountingPointer<DataObject> );
+
+
+#define charAdder(primtype,primval)\
+ bool SequenceImpl::add##primtype(const char* propertyName, primval v, unsigned int len)\
+ {\
+ const PropertyImpl* p = the_do->getPropertyImpl(propertyName);\
+ if (p == 0)\
+ {\
+ if (the_do->getType().isOpenType())\
+ {\
+ p = the_do->define ##primtype (propertyName);\
+ }\
+ if (p == 0)\
+ {\
+ std::string msg("Cannot find property:");\
+ msg += propertyName;\
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,\
+ msg.c_str());\
+ }\
+ }\
+ return add##primtype((const Property&)*p,v, len);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int propertyIndex, primval v, unsigned int len)\
+ {\
+ return add##primtype(the_do->getProperty(propertyIndex), v, len);\
+ }\
+ bool SequenceImpl::add##primtype(const Property& p, primval v, unsigned int len)\
+ {\
+ if (p.isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(p);\
+ dol.append((primval)v, len);\
+ /*the_list.push_back(seq_item(&p,dol.size()-1));*/\
+ return true;\
+ }\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ for (i=the_list.begin();i != the_list.end();++i) {\
+ const Property* pp = (*i).getProp();\
+ if (pp == 0) continue;\
+ if (!strcmp(pp->getName(),p.getName()))\
+ {\
+ SDO_THROW_EXCEPTION("add", SDOUnsupportedOperationException,\
+ "Sequence::add of property which already exists in sequence");\
+ }\
+ }\
+ the_do->set##primtype(p,v, len);\
+ the_list.push_back(seq_item(&p,0));\
+ return true;\
+ }
+
+
+charAdder ( String, const wchar_t* );
+charAdder ( Bytes , const char* );
+
+
+#define inserter(primtype,primval, platval)\
+ bool SequenceImpl::add##primtype(unsigned int index, const char* propertyName, primval v)\
+ {\
+ const PropertyImpl* p = the_do->getPropertyImpl(propertyName);\
+ if (p == 0)\
+ {\
+ if (the_do->getType().isOpenType())\
+ {\
+ p = the_do->define ##primtype (propertyName);\
+ }\
+ if (p == 0)\
+ {\
+ std::string msg("Cannot find property:");\
+ msg += propertyName;\
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,\
+ msg.c_str());\
+ }\
+ }\
+ return add##primtype(index,(const Property&)*p,v);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int index, unsigned int propertyIndex, primval v)\
+ {\
+ return add##primtype(index,the_do->getProperty(propertyIndex), v);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int index, const Property& p, primval v)\
+ {\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ SEQUENCE_ITEM_LIST::iterator i2 = the_list.end();\
+ int j;\
+ if (index >= the_list.size()) {\
+ return add##primtype(p,v);\
+ }\
+ if (p.isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(p);\
+ dol.append((platval)v);\
+ j = 0;\
+ for (i=the_list.begin();(j < index) && (i != the_list.end());++i) {\
+ j++;\
+ }\
+ /*the_list.insert(i,seq_item(&p,dol.size()-1));*/\
+ return true;\
+ }\
+ j = 0;\
+ for (i=the_list.begin();i != the_list.end();++i) {\
+ const Property* pp = (*i).getProp();\
+ if (pp == 0) continue;\
+ if (!strcmp(pp->getName(),p.getName()))\
+ {\
+ SDO_THROW_EXCEPTION("Insert", SDOUnsupportedOperationException,\
+ "Sequence::insert of property which already exists in sequence");\
+ }\
+ if (j == index) {\
+ i2 = i;\
+ }\
+ j++;\
+ }\
+ the_do->set##primtype(p,v);\
+ the_list.insert(i2,seq_item(&p,0));\
+ return true;\
+ }
+
+#define doinserter(primtype,primval)\
+ bool SequenceImpl::add##primtype(unsigned int index, const char* propertyName, primval v)\
+ {\
+ const PropertyImpl* p = the_do->getPropertyImpl(propertyName);\
+ if (p == 0)\
+ {\
+ if (the_do->getType().isOpenType())\
+ {\
+ p = the_do->define ##primtype (propertyName, v->getType());\
+ }\
+ if (p == 0)\
+ {\
+ std::string msg("Cannot find property:");\
+ msg += propertyName;\
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,\
+ msg.c_str());\
+ }\
+ }\
+ return add##primtype(index,(const Property&)*p,v);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int index, unsigned int propertyIndex, primval v)\
+ {\
+ return add##primtype(index,the_do->getProperty(propertyIndex), v);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int index, const Property& p, primval v)\
+ {\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ SEQUENCE_ITEM_LIST::iterator i2 = the_list.end();\
+ int j;\
+ if (index >= the_list.size()) {\
+ return add##primtype(p,v);\
+ }\
+ if (p.isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(p);\
+ dol.append((primval)v);\
+ j = 0;\
+ for (i=the_list.begin();(j < index) && (i != the_list.end());++i) {\
+ j++;\
+ }\
+ /*the_list.insert(i,seq_item(&p,dol.size()-1));*/\
+ return true;\
+ }\
+ j = 0;\
+ for (i=the_list.begin();i != the_list.end();++i) {\
+ const Property* pp = (*i).getProp();\
+ if (pp == 0) continue;\
+ if (!strcmp(pp->getName(),p.getName()))\
+ {\
+ SDO_THROW_EXCEPTION("Insert", SDOUnsupportedOperationException,\
+ "Sequence::insert of property which already exists in sequence");\
+ }\
+ if (j == index) {\
+ i2 = i;\
+ }\
+ j++;\
+ }\
+ the_do->set##primtype(p,v);\
+ the_list.insert(i2,seq_item(&p,0));\
+ return true;\
+ }
+
+inserter( CString , const char* , const char* );
+inserter( Boolean, bool, bool);
+inserter( Byte, char , char );
+inserter(Character, wchar_t, wchar_t );
+inserter(Short, short, short );
+#if __WORDSIZE ==64
+inserter(Integer, long, int64_t );
+#else
+inserter(Integer, long, long );
+#endif
+inserter(Long, int64_t, int64_t);
+inserter(Float, float, float );
+inserter(Double, long double, long double);
+inserter(Date, const SDODate, const SDODate);
+doinserter(DataObject, RefCountingPointer<DataObject>);
+
+
+
+#define charInserter(primtype,primval)\
+ bool SequenceImpl::add##primtype(unsigned int index, const char* propertyName, primval v, unsigned int len)\
+ {\
+ const PropertyImpl* p = the_do->getPropertyImpl(propertyName);\
+ if (p == 0)\
+ {\
+ if (the_do->getType().isOpenType())\
+ {\
+ p = the_do->define ##primtype (propertyName);\
+ }\
+ if (p == 0)\
+ {\
+ std::string msg("Cannot find property:");\
+ msg += propertyName;\
+ SDO_THROW_EXCEPTION("getProperty", SDOPropertyNotFoundException,\
+ msg.c_str());\
+ }\
+ }\
+ return add##primtype(index,(const Property&)*p,v, len);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int index, unsigned int propertyIndex, primval v, unsigned int len)\
+ {\
+ return add##primtype(index,the_do->getProperty(propertyIndex), v, len);\
+ }\
+ bool SequenceImpl::add##primtype(unsigned int index, const Property& p, primval v, unsigned int len)\
+ {\
+ SEQUENCE_ITEM_LIST::iterator i;\
+ SEQUENCE_ITEM_LIST::iterator i2 = the_list.end();\
+ unsigned int j;\
+ if (index >= the_list.size()) {\
+ return add##primtype(p,v, len);\
+ }\
+ if (p.isMany())\
+ {\
+ DataObjectList& dol = the_do->getList(p);\
+ dol.append((primval)v, len);\
+ j = 0;\
+ for (i=the_list.begin();(j < index) && (i != the_list.end());++i) {\
+ j++;\
+ }\
+ /*the_list.insert(i,seq_item(&p,dol.size()-1));*/\
+ return true;\
+ }\
+ j = 0;\
+ for (i=the_list.begin();i != the_list.end();++i) {\
+ const Property* pp = (*i).getProp();\
+ if (pp == 0) continue;\
+ if (!strcmp(pp->getName(),p.getName()))\
+ {\
+ SDO_THROW_EXCEPTION("Insert", SDOUnsupportedOperationException,\
+ "Sequence::insert of property which already exists in sequence");\
+ }\
+ if (j == index) {\
+ i2 = i;\
+ }\
+ j++;\
+ }\
+ the_do->set##primtype(p,v, len);\
+ the_list.insert(i2,seq_item(&p,0));\
+ return true;\
+ }
+
+
+charInserter( String , const wchar_t* );
+charInserter (Bytes , const char* );
+
+
+
+
+
+ void SequenceImpl::push(const Property& p, unsigned int index)
+ {
+ the_list.push_back(seq_item(&p,index));
+ }
+
+ void SequenceImpl::remove(unsigned int index)
+ {
+ if (index >= the_list.size()) {
+ std::string msg("Index out of range:");
+ msg += index;
+ SDO_THROW_EXCEPTION("Sequence remove", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+ SEQUENCE_ITEM_LIST::iterator i;
+ int j = 0;
+ for (i=the_list.begin();(j < index) && (i != the_list.end()) ; ++i)
+ {
+ j++;
+ }
+ the_list.erase(i);
+ return;
+ }
+
+ void SequenceImpl::removeAll(const Property& p)
+ {
+ int j = 0;
+ const Property* prop;
+ SEQUENCE_ITEM_LIST::iterator i;
+ for (i=the_list.begin();i != the_list.end(); ++i)
+ {
+ prop = (*i).getProp();
+ if (prop != 0) {
+ if (!strcmp(prop->getName(),
+ p.getName()))
+ {
+ // not sure this works - does i still equate
+ // to an iterator over the list after the remove?
+ i = the_list.erase(i);
+ }
+ }
+ }
+
+ return;
+ }
+
+ void SequenceImpl::move(unsigned int toIndex, unsigned int fromIndex)
+ {
+ if (fromIndex >= the_list.size()) {
+ std::string msg("Index out of range:");
+ msg += fromIndex;
+ SDO_THROW_EXCEPTION("Sequence Move", SDOIndexOutOfRangeException,
+ msg.c_str());
+ }
+
+ if (toIndex == fromIndex) return;
+
+ SEQUENCE_ITEM_LIST::iterator i1,
+ i2 = the_list.end(),
+ i3 = the_list.end();
+ int j = 0;
+ for (i3 = the_list.begin();
+ j < toIndex && j < fromIndex &&
+ i3 != the_list.end() ; ++i3);
+ {
+ if (j == toIndex) i1 = i3;
+ if (j == fromIndex) i2 = i3;
+ j++;
+ }
+
+ if (toIndex < fromIndex)
+ {
+ the_list.insert( i1, *i2);
+ the_list.erase(i2);
+ }
+ else
+ {
+ if (toIndex + 1 == the_list.size())
+ {
+ the_list.push_back(*i2);
+ }
+ else
+ {
+ the_list.insert(++i1,*i2);
+ }
+ the_list.erase(i2);
+ }
+ return;
+ }
+
+ bool SequenceImpl::addText(const char* text)
+ {
+ the_list.push_back(seq_item(text));
+ return true;
+ }
+
+ bool SequenceImpl::isText(unsigned int index)
+ {
+ if (index >= the_list.size()) {
+ return false;
+ }
+ SEQUENCE_ITEM_LIST::iterator i;
+ int j = 0;
+ for (i= the_list.begin(); (j < index) && (i != the_list.end()); ++i)
+ {
+ j++;
+ }
+ if ((*i).getProp() == 0)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ bool SequenceImpl::addText(unsigned int index, const char* text)
+ {
+ if (index >= the_list.size()) {
+ return addText(text);
+ }
+
+ SEQUENCE_ITEM_LIST::iterator i;
+ int j = 0;
+ for (i= the_list.begin(); (j < index) && (i != the_list.end()); ++i)
+ {
+ j++;
+ }
+ the_list.insert(i,seq_item(text));
+ return true;
+ }
+
+ bool SequenceImpl::setText(unsigned int index, const char* text)
+ {
+ if (index >= the_list.size()) {
+ return false;
+ }
+
+ if (!isText(index))
+ {
+ return false;
+ }
+
+ SEQUENCE_ITEM_LIST::iterator i;
+ int j = 0;
+ for (i= the_list.begin(); (j < index) && (i != the_list.end()); ++i)
+ {
+ j++;
+ }
+ (*i).setText(text);
+ return true;
+ }
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.h
new file mode 100644
index 0000000000..620de1187d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SequenceImpl.h
@@ -0,0 +1,375 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/17 16:01:05 $ */
+
+#ifndef _SEQUENCEIMPL_H_
+#define _SEQUENCEIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include <vector>
+
+
+#include "commonj/sdo/Sequence.h"
+#include "commonj/sdo/SDODate.h"
+
+#define SequenceImplPtr RefCountingPointer<SequenceImpl>
+
+namespace commonj{
+namespace sdo{
+
+class Property; /* forward declaration */
+class DataObjectImpl;
+
+/** SequenceImpl implements the abstract class Sequence.
+ *
+ * A sequence is a heterogeneous list of properties and corresponding values.
+ * It represents an ordered arbitrary mixture of data values from more
+ * than one property of a {@link DataObject data object}.
+ */
+
+class SequenceImpl : public Sequence
+{
+ public:
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the number of entries in the sequence.
+ // @return the number of entries.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual unsigned int size();
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property for the given entry index.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual const Property& getProperty(unsigned int index);
+
+ /**
+ * Return the data object associated with this sequence
+ */
+
+ SDO_API virtual const DataObjectPtr getDataObject();
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property for the given entry index.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual unsigned int getIndex(const Property& p, unsigned int pindex=0);
+ virtual unsigned int getIndex(const char* propName, unsigned int pindex=0);
+
+ virtual unsigned int getListIndex(unsigned int index);
+
+ Type::Types getTypeEnum(unsigned int index);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property value for the given entry index.
+ // @param index the index of the entry.
+ // @return the value for the given entry index..
+ ///////////////////////////////////////////////////////////////////////////
+ virtual const char* getCStringValue(unsigned int index);
+ virtual bool getBooleanValue(unsigned int index);
+ virtual char getByteValue(unsigned int index);
+ virtual wchar_t getCharacterValue(unsigned int index);
+ virtual unsigned int getStringValue(unsigned int index, wchar_t* val, unsigned int max);
+ virtual unsigned int getBytesValue(unsigned int index, char* val, unsigned int max);
+ virtual short getShortValue(unsigned int index);
+ virtual long getIntegerValue(unsigned int index);
+ virtual int64_t getLongValue(unsigned int index);
+ virtual float getFloatValue(unsigned int index);
+ virtual long double getDoubleValue(unsigned int index);
+ virtual const SDODate getDateValue(unsigned int index);
+ virtual DataObjectPtr getDataObjectValue(unsigned int index);
+
+ virtual unsigned int getLength(unsigned int index);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // sets the entry at a specified index to the new value.
+ // @param index the index of the entry.
+ // @param value the new value for the entry.
+ ///////////////////////////////////////////////////////////////////////////
+
+ virtual void setCStringValue( unsigned int index, const char* s );
+ virtual void setBooleanValue( unsigned int index, bool b );
+ virtual void setByteValue( unsigned int index, char c );
+ virtual void setCharacterValue( unsigned int index, wchar_t c );
+ virtual void setBytesValue( unsigned int index, const char* s , unsigned int len);
+ virtual void setStringValue( unsigned int index, const wchar_t* s , unsigned int len);
+ virtual void setShortValue( unsigned int index, short s );
+ virtual void setIntegerValue( unsigned int index, long i );
+ virtual void setLongValue( unsigned int index, int64_t l );
+ virtual void setFloatValue( unsigned int index, float f );
+ virtual void setDoubleValue( unsigned int index, long double d );
+ virtual void setDateValue( unsigned int index, const SDODate t );
+ virtual void setDataObjectValue(unsigned int index, DataObjectPtr d );
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new entry with the specified property name and value
+ // to the end of the entries.
+ // @param propertyName the name of the entry's property.
+ // @param value the value for the entry.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool addCString( const char* propertyName,const char* s );
+ virtual bool addBoolean( const char* propertyName,bool b );
+ virtual bool addByte( const char* propertyName,char c );
+ virtual bool addCharacter( const char* propertyName,wchar_t c );
+ virtual bool addString( const char* propertyName,const wchar_t* s , unsigned int len);
+ virtual bool addBytes( const char* propertyName,const char* s , unsigned int len);
+ virtual bool addShort( const char* propertyName,short s );
+ virtual bool addInteger( const char* propertyName,long i );
+ virtual bool addLong( const char* propertyName,int64_t l );
+ virtual bool addFloat( const char* propertyName,float f );
+ virtual bool addDouble( const char* propertyName,long double d );
+ virtual bool addDate( const char* propertyName,const SDODate t );
+ virtual bool addDataObject(const char* propertyName,DataObjectPtr d );
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new entry with the specified property index and value
+ // to the end of the entries.
+ // @param propertyIndex the index of the entry's property.
+ // @param value the value for the entry.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool addCString( unsigned int propertyIndex,const char* s );
+ virtual bool addBoolean( unsigned int propertyIndex,bool b );
+ virtual bool addByte( unsigned int propertyIndex,char c );
+ virtual bool addCharacter( unsigned int propertyIndex,wchar_t c );
+ virtual bool addString( unsigned int propertyIndex,const wchar_t* s , unsigned int len);
+ virtual bool addBytes( unsigned int propertyIndex,const char* s , unsigned int len);
+ virtual bool addShort( unsigned int propertyIndex,short s );
+ virtual bool addInteger( unsigned int propertyIndex,long i );
+ virtual bool addLong( unsigned int propertyIndex,int64_t l );
+ virtual bool addFloat( unsigned int propertyIndex,float f );
+ virtual bool addDouble( unsigned int propertyIndex,long double d );
+ virtual bool addDate( unsigned int propertyIndex,const SDODate t );
+ virtual bool addDataObject(unsigned int propertyIndex,DataObjectPtr d );
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new entry with the specified property and value
+ // to the end of the entries.
+ // @param property the property of the entry.
+ // @param value the value for the entry.
+ ///////////////////////////////////////////////////////////////////////////
+
+ virtual bool addCString( const Property& property,const char* s );
+ virtual bool addBoolean( const Property& property,bool b );
+ virtual bool addByte( const Property& property,char c );
+ virtual bool addCharacter( const Property& property,wchar_t c );
+ virtual bool addString( const Property& property,const wchar_t* s , unsigned int len);
+ virtual bool addBytes( const Property& property,const char* s , unsigned int len);
+ virtual bool addShort( const Property& property,short s );
+ virtual bool addInteger( const Property& property,long i );
+ virtual bool addLong( const Property& property,int64_t l );
+ virtual bool addFloat( const Property& property,float f );
+ virtual bool addDouble( const Property& property,long double d );
+ virtual bool addDate( const Property& property,const SDODate t );
+ virtual bool addDataObject(const Property& property,DataObjectPtr d );
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new entry with the specified property name and value
+ // at the specified entry index.
+ // @param index the index at which to add the entry.
+ // @param propertyName the name of the entry's property.
+ // @param value the value for the entry.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool addCString( unsigned int index,const char* propertyName,const char* s );
+ virtual bool addBoolean( unsigned int index,const char* propertyName,bool b );
+ virtual bool addByte( unsigned int index,const char* propertyName,char c );
+ virtual bool addCharacter( unsigned int index,const char* propertyName,wchar_t c );
+ virtual bool addString( unsigned int index,const char* propertyName,const wchar_t* s , unsigned int len);
+ virtual bool addBytes( unsigned int index,const char* propertyName,const char* s , unsigned int len);
+ virtual bool addShort( unsigned int index,const char* propertyName,short s );
+ virtual bool addInteger( unsigned int index,const char* propertyName,long i );
+ virtual bool addLong( unsigned int index,const char* propertyName,int64_t l );
+ virtual bool addFloat( unsigned int index,const char* propertyName,float f );
+ virtual bool addDouble( unsigned int index,const char* propertyName,long double d );
+ virtual bool addDate( unsigned int index,const char* propertyName,const SDODate t );
+ virtual bool addDataObject(unsigned int index,const char* propertyName,DataObjectPtr d );
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new entry with the specified property index and value
+ // at the specified entry index.
+ // @param index the index at which to add the entry.
+ // @param propertyIndex the index of the entry's property.
+ // @param value the value for the entry.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool addCString( unsigned int index,unsigned int propertyIndex,const char* s );
+ virtual bool addBoolean( unsigned int index,unsigned int propertyIndex,bool b );
+ virtual bool addByte( unsigned int index,unsigned int propertyIndex,char c );
+ virtual bool addCharacter( unsigned int index,unsigned int propertyIndex,wchar_t c );
+ virtual bool addString( unsigned int index,unsigned int propertyIndex,const wchar_t* s , unsigned int len);
+ virtual bool addBytes( unsigned int index,unsigned int propertyIndex,const char* s , unsigned int len);
+ virtual bool addShort( unsigned int index,unsigned int propertyIndex,short s );
+ virtual bool addInteger( unsigned int index,unsigned int propertyIndex,long i );
+ virtual bool addLong( unsigned int index,unsigned int propertyIndex,int64_t l );
+ virtual bool addFloat( unsigned int index,unsigned int propertyIndex,float f );
+ virtual bool addDouble( unsigned int index,unsigned int propertyIndex,long double d );
+ virtual bool addDate( unsigned int index,unsigned int propertyIndex,const SDODate t );
+ virtual bool addDataObject(unsigned int index,unsigned int propertyIndex,DataObjectPtr d );
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new entry with the specified property and value
+ // at the specified entry index.
+ // @param index the index at which to add the entry.
+ // @param property the property of the entry.
+ // @param value the value for the entry.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool addCString( unsigned int index,const Property& property,const char* s );
+ virtual bool addBoolean( unsigned int index,const Property& property,bool b );
+ virtual bool addByte( unsigned int index,const Property& property,char c );
+ virtual bool addCharacter( unsigned int index,const Property& property,wchar_t c );
+ virtual bool addString( unsigned int index,const Property& property,const wchar_t* s , unsigned int len);
+ virtual bool addBytes( unsigned int index,const Property& property,const char* s , unsigned int len);
+ virtual bool addShort( unsigned int index,const Property& property,short s );
+ virtual bool addInteger( unsigned int index,const Property& property,long i );
+ virtual bool addLong( unsigned int index,const Property& property,int64_t l );
+ virtual bool addFloat( unsigned int index,const Property& property,float f );
+ virtual bool addDouble( unsigned int index,const Property& property,long double d );
+ virtual bool addDate( unsigned int index,const Property& property,const SDODate t );
+ virtual bool addDataObject(unsigned int index,const Property& property,DataObjectPtr d );
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // removes the entry at the given entry index.
+ // @param index the index of the entry
+ ///////////////////////////////////////////////////////////////////////////
+ virtual void remove(unsigned int index);
+ virtual void removeAll(const Property& p);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // pushes a new entry without setting the property.
+ // @param index the index of the entry
+ ///////////////////////////////////////////////////////////////////////////
+ virtual void push(const Property& p, unsigned int index);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Moves the entry at <code>fromIndex</code> to <code>toIndex</code>.
+ // @param toIndex the index of the entry destination.
+ // @param fromIndex the index of the entry to move.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual void move(unsigned int toIndex, unsigned int fromIndex);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new Setting with the SDO text Property
+ // to the end of the Settings.
+ // @param text value of the Setting.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool addText(const char* text);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // adds a new Setting with the SDO text Property
+ // to the Settings.
+ // @param index the index at which to add the entry.
+ // @param text value of the Setting.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool addText(unsigned int index, const char* text);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // sets a text Property
+ // @param index the index at which to set the entry.
+ // @param text value of the Setting.
+ ///////////////////////////////////////////////////////////////////////////
+ bool setText(unsigned int index, const char* text);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Checks if an entry is text or a setting.
+ ///////////////////////////////////////////////////////////////////////////
+ virtual bool isText(unsigned int index);
+
+ SequenceImpl(DataObject* the_do);
+ SequenceImpl(SequenceImpl* s);
+
+ private:
+
+ SequenceImpl();
+
+ DataObjectImpl* the_do;
+
+ class seq_item {
+ public:
+ seq_item(const Property* p, unsigned int i):
+ the_prop(p)
+ {
+ index = i;
+ text = 0;
+ }
+ seq_item(const char* t)
+ {
+ text = new char[strlen(t) + 1];
+ strcpy(text,t);
+ the_prop = 0;
+ }
+
+ ~seq_item()
+ {
+ if (text) {
+ delete text;
+ }
+ }
+
+ seq_item(const seq_item& sin)
+ {
+ the_prop = sin.the_prop;
+ index = sin.index;
+ if (sin.text) {
+ text = new char[strlen(sin.text) +1];
+ strcpy(text, sin.text);
+ }
+ else
+ {
+ text =0;
+ }
+ }
+
+ const Property* getProp() {return the_prop;}
+ unsigned int getIndex() { return index;}
+ char* getText() { return text;}
+ void setProp(Property* p) { the_prop = p;}
+ void setText(const char* intext)
+ {
+ if (intext != 0)
+ {
+ if (text != 0)
+ {
+ delete text;
+ }
+ text = new char[strlen(intext) +1];
+ strcpy(text,intext);
+ }
+ }
+ void setIndex(unsigned int i)
+ {
+ index = i;
+ }
+ private:
+ const Property* the_prop;
+ unsigned int index;
+ char* text;
+ };
+
+ typedef std::list<seq_item> SEQUENCE_ITEM_LIST;
+
+ SEQUENCE_ITEM_LIST the_list;
+
+};
+};
+};
+
+#endif //_SEQUENCE_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.cpp
new file mode 100644
index 0000000000..6aa8dab8b6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.cpp
@@ -0,0 +1,303 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/Setting.h"
+#include "commonj/sdo/TypeImpl.h"
+
+namespace commonj{
+namespace sdo {
+
+ Setting::Setting(bool set, bool nul, void* invalue, unsigned int len, const Property& p, unsigned int inindex)
+ : bisSet(set), bisNull(nul) , value(invalue),theProp(&p)
+ {
+ index = inindex;
+ length = len;
+ strbuf = 0;
+ }
+
+ void Setting::copy(const Setting& s)
+ {
+ bisSet = s.isSet();
+ bisNull = s.isNull();
+ index = s.getIndex();
+ length = s.getLength();
+ theProp = &(s.getProperty());
+ strbuf = 0;
+ switch (theProp->getTypeEnum())
+ {
+ case Type::BooleanType:
+ value = new long;
+ *(long*)value = (long)s.getBooleanValue();
+ break;
+ case Type::ByteType:
+ value = new long;
+ *(long*)value = (long)s.getByteValue();
+ break;
+ case Type::CharacterType:
+ value = new long;
+ *(long*)value = (long)s.getCharacterValue();
+ break;
+ case Type::IntegerType:
+ value = new long;
+ *(long*)value = (long)s.getIntegerValue();
+ break;
+ case Type::ShortType:
+ value = new long;
+ *(long*)value = (long)s.getShortValue();
+ break;
+ case Type::DoubleType:
+ value = new long double;
+ *(long double*)value = s.getDoubleValue();
+ break;
+ case Type::FloatType:
+ value = new float;
+ *(float*)value = s.getFloatValue();
+ break;
+ case Type::LongType:
+ value = new int64_t;
+ *(int64_t*)value = s.getLongValue();
+ break;
+ case Type::DateType:
+ value = new long;
+ *(long*)value = long(s.getDateValue().getTime());
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ value = new wchar_t[length];
+ s.getStringValue((wchar_t*)value,length);
+ break;
+ case Type::BytesType:
+ value = new char[length];
+ s.getBytesValue((char*)value,length);
+ break;
+ case Type::OtherTypes:
+ case Type::DataObjectType:
+ case Type::ChangeSummaryType:
+ value = s.getDataObjectValue();
+ default:
+ break;
+ }
+ }
+
+ Setting& Setting::operator=(const Setting& s)
+ {
+ if (this == &s) return *this;
+ copy(s);
+ return *this;
+ }
+
+ Setting::Setting(const Setting& s)
+ {
+ copy(s);
+ }
+
+ Setting::~Setting()
+ {
+ // The value has been allocated for everything except data objects
+
+ switch (theProp->getTypeEnum())
+ {
+ case Type::BooleanType:
+ case Type::ByteType:
+ case Type::CharacterType:
+ case Type::IntegerType:
+ case Type::ShortType:
+ delete (long*)value;
+ break;
+ case Type::DoubleType:
+ delete (long double*)value;
+ break;
+ case Type::FloatType:
+ delete (float*)value;
+ break;
+ case Type::LongType:
+ delete (int64_t*)value;
+ break;
+ case Type::DateType:
+ delete (long*)value;
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ delete (wchar_t*)value;
+ break;
+ case Type::BytesType:
+ delete (char*)value;
+ break;
+ case Type::OtherTypes:
+ case Type::DataObjectType:
+ case Type::ChangeSummaryType:
+ default:
+ break;
+ }
+ if (strbuf != 0) delete strbuf;
+ }
+
+ const Property& Setting::getProperty() const
+ {
+ return *theProp;
+ }
+
+ const Type& Setting::getType() const
+ {
+ return theProp->getType();
+ }
+
+ bool Setting::getBooleanValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToBoolean(value, length);
+ //if (value == 0) return false;
+ //if (*(long*)value != 0) {
+ // return true;
+ //}
+ //return false;
+ }
+
+ char Setting::getByteValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToByte(value, length);
+ //if (value == 0) return 0;
+ //return (char)*(long*)value;
+ }
+
+ wchar_t Setting::getCharacterValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToCharacter(value, length);
+ //if (value == 0) return 0;
+ //return (wchar_t)*(long*)value;
+ }
+
+ unsigned int Setting::getBytesValue(char* buffer, unsigned int max) const
+ {
+ if (buffer == 0 && max == 0) return length;
+
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToBytes(value, buffer,length, max);
+ //int i;
+ //char* c = (char*)value;
+ //for (i=0;i < max && i < length;i++)
+ //{
+ // buffer[i] = (char)*c;
+ // c++;
+ //}
+ //return i;
+ }
+
+ unsigned int Setting::getStringValue(wchar_t* buffer, unsigned int max) const
+ {
+ if (buffer == 0 && max == 0) return length;
+
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToString(value, buffer,length, max);
+ //int i;
+ //wchar_t* c = (wchar_t*)value;
+ //for (i=0;i < max && i < length;i++)
+ //{
+ // buffer[i] = (wchar_t)*c;
+ // c++;
+ //}
+ //return i;
+ }
+
+ short Setting::getShortValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToShort(value,length);
+ //return (short)*(long*)value;
+ }
+
+ long Setting::getIntegerValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToInteger(value, length);
+ //return *(long*)value;
+ }
+
+
+ int64_t Setting::getLongValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToLong(value, length);
+ //return (int64_t)*(int64_t*)value;
+ }
+
+ float Setting::getFloatValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToFloat(value, length);
+ //return (float)*(float*)value;
+ }
+
+ const SDODate Setting::getDateValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToDate(value, length);
+ }
+
+
+ long double Setting::getDoubleValue() const
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToDouble(value, length);
+ //return (long double)*(long double*)value;
+ }
+
+ const char* Setting::getCStringValue()
+ {
+ TypeImpl* t = (TypeImpl*)&(getType());
+ return t->convertToCString(value, &strbuf, length);
+ //return (const char*)value;
+ }
+
+ RefCountingPointer<DataObject> Setting::getDataObjectValue() const
+ {
+ DataObject *dob = (DataObject*)value;
+ return RefCountingPointer<DataObject>(dob);
+ }
+
+
+ unsigned int Setting::getLength() const
+ {
+ return length;
+ }
+
+ unsigned int Setting::getIndex() const
+ {
+ return index;
+ }
+
+ bool Setting::isSet() const
+ {
+ return bisSet;
+ }
+
+ bool Setting::isNull() const
+ {
+ return bisNull;
+ }
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.h
new file mode 100644
index 0000000000..37de243716
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Setting.h
@@ -0,0 +1,149 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef SETTING_H
+#define SETTING_H
+
+#include "commonj/sdo/export.h"
+
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/SDODate.h"
+
+namespace commonj{
+namespace sdo {
+
+ class Property;
+
+ /**
+ * A Setting encapsulates a property and a corresponding single value of
+ * the property's type.
+ */
+
+ class Setting
+ {
+ public:
+
+ Setting(bool set, bool nul, void* invalue, unsigned int len, const Property& p,
+ unsigned int inindex);
+
+ Setting(const Setting& s);
+
+ void copy(const Setting& s);
+
+ Setting& operator=(const Setting& s);
+
+
+ virtual ~Setting();
+
+
+ /** getProperty returns the property set.
+ *
+ * Returns the property of the Setting.
+ * @return the Setting property.
+ */
+
+ SDO_API const Property& getProperty() const;
+
+ /** getType returns the type of the property
+ *
+ * Returns the type of this property. This is the same as
+ * getProperty().getType()
+ */
+
+ SDO_API const Type& getType() const;
+
+ /** getTypeEnum returns the type enumerator
+ *
+ * Returns the enum for the type of this property
+ */
+
+ SDO_API Type::Types getTypeEnum() const;
+
+
+ /** get methods get the right type of value from the setting
+ *
+ *
+ * Returns the value of the Setting. This must be of the right type for
+ * Setting value.
+ */
+
+ SDO_API bool getBooleanValue() const;
+ SDO_API char getByteValue() const;
+ SDO_API wchar_t getCharacterValue() const;
+ SDO_API unsigned int getBytesValue(char* buffer, unsigned int max) const;
+ SDO_API unsigned int getStringValue(wchar_t* buffer, unsigned int max) const;
+ SDO_API short getShortValue() const;
+ SDO_API long getIntegerValue() const;
+ SDO_API int64_t getLongValue() const;
+ SDO_API float getFloatValue() const;
+ SDO_API long double getDoubleValue() const;
+ SDO_API const SDODate getDateValue() const;
+ SDO_API const char* getCStringValue() ;
+ SDO_API DataObjectPtr getDataObjectValue() const;
+
+
+
+ /** getIndex returns the index in a many-valued property
+ *
+ * Returns the index of the Setting, if this is many valued
+ */
+
+ SDO_API unsigned int getIndex() const;
+
+
+ /** getLength gives the length of a string or bytes
+ *
+ * Returns the length of the setting, if this is a String or
+ * Bytes type
+ */
+
+ SDO_API unsigned int getLength() const ;
+
+ /** isSet returns whether the property WAS set.
+ *
+ * Returns whether or not the property is set. This value comes from the
+ * setting, and tells us whether the property was set before the change
+ * occurred.
+ */
+
+ SDO_API bool isSet() const;
+
+ /** isNull is true if the property value WAS null
+ *
+ * Returns whether or not the property was null beforfe the setting
+ * happened.
+ */
+
+ SDO_API bool isNull() const;
+
+ private:
+
+ bool bisSet;
+ bool bisNull;
+ void* value;
+ const Property* theProp;
+ unsigned int length;
+ unsigned int index;
+ char* strbuf;
+ };
+};
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.cpp
new file mode 100644
index 0000000000..2617f49289
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.cpp
@@ -0,0 +1,113 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/17 16:01:05 $ */
+
+#include "commonj/sdo/SDORuntimeException.h"
+
+#include "commonj/sdo/SettingList.h"
+#include "commonj/sdo/Logger.h"
+#include "commonj/sdo/Setting.h"
+
+namespace commonj{
+namespace sdo {
+
+
+//SettingList::SettingList(SETTING_VECTOR p) : slist (p)
+//{
+//}
+
+/*SettingList::SettingList(const SettingList &pin)
+{
+ Logger::log("SettingList copy constructor\n");
+ slist = std::vector<Setting>(pin.getVec());
+}
+*/
+
+SettingList::SettingList()
+{
+}
+
+SettingList::~SettingList()
+{
+ while (slist.size() > 0)
+ {
+ Setting* s = slist[0];
+ slist.erase(slist.begin());
+ delete s;
+ }
+
+}
+
+
+Setting& SettingList::operator[] (int pos) const
+{
+ validateIndex(pos);
+ return (*slist[pos]);
+}
+
+Setting* SettingList::get(int pos)
+{
+ validateIndex(pos);
+ return (slist[pos]);
+}
+
+int SettingList::size () const
+{
+ return slist.size();
+}
+
+//SETTING_VECTOR SettingList::getVec() const
+//{
+// return slist;
+//}
+
+void SettingList::insert (unsigned int index, Setting* d)
+{
+ slist.insert(slist.begin()+index, d);
+}
+
+void SettingList::append ( Setting* d)
+{
+ slist.insert(slist.end(),d);
+}
+
+void SettingList::remove(unsigned int index)
+{
+ validateIndex(index);
+ const Setting* s = slist[index];
+ slist.erase(slist.begin()+index);
+ delete s;
+ return;
+}
+
+void SettingList::validateIndex(int index) const
+{
+ if ((index < 0) || (index > size()))
+ {
+ std::string msg("Index out of range:");
+ msg += index;
+ SDO_THROW_EXCEPTION("ValidateIndex", SDOIndexOutOfRangeException,
+ msg.c_str());
+
+ }
+
+}
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.h
new file mode 100644
index 0000000000..63089a1b70
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/SettingList.h
@@ -0,0 +1,75 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/17 16:01:05 $ */
+
+#ifndef SETTINGLIST_H
+#define SETTINGLIST_H
+
+
+
+#include <vector>
+#include "commonj/sdo/Setting.h"
+
+namespace commonj{
+namespace sdo{
+
+typedef std::vector< Setting*> SETTING_VECTOR;
+
+/** SettingList is a list of settings returned by a change summary
+ */
+
+class SettingList
+{
+
+public:
+ //SettingList(SETTING_VECTOR sl);
+ SettingList();
+
+ virtual ~SettingList();
+
+ /** [] is the index operator
+ *
+ * This gives access to elements of the list
+ */
+
+ SDO_API virtual Setting& operator[] (int pos) const;
+
+ /** size() returns the number of settings
+ *
+ * This method returns the size of the list os settings found.
+ * These may be creations, deletions or changes.
+ */
+
+ SDO_API virtual int size () const;
+
+ virtual void insert (unsigned int index, Setting* d);
+ virtual void append ( Setting* d);
+ virtual void remove (unsigned int index);
+ virtual Setting* get (int pos);
+
+
+private:
+ SETTING_VECTOR slist;
+
+ void validateIndex(int index) const;
+};
+
+};
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.cpp
new file mode 100644
index 0000000000..3f381ed1cf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.cpp
@@ -0,0 +1,36 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/Type.h"
+
+namespace commonj{
+namespace sdo{
+
+
+ Type::~Type()
+ {
+ }
+
+ const SDOString Type::SDOTypeNamespaceURI = "commonj.sdo";
+
+};
+};
+// end - namespace sdo
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.h
new file mode 100644
index 0000000000..7b7b939d6e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/Type.h
@@ -0,0 +1,230 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/02 16:41:30 $ */
+
+#ifndef _SDO_TYPE_H_
+#define _SDO_TYPE_H_
+
+
+#include "commonj/sdo/export.h"
+
+#include "commonj/sdo/PropertyList.h"
+#include "commonj/sdo/SDOString.h"
+
+
+namespace commonj{
+namespace sdo{
+
+
+
+
+class Property;
+
+ /**
+ *
+ * Type is a representation of the type of a property of a data object.
+ */
+
+class Type
+{
+
+public:
+
+
+/** \enum Types
+ *
+ * This is the enumerator for all DataType types. All DataObjectType types
+ * appear as a Type::Types of DataObjectType.
+ * otherTypes, ChangeSumamryType and TextType are not used by client code.
+ */
+
+
+ SDO_API enum Types
+ {
+ // Zero is a value for 'unknown type; - all data objects'
+ OtherTypes = 0,
+ BigDecimalType,
+ BigIntegerType,
+ BooleanType,
+ ByteType,
+ BytesType,
+ CharacterType,
+ DateType,
+ DoubleType,
+ FloatType,
+ IntegerType,
+ LongType,
+ ShortType,
+ StringType,
+ UriType,
+ DataObjectType,
+ ChangeSummaryType,
+ TextType,
+ OpenDataObjectType,
+ num_types
+ };
+
+ virtual SDO_API ~Type();
+
+ /** getName returns the name of the type
+ *
+ * This method returns a const char* name of the type.
+ */
+
+ virtual SDO_API const char* getName() const = 0;
+
+ /** getAlias returns the n'th alias
+ *
+ * This method returns a const char* corresponding to the
+ * alias at index n of the list of aliases. Use getAliasCount to
+ * discover the size of the list.
+ */
+
+ virtual SDO_API const char* getAlias(unsigned int index = 0) const = 0;
+
+ /** getAliasCount returns the number of aliases
+ *
+ * This method returns the number of aliases for this type
+ */
+
+ virtual SDO_API unsigned int getAliasCount() const = 0;
+
+ /** getBaseType returns the base if there is one
+ *
+ * This method returns a const Type* corresponding to the
+ * base Type for this type. The base type is the one which
+ * this type inherits from.
+ */
+
+ virtual SDO_API const Type* getBaseType() const = 0;
+
+ /** getURI returns the URI for this type
+ *
+ * This method returns the URI for this type. The URI may be
+ * null.
+ */
+
+ virtual SDO_API const char* getURI() const = 0;
+
+
+
+ /** getProperties returns a list of properties for this type
+ *
+ * This method returns the list of properties for this type.
+ * Instances of open types may have more properties than appear
+ * in this list.
+ * See the propertylist API.
+ */
+
+ virtual SDO_API PropertyList getProperties() const = 0;
+
+
+ /** getProperty returns a property for this type
+ *
+ * This method returns a property, by index or by name
+ */
+
+ virtual SDO_API const Property& getProperty(const char* propertyName) const = 0;
+ virtual SDO_API const Property& getProperty(const SDOString& propertyName) const = 0;
+ virtual SDO_API const Property& getProperty(unsigned int index) const = 0;
+
+ /** getPropertyIndex returns an index
+ *
+ * This method returns a property index for a named property
+ */
+
+ virtual SDO_API unsigned int getPropertyIndex(const char* propertyName) const = 0;
+ virtual SDO_API unsigned int getPropertyIndex(const SDOString& propertyName) const = 0;
+
+ /** isDataObjectType true if not a DataType
+ *
+ * This method returns true if the type is not a DataType, and is therefore
+ * a DataObjectType with properties.
+ */
+
+ virtual SDO_API bool isDataObjectType() const = 0;
+
+
+ /** isSequencedType true if the type is sequenced
+ *
+ * This method returns true if the type is sequenced, and is therefore
+ * objects of this type can be manipulate via their sequence interface.
+ */
+
+ virtual SDO_API bool isSequencedType() const = 0;
+
+
+ /** isOpenType true if the type is open
+ *
+ * Normal types have a predefined list of properties. Trying to set
+ * properties which do not exist will cause an exception to be thrown.
+ * Open types, on the other hand, may have properties added to their
+ * instances runtime. These properties get added silently when setting a
+ * property value for a property which does not exist.
+ * Different instances of these objects may have different lists of
+ * open properties.
+ */
+
+ virtual SDO_API bool isOpenType() const = 0;
+
+ /** isAbstractType true if the type is not instantiable.
+ *
+ * An abstract type may not be instantiated. It is useful only as
+ * a base type to some other non-abstract type.
+ */
+
+ virtual SDO_API bool isAbstractType() const = 0;
+
+ /** isDataType true if the type is not an object.
+ *
+ * A DataType is anything which is not a DataObjectType. This method
+ * is the opposite of isDataObjectType().
+ */
+
+ virtual SDO_API bool isDataType() const = 0;
+
+
+ /** isChangeSummaryType true if the type is a change summary.
+ *
+ * There is only one type called ChangeSummary. This method serves
+ * no purpose in the C++ implementation.
+ */
+
+ virtual SDO_API bool isChangeSummaryType() const = 0;
+
+ /** getTypeEnum gets the enum for this type.
+ *
+ * Each DataType has a defined value in the list of Types.
+ */
+
+ virtual SDO_API Type::Types getTypeEnum() const = 0;
+
+ /** equals compares uri and name.
+ *
+ * The types are equal if the URI and Name are equal.
+ */
+
+ virtual SDO_API bool equals(const Type& tother) const = 0;
+
+ static SDO_API const SDOString SDOTypeNamespaceURI;
+};
+
+};
+};
+#endif //_SDO_TYPE_H_
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.cpp
new file mode 100644
index 0000000000..f96d3ae138
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.cpp
@@ -0,0 +1,225 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include "commonj/sdo/TypeDefinition.h"
+#include "commonj/sdo/TypeDefinitionImpl.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ TypeDefinition::TypeDefinition()
+ {
+ typedefinition = new TypeDefinitionImpl();
+ }
+
+ TypeDefinition::~TypeDefinition()
+ {
+ if (typedefinition != 0) delete typedefinition;
+ }
+
+ void TypeDefinition::copy (const TypeDefinition& td)
+ {
+ if (typedefinition != 0) delete typedefinition;
+ typedefinition = new TypeDefinitionImpl(*(td.typedefinition));
+ }
+
+ TypeDefinition::TypeDefinition(const TypeDefinition& td)
+ {
+ copy(td);
+ }
+
+ TypeDefinition& TypeDefinition::operator=(const TypeDefinition& td)
+ {
+ if (this != &td)
+ {
+ copy(td);
+ }
+ return *this;
+ }
+
+ TypeDefinitionImpl* TypeDefinition::getTypeDefinition()
+ {
+ return typedefinition;
+ }
+
+ void TypeDefinition::setUri(const char * inuri)
+ {
+ typedefinition->uri = inuri;
+ }
+
+ const char * TypeDefinition::getUri() const
+ {
+ return (const char *)typedefinition->uri;
+ }
+
+
+ void TypeDefinition::setName(const char * inname)
+ {
+ typedefinition->name = inname;
+ }
+
+ const char * TypeDefinition::getName() const
+ {
+ return (const char *)typedefinition->name;
+ }
+
+
+ void TypeDefinition::setLocalName(const char * inname)
+ {
+ typedefinition->localname = inname;
+ }
+
+ const char * TypeDefinition::getLocalName() const
+ {
+ return (const char *)typedefinition->localname;
+ }
+
+
+ void TypeDefinition::setAliases(const char * inaliases)
+ {
+ typedefinition->aliases = inaliases;
+ }
+
+ const char * TypeDefinition::getAliases() const
+ {
+ return (const char*)typedefinition->aliases;
+ }
+
+ void TypeDefinition::setParentType(const char* uri, const char* name,
+ bool isrestriction)
+ {
+ typedefinition->parentTypeUri = uri;
+ typedefinition->parentTypeName = name;
+ typedefinition->isRestriction = isrestriction;
+ }
+
+ const char * TypeDefinition::getParentTypeUri() const
+ {
+ return (const char *)typedefinition->parentTypeUri;
+ }
+
+ const char * TypeDefinition::getParentTypeName() const
+ {
+ return (const char *)typedefinition->parentTypeName;
+ }
+
+ void TypeDefinition::setIDPropertyName(const char * idpropname)
+ {
+ typedefinition->IDPropertyName = idpropname;
+ }
+
+ const char * TypeDefinition::getIDPropertyName() const
+ {
+ return (const char *)typedefinition->IDPropertyName;
+ }
+
+ void TypeDefinition::addPropertyDefinition(PropertyDefinition& p)
+ {
+ typedefinition->properties.push_back((PropertyDefinitionImpl&)(*(p.getPropertyDefinition())));
+ }
+
+ bool TypeDefinition::getIsDataType() const
+ {
+ return typedefinition->dataType;
+ }
+
+ bool TypeDefinition::getIsOpen() const
+ {
+ return typedefinition->isOpen;
+ }
+
+ bool TypeDefinition::getIsSequenced() const
+ {
+ return typedefinition->isSequenced;
+ }
+
+ bool TypeDefinition::getIsAbstract() const
+ {
+ return typedefinition->isAbstract;
+ }
+
+ bool TypeDefinition::getIsExtendedPrimitive() const
+ {
+ return typedefinition->isExtendedPrimitive;
+ }
+
+ bool TypeDefinition::getIsFromList() const
+ {
+ return typedefinition->isFromList;
+ }
+
+ bool TypeDefinition::getIsQName() const
+ {
+ return typedefinition->isQName;
+ }
+
+ bool TypeDefinition::getIsMany() const
+ {
+ return typedefinition->isMany;
+ }
+
+ void TypeDefinition::setIsDataType(bool value)
+ {
+ typedefinition->dataType = value;
+ }
+
+ void TypeDefinition::setIsOpen(bool value)
+ {
+ typedefinition->isOpen = value;
+ }
+
+ void TypeDefinition::setIsSequenced(bool value)
+ {
+ typedefinition->isSequenced = value;
+ }
+
+ void TypeDefinition::setIsAbstract(bool value)
+ {
+ typedefinition->isAbstract = value;
+ }
+
+ void TypeDefinition::setIsExtendedPrimitive(bool value)
+ {
+ typedefinition->isExtendedPrimitive = value;
+ }
+
+ void TypeDefinition::setIsFromList(bool value)
+ {
+ typedefinition->isFromList = value;
+ }
+
+ void TypeDefinition::setIsQName(bool value)
+ {
+ typedefinition->isQName = value;
+ }
+
+ void TypeDefinition::setIsMany(bool value)
+ {
+ typedefinition->isMany = value;
+ }
+
+
+ int TypeDefinition::getGroupElementCount() const
+ {
+ return typedefinition->groupElementCount;
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.h
new file mode 100644
index 0000000000..4b4d9a1f86
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinition.h
@@ -0,0 +1,109 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/13 08:35:04 $ */
+
+#ifndef _TYPEDefinition_H_
+#define _TYPEDefinition_H_
+
+#include "export.h"
+
+
+#include "commonj/sdo/PropertyDefinition.h"
+#include "list"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ class TypeDefinitionImpl;
+
+
+/**
+ * TypeDefinitionImpl holds information gathered from parsing the
+ * XSD and used for creating Types
+ */
+ class SDO_API TypeDefinition
+ {
+
+ public:
+
+
+ /*SDO_API*/ TypeDefinition();
+ TypeDefinition(const TypeDefinition& td);
+ TypeDefinition& operator=(const TypeDefinition& td);
+
+ /*SDO_API*/ virtual ~TypeDefinition();
+
+
+ TypeDefinitionImpl* getTypeDefinition();
+
+ /*SDO_API*/ void setUri(const char * inuri) ;
+ /*SDO_API*/ const char * getUri() const;
+
+ /*SDO_API*/ void setName(const char * inname) ;
+ /*SDO_API*/ const char * getName() const;
+
+ /*SDO_API*/ void setLocalName(const char * inname) ;
+ /*SDO_API*/ const char * getLocalName() const;
+
+ /*SDO_API*/ void setAliases(const char * inaliases) ;
+ /*SDO_API*/ const char * getAliases() const;
+
+
+ /*SDO_API*/ void setParentType(const char* uri, const char* name,
+ bool isrestriction);
+ /*SDO_API*/ const char * getParentTypeUri() const;
+ /*SDO_API*/ const char * getParentTypeName() const;
+
+ /*SDO_API*/ void setIDPropertyName(const char * idpropname) ;
+ /*SDO_API*/ const char * getIDPropertyName() const;
+
+
+ /*SDO_API*/ void addPropertyDefinition(PropertyDefinition& p);
+
+ /*SDO_API*/ bool getIsDataType() const;
+ /*SDO_API*/ bool getIsOpen() const;
+ /*SDO_API*/ bool getIsSequenced() const;
+ /*SDO_API*/ bool getIsAbstract() const;
+ /*SDO_API*/ bool getIsExtendedPrimitive() const;
+ /*SDO_API*/ bool getIsFromList() const;
+ /*SDO_API*/ bool getIsQName() const;
+ /*SDO_API*/ bool getIsMany() const;
+
+ /*SDO_API*/ void setIsDataType(bool value);
+ /*SDO_API*/ void setIsOpen(bool value);
+ /*SDO_API*/ void setIsSequenced(bool value);
+ /*SDO_API*/ void setIsAbstract(bool value);
+ /*SDO_API*/ void setIsExtendedPrimitive(bool value);
+ /*SDO_API*/ void setIsFromList(bool value);
+ /*SDO_API*/ void setIsQName(bool value);
+ /*SDO_API*/ void setIsMany(bool value);
+
+ /*SDO_API*/ int getGroupElementCount() const;
+
+ private :
+ TypeDefinitionImpl *typedefinition;
+ void copy(const TypeDefinition& td);
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_TYPEDefinition_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.cpp
new file mode 100644
index 0000000000..31a64a91da
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.cpp
@@ -0,0 +1,43 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "commonj/sdo/TypeDefinitionImpl.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ TypeDefinitionImpl::TypeDefinitionImpl()
+ : dataType(false),
+ isOpen(false),
+ isSequenced(false),
+ isMany(false),
+ isQName(false),
+ isAbstract(false),
+ groupElementCount(0),
+ isExtendedPrimitive(false),
+ isFromList(false)
+ {
+ }
+
+ TypeDefinitionImpl::~TypeDefinitionImpl()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.h
new file mode 100644
index 0000000000..2a4f8e90cf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionImpl.h
@@ -0,0 +1,81 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef _TYPEDefinitionImpl_H_
+#define _TYPEDefinitionImpl_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/PropertyDefinitionImpl.h"
+#include "list"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ typedef std::list<PropertyDefinitionImpl> XmlDasPropertyDefs;
+
+/**
+ * TypeDefinitionImpl holds information gathered from parsing the
+ * XSD and used for creating Types
+ */
+ class TypeDefinitionImpl
+ {
+
+ public:
+ TypeDefinitionImpl();
+ virtual ~TypeDefinitionImpl();
+
+
+ SDOXMLString uri;
+ SDOXMLString name;
+ SDOXMLString localname;
+
+ SDOXMLString aliases;
+
+ SDOXMLString parentTypeUri;
+ SDOXMLString parentTypeName;
+ bool isRestriction;
+
+ SDOXMLString IDPropertyName;
+
+ bool dataType;
+ XmlDasPropertyDefs properties;
+
+ bool isOpen;
+ bool isSequenced;
+ bool isAbstract;
+
+ bool isExtendedPrimitive;
+
+ bool isFromList;
+
+
+ bool isMany;
+ int groupElementCount;
+
+ bool isQName;
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_TYPEDefinitionImpl_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.cpp
new file mode 100644
index 0000000000..2bea93494c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.cpp
@@ -0,0 +1,81 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+
+
+#include "commonj/sdo/TypeDefinitions.h"
+#include "commonj/sdo/TypeDefinitionsImpl.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ TypeDefinitions::TypeDefinitions()
+ {
+ typedefinitions = new TypeDefinitionsImpl();
+ }
+
+ TypeDefinitions::~TypeDefinitions()
+ {
+ if (typedefinitions != 0) delete typedefinitions;
+ }
+
+ void TypeDefinitions::copy (const TypeDefinitions& tds)
+ {
+ if (typedefinitions != 0) delete typedefinitions;
+ typedefinitions = new TypeDefinitionsImpl(*(tds.typedefinitions));
+ }
+
+ TypeDefinitions::TypeDefinitions(const TypeDefinitions& tds)
+ {
+ copy(tds);
+ }
+
+ TypeDefinitions& TypeDefinitions::operator=(const TypeDefinitions& tds)
+ {
+ if (this != &tds)
+ {
+ copy(tds);
+ }
+ return *this;
+ }
+
+ void TypeDefinitions::addTypeDefinition(TypeDefinition& t)
+ {
+ if (typedefinitions == 0)
+ {
+ typedefinitions = new TypeDefinitionsImpl();
+ }
+
+ typedefinitions->types[
+ typedefinitions->getTypeQName(
+ t.getUri(),t.getName())] = (TypeDefinitionImpl&)(*t.getTypeDefinition());
+ }
+
+ TypeDefinitionsImpl& TypeDefinitions::getTypeDefinitions()
+ {
+ if (typedefinitions == 0)
+ {
+ typedefinitions = new TypeDefinitionsImpl();
+ }
+ return *typedefinitions;
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.h
new file mode 100644
index 0000000000..4b95fe8b94
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitions.h
@@ -0,0 +1,62 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _TYPEDefinitions_H_
+#define _TYPEDefinitions_H_
+
+
+#include "commonj/sdo/TypeDefinition.h"
+#include "map"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ class TypeDefinitionsImpl;
+
+/**
+ * TypeDefinitionsImpl holds a list information gathered from parsing the
+ * XSD and used for creating Types
+ */
+ class SDO_API TypeDefinitions
+ {
+
+ public:
+ /*SDO_API*/ TypeDefinitions();
+ TypeDefinitions(const TypeDefinitions& tds);
+ TypeDefinitions& operator=(const TypeDefinitions& tds);
+
+ /*SDO_API*/ virtual ~TypeDefinitions();
+
+ /*SDO_API*/ void addTypeDefinition(TypeDefinition& t);
+
+ TypeDefinitionsImpl& getTypeDefinitions();
+
+ private:
+ TypeDefinitionsImpl* typedefinitions;
+ void copy(const TypeDefinitions& tds);
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_TYPEDefinitions_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.cpp
new file mode 100644
index 0000000000..82fd8ac11b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.cpp
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#include "commonj/sdo/TypeDefinitionsImpl.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ TypeDefinitionsImpl::TypeDefinitionsImpl()
+ {
+ }
+
+ TypeDefinitionsImpl::~TypeDefinitionsImpl()
+ {
+ }
+
+ SDOXMLString TypeDefinitionsImpl::getTypeQName(const SDOXMLString& typeUri, const SDOXMLString& typeName)
+ {
+ return typeUri + "#" + typeName;
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.h
new file mode 100644
index 0000000000..b523a3316a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeDefinitionsImpl.h
@@ -0,0 +1,54 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+#ifndef _TYPEDefinitionsImpl_H_
+#define _TYPEDefinitionsImpl_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/TypeDefinitionImpl.h"
+#include "map"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ typedef std::map<SDOXMLString, TypeDefinitionImpl> XMLDAS_TypeDefs;
+
+/**
+ * TypeDefinitionsImpl holds a list information gathered from parsing the
+ * XSD and used for creating Types
+ */
+ class TypeDefinitionsImpl
+ {
+
+ public:
+ TypeDefinitionsImpl();
+ virtual ~TypeDefinitionsImpl();
+ static SDOXMLString getTypeQName(const SDOXMLString& typeUri, const SDOXMLString& typeName);
+
+
+ XMLDAS_TypeDefs types;
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_TYPEDefinitionsImpl_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.cpp
new file mode 100644
index 0000000000..041f492a55
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.cpp
@@ -0,0 +1,3719 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 13:47:39 $ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "commonj/sdo/Logger.h"
+
+#include "commonj/sdo/PropertyImpl.h"
+#include "commonj/sdo/TypeImpl.h"
+
+#include <iostream>
+#include <wchar.h>
+#include <stdio.h>
+using namespace std;
+
+#include <list>
+#include <vector>
+using namespace std;
+
+#include "commonj/sdo/SDORuntimeException.h"
+
+namespace commonj{
+namespace sdo{
+
+
+
+ char* TypeImpl::types[num_types] = {
+ "Other Types",
+ "BigDecimal",
+ "BigInteger",
+ "Boolean" ,
+ "Byte",
+ "Bytes",
+ "Character",
+ "Date" ,
+ "Double" ,
+ "Float" ,
+ "Integer" ,
+ "Long" ,
+ "Short" ,
+ "String" ,
+ "URI" ,
+ "DataObject",
+ "ChangeSummary",
+ "Text",
+ "OpenDataObject"
+ };
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ void TypeImpl::addChangeSummary(void)
+ {
+ changeSummaryType = true;
+ }
+
+ bool TypeImpl::isChangeSummaryType() const
+ {
+ return changeSummaryType;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ bool TypeImpl::isFromList() const
+ {
+ return bFromList;
+ }
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ bool TypeImpl::isDataType(void) const
+ {
+ return isPrimitive;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ TypeImpl::TypeImpl(const TypeImpl& t)
+ {
+ isResolving = false;
+ isResolved = false;
+ brestriction = t.brestriction;
+ bFromList = t.bFromList;
+ }
+
+ TypeImpl::TypeImpl(const Type* base, const char* uri,
+ const char* inname,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData,
+ bool isRestriction)
+ {
+ init(uri,inname,isSeq,isOp, isAbs, isData);
+ baseType = (TypeImpl*)base;
+ brestriction = isRestriction;
+ bFromList = false;
+ }
+
+ TypeImpl::TypeImpl(const char* uri, const char* inname,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData,
+ bool isFromList)
+
+ {
+ init(uri,inname,isSeq,isOp,isAbs, isData);
+ baseType = 0;
+ brestriction = false;
+ bFromList= false;
+ bFromList = isFromList;
+ }
+
+ void TypeImpl::init(const char* uri, const char* inname,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData)
+ {
+ isResolving = false;
+ isResolved = false;
+ localPropsSize = 0;
+ changeSummaryType = false;
+ isSequenced = isSeq;
+ isOpen = isOp;
+ isAbstract = isAbs;
+ isPrimitive = isData;
+ name = new char[strlen(inname)+1];
+ strcpy(name,inname);
+
+ if (uri == 0)
+ {
+ typeURI = new char[1];
+ typeURI[0] = 0;
+ typeEnum = DataObjectType;
+ return;
+ }
+
+ typeURI = new char[strlen(uri)+1];
+ strcpy(typeURI,uri);
+
+ if (!strcmp(uri,Type::SDOTypeNamespaceURI.c_str())) {
+ for (int i = 0; i < num_types ; i++) {
+ if (!strcmp(inname,types[i])) {
+ typeEnum = (Types)i;
+ if (i <= UriType) isPrimitive = true;
+ // Note - you could create Text, but it would
+ // not be recognised as primitive.
+ return;
+ }
+ }
+ }
+
+ // All other types are data object types - for now
+ typeEnum = DataObjectType;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ ///////////////////////////////////////////////////////////////////////////
+ TypeImpl::TypeImpl()
+ {
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ //
+ ///////////////////////////////////////////////////////////////////////////
+
+ TypeImpl::~TypeImpl()
+ {
+ // Types free their corresponding properties, but not the types
+ // of those properties
+ // Need to free only those we allocated
+ unsigned int count = 0, start = props.size() - localPropsSize;
+ std::list<PropertyImpl*>::iterator i;
+ for (i= props.begin(); i != props.end() ; ++i)
+ {
+ if (count >= start) {
+ delete(*i);
+ }
+ count++;
+ }
+ if (name != 0)delete name;
+ if (typeURI != 0) delete typeURI;
+ for (unsigned int j = 0; j < aliases.size();j++)
+ {
+ delete aliases[j];
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Sets a data type as sequenced.
+ ///////////////////////////////////////////////////////////////////////////
+
+ void TypeImpl::setSequenced(bool set)
+ {
+ isSequenced = set;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Sets a data type as open.
+ ///////////////////////////////////////////////////////////////////////////
+
+ void TypeImpl::setOpen(bool set)
+ {
+ isOpen = set;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Sets a data type as open.
+ ///////////////////////////////////////////////////////////////////////////
+
+ void TypeImpl::setBaseType(const Type* bt, bool isRestriction)
+ {
+ baseType = (TypeImpl*)bt;
+ brestriction = isRestriction;
+
+ // DataType and Sequenced must be the same as the base Type
+ isPrimitive = baseType->isPrimitive;
+ if (isPrimitive)
+ {
+ typeEnum = baseType->typeEnum;
+ }
+
+ if (isSequenced && !baseType->isSequenced)
+ {
+ // Its an error to be sequenced and inherit from a
+ // non-sequenced type
+ string msg("Cannot be sequenced and inherit from a non-sequenced base type:");
+ msg += getURI();
+ msg += " ";
+ msg += getName();
+ SDO_THROW_EXCEPTION("setBaseType",
+ SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ isSequenced = baseType->isSequenced;
+ // if the base is open then this type must be open too.
+
+ if (baseType->isOpenType())
+ {
+ isOpen = true;
+ }
+ }
+
+ bool TypeImpl::equals(const Type& tother) const
+ {
+ if (strcmp(typeURI,tother.getURI())) return false;
+ // TODO - aliases
+ if (strcmp(name, tother.getName())) return false;
+ return true;
+ }
+
+
+ const Type* TypeImpl::getBaseType() const
+ {
+ return (Type*)baseType;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the name of the type.
+ ///////////////////////////////////////////////////////////////////////////
+
+ const char* TypeImpl::getName() const
+ {
+ return name;
+ }
+
+ void TypeImpl::setAlias(const char* alias)
+ {
+ char* tmp = new char[strlen(alias)+1];
+ strcpy(tmp,alias);
+ aliases.push_back(tmp);
+ }
+
+
+
+
+ const char* TypeImpl::getAlias(unsigned int index) const
+ {
+ if (index < aliases.size())
+ {
+ return aliases[index];
+ }
+ return name;
+ }
+
+ unsigned int TypeImpl::getAliasCount() const
+ {
+ return aliases.size();
+ }
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the namespace URI of the type.
+ ///////////////////////////////////////////////////////////////////////////
+ const char* TypeImpl::getURI() const
+ {
+ return typeURI;
+ }
+
+ void TypeImpl::throwIfNestedChangeSummary() const
+ {
+ PROPERTY_LIST::const_iterator i;
+ for (i = props.begin(); i != props.end(); ++i)
+ {
+
+ const TypeImpl *t = ((*i)->getTypeImpl());
+ if (t != 0)
+ {
+ if (t->isDataObjectType())
+ {
+ if (t->isChangeSummaryType())
+ {
+ string msg(" Nested change summary type:");
+ msg += t->getURI();
+ msg += " ";
+ msg += t->getName();
+ SDO_THROW_EXCEPTION("resolve",
+ SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ t->throwIfNestedChangeSummary();
+ }
+ }
+ }
+ }
+
+ void TypeImpl::validateChangeSummary()
+ {
+ if (!isChangeSummaryType()) return;
+ throwIfNestedChangeSummary();
+ }
+
+ PROPERTY_LIST TypeImpl::getCompoundProperties()
+ {
+ return props;
+ }
+
+ void TypeImpl::initCompoundProperties()
+ {
+ // We have already met this type in the resolution heirarchy
+ if (isResolving)
+ {
+ string msg(" circular type dependency on:");
+ msg += getURI();
+ msg += " ";
+ msg += getName();
+
+ SDO_THROW_EXCEPTION("initCompoundProperties",
+ SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ if (isResolved)
+ {
+ return;
+ }
+
+ isResolving = true;
+
+
+ if (baseType != 0)
+ {
+ baseType->initCompoundProperties();
+ PROPERTY_LIST pl = baseType->getCompoundProperties();
+ localPropsSize = props.size();
+
+ // spec says the properties which are common are taken from
+ // the superclass. I imagine this will change , and only the
+ // ones taken from the subclass will be used.
+
+ if (brestriction)
+ {
+ // restrict the properties to only those which
+ // appear in the parent
+ std::list<PropertyImpl*>::iterator p1,p;
+ for (p=pl.begin();p!=pl.end();++p)
+ {
+ for (p1=props.begin();p1!=props.end();++p1)
+ {
+ if (!strcmp((*p1)->getName(),
+ (*p)->getName()))
+ {
+ props.erase(p1);
+ localPropsSize = props.size();
+ break;
+ }
+ }
+ }
+
+ }
+
+ props.insert(props.begin(),pl.begin(), pl.end());
+
+ isPrimitive = !(baseType->isDataObjectType());
+ }
+ if (isPrimitive && (props.size() > 0))
+ {
+ string msg("Add property to data type:");
+ msg += getURI();
+ msg += " ";
+ msg += getName();
+ SDO_THROW_EXCEPTION("initCompoundProperties",
+ SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+ isResolved = true;
+ isResolving = false;
+ return;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the list of the properties of this type.
+ ///////////////////////////////////////////////////////////////////////////
+ PropertyList TypeImpl::getProperties() const
+ {
+ return props;
+ }
+
+ unsigned int TypeImpl::getPropertiesSize() const
+ {
+ return props.size();
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property with the specified name.
+ ///////////////////////////////////////////////////////////////////////////
+ const Property& TypeImpl::getProperty(const char* propertyName) const
+ {
+ PropertyImpl* pi = getPropertyImpl(propertyName);
+ if (pi == 0)
+ {
+ string msg("Property not found:");
+ msg += propertyName;
+ SDO_THROW_EXCEPTION("getProperty",
+ SDOPropertyNotFoundException, msg.c_str());
+ }
+ return (Property&)*pi;
+ }
+ const Property& TypeImpl::getProperty(const SDOString& propertyName) const
+ {
+ PropertyImpl* pi = getPropertyImpl(propertyName); // ??? GMW
+ if (pi == 0)
+ {
+ string msg("Property not found:");
+ msg += propertyName;
+ SDO_THROW_EXCEPTION("getProperty",
+ SDOPropertyNotFoundException, msg.c_str());
+ }
+ return (Property&)*pi;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Substitute Support - get the real underlying type
+ ///////////////////////////////////////////////////////////////////////////
+
+ const Type& TypeImpl::getRealPropertyType(const char* propertyName) const
+ {
+ const TypeImpl* ti = getRealPropertyTypeImpl(propertyName);
+ if (ti != 0)return (Type&)*ti;
+
+ string msg("Property not found:");
+ msg += propertyName;
+ SDO_THROW_EXCEPTION("getProperty",
+ SDOPropertyNotFoundException, msg.c_str());
+
+ }
+
+
+ const TypeImpl* TypeImpl::getRealPropertyTypeImpl(const char* propertyName) const
+ {
+
+ std::list<PropertyImpl*>::const_iterator i;
+ for (i = props.begin(); i != props.end(); ++i)
+ {
+ if (!strcmp(propertyName,(*i)->getName()))
+ {
+ return ((*i)->getTypeImpl());
+ }
+ for (unsigned int k=0;k < (*i)->getAliasCount(); k++)
+ {
+ if (!strcmp(propertyName,(*i)->getAlias(k)))
+ {
+ return ((*i)->getTypeImpl());
+ }
+ }
+ for (unsigned int j=0;j < (*i)->getSubstitutionCount(); j++)
+ {
+ if (!strcmp(propertyName,(*i)->getSubstitutionName(j)))
+ {
+ return (TypeImpl*)(*i)->getSubstitutionType(j);
+ }
+ }
+ }
+ return 0;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property with the specified name.
+ ///////////////////////////////////////////////////////////////////////////
+ PropertyImpl* TypeImpl::getPropertyImpl(const char* propertyName) const
+ {
+
+ // Extension - find the property from an xpath
+ // not very elegant, but it will do.
+ // you should not be able to have "." and "[" before a "/" - this is assumed.
+
+ if (propertyName == 0 || strlen(propertyName) == 0) return 0;
+
+ char* tokenend = (char*) strchr(propertyName,'/');
+ char * bracket = (char*) strchr(propertyName,'[');
+ char* dot = (char*) strchr(propertyName,'.');
+ char* copy;
+
+
+ int len = strlen(propertyName);
+ if (tokenend != 0)
+ {
+ len = tokenend - propertyName;
+ if (bracket != 0 && bracket < tokenend) len = bracket - propertyName;
+ if (dot != 0 && dot < tokenend) len = dot - propertyName;
+ }
+ else
+ {
+ if (bracket != 0) len = bracket - propertyName;
+ if (dot != 0) len = dot - propertyName;
+ }
+ if (len != 0)
+ {
+ copy = new char[len+1];
+ strncpy(copy, propertyName,len);
+ copy[len] = 0;
+ }
+ else
+ {
+ copy = new char[strlen(propertyName)+1];
+ strcpy(copy,propertyName);
+ }
+
+ std::list<PropertyImpl*>::const_iterator i;
+ for (i = props.begin(); i != props.end(); ++i)
+ {
+ if (!strcmp(copy,(*i)->getName()))
+ {
+ delete copy;
+ if (tokenend && strlen(tokenend) > 1)
+ {
+ const TypeImpl* ti = (*i)->getTypeImpl();
+ if (ti != 0)
+ {
+ PropertyImpl* p = ti->
+ getPropertyImpl((const char *)(tokenend+1));
+ return p;
+ }
+ else
+ {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ else {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ for (unsigned int j=0;j < (*i)->getSubstitutionCount(); j++)
+ {
+ if (!strcmp(copy,(*i)->getSubstitutionName(j)))
+ {
+ delete copy;
+ if (tokenend && strlen(tokenend) > 1)
+ {
+ const TypeImpl* ti = (*i)->getTypeImpl();
+ if (ti != 0)
+ {
+ PropertyImpl* p = ti->
+ getPropertyImpl((const char *)(tokenend+1));
+ return p;
+ }
+ else
+ {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ else {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ }
+ for (unsigned int k=0;k < (*i)->getAliasCount(); k++)
+ {
+ if (!strcmp(copy,(*i)->getAlias(k)))
+ {
+ delete copy;
+ if (tokenend && strlen(tokenend) > 1)
+ {
+ const TypeImpl* ti = (*i)->getTypeImpl();
+ if (ti != 0)
+ {
+ PropertyImpl* p = ti->
+ getPropertyImpl((const char *)(tokenend+1));
+ return p;
+ }
+ else
+ {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ else {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ }
+ }
+ return 0;
+ }
+ // +++
+ PropertyImpl* TypeImpl::getPropertyImpl(const SDOString& propertyName) const
+ {
+
+ // Extension - find the property from an xpath
+ // you should not be able to have both "." and "[" before a "/" - this is assumed.
+
+ if (propertyName.length() == 0) return 0;
+
+ // strchr returns NULL if target not found
+ // find_first_of returns string::npos in that case
+ // find_first_of returns the subscript of the character found eg 0 if it is the first
+ size_t tokenend = propertyName.find_first_of('/');
+ size_t bracket = propertyName.find_first_of('[');
+ size_t dot = propertyName.find_first_of('.');
+ size_t dotOrBracketOrSlash = propertyName.find_first_of(".[/");
+ SDOString copy;
+ // char* copy;
+
+ int len = propertyName.length();
+ if (dotOrBracketOrSlash != string::npos)
+ {
+ len = dotOrBracketOrSlash;
+ }
+
+ if (len != 0)
+ {
+ copy.assign(propertyName, 0, len);
+ }
+ else
+ {
+ copy = propertyName;
+ }
+
+ std::list<PropertyImpl*>::const_iterator i;
+ for (i = props.begin(); i != props.end(); ++i)
+ {
+ if (!strcmp(copy.c_str(),(*i)->getName())) // ie the two strings are the same
+ {
+ // delete copy;
+ if ((tokenend != string::npos) && (propertyName.length() - tokenend) > 1)
+ {
+ // There is someting to the right of the "/"
+ const TypeImpl* ti = (*i)->getTypeImpl();
+ if (ti != 0)
+ {
+ PropertyImpl* p = ti->getPropertyImpl(SDOString(propertyName, tokenend + 1));
+ return p;
+ }
+ else
+ {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ else {
+ return (PropertyImpl*)(*i);
+ }
+ }
+
+ for (unsigned int j = 0; j < (*i)->getSubstitutionCount(); j++)
+ {
+ if (!strcmp(copy.c_str(), (*i)->getSubstitutionName(j))) // ie the two strings are the same
+ {
+ // delete copy;
+ if ((tokenend != string::npos) && (propertyName.length() - tokenend) > 1)
+ {
+ // There is someting to the right of the "/"
+ const TypeImpl* ti = (*i)->getTypeImpl();
+ if (ti != 0)
+ {
+ // PropertyImpl* p = ti->getPropertyImpl((const char *)(tokenend+1));
+ PropertyImpl* p = ti->getPropertyImpl(SDOString(propertyName, tokenend + 1));
+ return p;
+ }
+ else
+ {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ else {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ }
+ for (unsigned int k = 0; k < (*i)->getAliasCount(); k++)
+ {
+ if (!strcmp(copy.c_str(), (*i)->getAlias(k))) // ie the two strings are the same
+ {
+ // delete copy;
+ if ((tokenend != string::npos) && (propertyName.length() - tokenend) > 1)
+ {
+ const TypeImpl* ti = (*i)->getTypeImpl();
+ if (ti != 0)
+ {
+ // PropertyImpl* p = ti->getPropertyImpl((const char *)(tokenend+1));
+ PropertyImpl* p = ti->getPropertyImpl(SDOString(propertyName, tokenend + 1));
+ return p;
+ }
+ else
+ {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ else {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ }
+ }
+ return 0;
+ }
+
+ // ---
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property with the specified name.
+ ///////////////////////////////////////////////////////////////////////////
+ PropertyImpl* TypeImpl::getPropertyImplPure(const char* propertyName) const
+ {
+
+
+ std::list<PropertyImpl*>::const_iterator i;
+ for (i = props.begin(); i != props.end(); ++i)
+ {
+ if (!strcmp(propertyName,(*i)->getName()))
+ {
+ return (PropertyImpl*)(*i);
+ }
+ for (unsigned int k=0;k < (*i)->getAliasCount(); k++)
+ {
+ if (!strcmp(propertyName,(*i)->getAlias(k)))
+ {
+ return (PropertyImpl*)(*i);
+ }
+ }
+ }
+ return 0;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property index with the specified name.
+ ///////////////////////////////////////////////////////////////////////////
+ unsigned int TypeImpl::getPropertyIndex(const char* propertyName) const
+ {
+ std::list<PropertyImpl*>::const_iterator i;
+ int j = 0;
+ for (i = props.begin(); i != props.end(); ++i)
+ {
+ if (!strcmp(propertyName,(*i)->getName()))
+ {
+ return j;
+ }
+ j++;
+ }
+ string msg("Property not found:");
+ msg += propertyName;
+ SDO_THROW_EXCEPTION("getPropertyIndex",
+ SDOPropertyNotFoundException, msg.c_str());
+ }
+ unsigned int TypeImpl::getPropertyIndex(const SDOString& propertyName) const
+ {
+ std::list<PropertyImpl*>::const_iterator i;
+ int j = 0;
+ for (i = props.begin(); i != props.end(); ++i)
+ {
+ if (!strcmp(propertyName.c_str(), (*i)->getName()))
+ {
+ return j;
+ }
+ j++;
+ }
+ string msg("Property not found:");
+ msg += propertyName;
+ SDO_THROW_EXCEPTION("getPropertyIndex",
+ SDOPropertyNotFoundException, msg.c_str());
+ }
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property with the specified name.
+ ///////////////////////////////////////////////////////////////////////////
+ const Property& TypeImpl::getProperty(unsigned int index) const
+ {
+ PropertyImpl* pi = getPropertyImpl(index);
+ if (pi == 0)
+ {
+ string msg("Property not found for index:");
+ msg += index;
+ SDO_THROW_EXCEPTION("getProperty" ,
+ SDOPropertyNotFoundException, msg.c_str());
+ }
+ return (Property&)*pi;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property with the specified index.
+ ///////////////////////////////////////////////////////////////////////////
+ PropertyImpl* TypeImpl::getPropertyImpl(unsigned int index) const
+ {
+ std::list<PropertyImpl*>::const_iterator i;
+ int count = 0;
+ for (i = props.begin() ; i != props.end() ; ++i)
+ {
+ if (count == index)return (PropertyImpl*)(*i);
+ count++;
+ }
+ return 0;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property with the specified name.
+ ///////////////////////////////////////////////////////////////////////////
+ void TypeImpl::addProperty(const char* propname,
+ const TypeImpl& t,
+ bool many, bool rdonly, bool cont)
+ {
+
+ props.insert(props.end(),new PropertyImpl(*this,
+ propname, t, many,rdonly, cont));
+ localPropsSize++;
+
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this Type specifies DataObjects..
+ ///////////////////////////////////////////////////////////////////////////
+ bool TypeImpl::isDataObjectType() const
+ {
+ return !isPrimitive;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this Type specifies Sequenced DataObjects.
+ ///////////////////////////////////////////////////////////////////////////
+ bool TypeImpl::isSequencedType() const
+ {
+ return isSequenced;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this Type allows any form of open content.
+ ///////////////////////////////////////////////////////////////////////////
+ bool TypeImpl::isOpenType() const
+ {
+ /* TODO - handle open types */
+ return isOpen;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this type may not be instantiated.
+ ///////////////////////////////////////////////////////////////////////////
+ bool TypeImpl::isAbstractType() const
+ {
+ return isAbstract;
+ }
+
+ void TypeImpl::setAbstract(bool set)
+ {
+ isAbstract = set;
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // TODO - override ==.
+ ///////////////////////////////////////////////////////////////////////////
+ bool TypeImpl::equals(const Type& t)
+ {
+ return ( strcmp(getName(),t.getName()) == 0
+ && strcmp(getURI (),t.getURI ()) == 0 );
+ }
+
+ ///////////////////////////////////////////////////////////////////////////
+ // getTypeEnum.
+ ///////////////////////////////////////////////////////////////////////////
+ Type::Types TypeImpl::getTypeEnum(void) const
+ {
+ return typeEnum;
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Conversions.
+ // convert is used in the process of setting a value. The input is the
+ // result of a setXXX, so in the first case setBoolean. The typeEnum is the
+ // type of the value being set and governs the expected final result in
+ // the value* buffer.
+ ///////////////////////////////////////////////////////////////////////////
+
+ unsigned int TypeImpl::convert(void** value,const bool b) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0)delete (char*)(*value);
+ *value = new char[sizeof(long)];
+ *(long*)*value = (long)b;
+ return sizeof(long);
+
+ case LongType:
+ if (*value != 0)delete (char*)(*value);
+ *value = new char[sizeof(int64_t)];
+ *(int64_t*)*value = (int64_t)b;
+ return sizeof(int64_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ if (*value != 0)delete (char*)(*value);
+ // spec change - types
+ *value = new wchar_t[6];
+ if (b)
+ {
+ ((wchar_t*)(*value))[0] = (wchar_t)'t';
+ ((wchar_t*)(*value))[1] = (wchar_t)'r';
+ ((wchar_t*)(*value))[2] = (wchar_t)'u';
+ ((wchar_t*)(*value))[3] = (wchar_t)'e';
+ ((wchar_t*)(*value))[4] = 0;
+ return 4;
+ }
+ else
+ {
+ ((wchar_t*)(*value))[0] = (wchar_t)'f';
+ ((wchar_t*)(*value))[1] = (wchar_t)'a';
+ ((wchar_t*)(*value))[2] = (wchar_t)'l';
+ ((wchar_t*)(*value))[3] = (wchar_t)'s';
+ ((wchar_t*)(*value))[4] = (wchar_t)'e';
+ ((wchar_t*)(*value))[5] = 0;
+ return 5;
+ }
+ break;
+
+
+ case BytesType:
+ {
+ if (*value != 0)delete (char*)(*value);
+ // spec change - types
+ *value = new char[6];
+ if (b)
+ {
+ strcpy((char*)*value, "true");
+ return 4;
+ }
+ else
+ {
+ strcpy((char*)*value, "false");
+ return 5;
+ }
+ break;
+
+ }
+
+ case DoubleType:
+ case FloatType:
+ case DateType:
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set Boolean on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setBoolean" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ return 0;
+ }
+
+ unsigned int TypeImpl::convert(void** value,const char c) const
+ {
+#if __WORDSIZE ==64
+ return convert(value,(int64_t)c);
+#else
+ return convert(value,(long)c);
+#endif
+ }
+
+ unsigned int TypeImpl::convert(void** value,const wchar_t c) const
+ {
+#if __WORDSIZE ==64
+ return convert(value,(int64_t)c);
+#else
+ return convert(value,(long)c);
+#endif
+ }
+
+ // This is set CString...
+ unsigned int TypeImpl::convert(void** value,const char* c) const
+ {
+
+ switch (typeEnum)
+ {
+ case BooleanType:
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ if ((c == 0) || strcmp(c,"true"))
+ {
+ *(long*)*value = 0;
+ }
+ else
+ {
+ *(long*)*value = 1;
+ }
+ return sizeof(long);
+
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ *(long*)*value = atoi(c);
+ return sizeof(long);
+
+ case DoubleType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long double)];
+ // TODO - atof not suitable here
+ *(long double*)*value = (long double)atof(c);
+ return sizeof(long double);
+
+ case FloatType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)atof(c);
+ return sizeof(float);
+
+ case LongType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+#if defined(WIN32) || defined (_WINDOWS)
+ *(int64_t*)*value = (int64_t)_atoi64(c);
+#else
+ *(int64_t*)*value = (int64_t)strtoll(c, NULL, 0);
+#endif
+ return sizeof(int64_t);
+
+ case DateType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)atoi(c);
+ return sizeof(time_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+ wchar_t* vw = new wchar_t[strlen(c)+1];
+ for (unsigned int i=0;i< strlen(c);i++)
+ {
+ vw[i] = (wchar_t)c[i];
+ }
+ vw[strlen(c)] = 0;
+ *value = (void*)vw;
+ return strlen(c);
+ }
+ break;
+ case BytesType:
+ {
+ if (*value != 0) delete ((char*)*value);
+ char* vc = new char[strlen(c)+1];
+ for (unsigned int i=0;i< strlen(c);i++)
+ {
+ vc[i] = (char)c[i];
+ }
+ vc[strlen(c)] = 0;
+ *value = (void*)vc;
+ return strlen(c);
+ }
+ break;
+
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set CString on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setString" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ return 0;
+ }
+
+ // +++
+
+ // This is set CString...
+ // The value supplied in s is converted and written to value.
+ unsigned int TypeImpl::convert(void** value, const SDOString& c) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ if (*value != 0) delete ((char*) *value);
+ *value = new char[sizeof(long)];
+
+ if (c == "true")
+ {
+ *(long*)*value = 0;
+ }
+ else
+ {
+ *(long*)*value = 1;
+ }
+ return sizeof(long);
+
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0) delete ((char*)*value);
+
+ *value = new char[sizeof(long)];
+ *(long*)*value = atoi(c.c_str());
+ return sizeof(long);
+
+ case DoubleType:
+ if (*value != 0) delete ((char*)*value);
+
+ *value = new char[sizeof(long double)];
+ // TODO - atof not suitable here
+ *(long double*)*value = (long double)atof(c.c_str());
+ return sizeof(long double);
+
+ case FloatType:
+ if (*value != 0) delete ((char*)*value);
+
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)atof(c.c_str());
+ return sizeof(float);
+
+ case LongType:
+ if (*value != 0) delete ((char*)*value);
+
+ *value = new char[sizeof(int64_t)];
+#if defined(WIN32) || defined (_WINDOWS)
+ *(int64_t*)*value = (int64_t)_atoi64(c.c_str());
+#else
+ *(int64_t*)*value = (int64_t)strtoll(c.c_str(), NULL, 0);
+#endif
+ return sizeof(int64_t);
+
+ case DateType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)atoi(c.c_str());
+ return sizeof(time_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+ wchar_t* vw = new wchar_t[c.length() + 1];
+ for (unsigned int i = 0; i < c.length(); i++)
+ {
+ vw[i] = (wchar_t)c[i];
+ }
+ vw[c.length()] = 0;
+ *value = (void*)vw;
+ return c.length();
+ }
+ break;
+ case BytesType:
+ {
+ if (*value != 0) delete ((char*)*value);
+ char* vc = new char[c.length() + 1];
+ for (unsigned int i = 0; i < c.length(); i++)
+ {
+ vc[i] = (char)c[i];
+ }
+ vc[c.length()] = 0;
+ *value = (void*)vc;
+ return c.length();
+ }
+ break;
+
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set CString on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setString" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ return 0;
+ }
+
+
+ // ---
+
+ // setString
+ unsigned int TypeImpl::convert(void** value,const wchar_t* b, unsigned int len) const
+ {
+ unsigned int i;
+ switch (typeEnum)
+ {
+ case BigDecimalType:
+ case BigIntegerType:
+ case UriType:
+ case StringType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+ wchar_t* vw = new wchar_t[len+1];
+ for (i=0;i<len;i++)
+ {
+ vw[i] = b[i];
+ }
+ vw[len] = 0;
+ *value = (void*)vw;
+ return len;
+ }
+ break;
+
+ case BytesType:
+ {
+ if (*value != 0) delete ((char*)*value);
+ char* vc = new char[len+1];
+ for (i=0;i<len;i++)
+ {
+ vc[i] = (char)b[i];
+ }
+ vc[len] = 0;
+ *value = (void*)vc;
+ return len;
+ }
+ break;
+
+ case BooleanType:
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ if (len > 4)
+ {
+ *(long*)*value = 0;
+ }
+ else
+ {
+ if (b[0] == (wchar_t)'t' &&
+ b[1] == (wchar_t)'r' &&
+ b[2] == (wchar_t)'u' &&
+ b[3] == (wchar_t)'e' )
+ *(long*)*value = 1;
+ else *(long*)*value = 0;
+ }
+ return sizeof(long);
+
+ case CharacterType:
+ case ByteType:
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ if (len > 0)
+ {
+ *(long*)*value = (long)b[0];
+ }
+ else
+ {
+ *(long*)*value = (long)0;
+ }
+ return sizeof(long);
+
+ case ShortType:
+ case IntegerType:
+ {
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ int val = 0;
+ for (unsigned int j=0;j<len;j++)
+ {
+ val += (1+ (10*j)) * ((char)b[len-1-j] - (char)'0');
+ }
+ *(long*)*value = (long)val;
+ return sizeof(long);
+ }
+
+ case LongType:
+ {
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ int64_t val = 0;
+ for (unsigned int j=0;j<len;j++)
+ {
+ val += (int64_t)(1+ (10*j)) * ((char)b[len-1-j] - (char)'0');
+ }
+ *(int64_t*)*value = (int64_t)val;
+ return sizeof(long);
+ }
+ case DoubleType:
+ case FloatType:
+ case DateType:
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set String on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setString" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ return 0;
+ }
+
+ // setBytes
+ unsigned int TypeImpl::convert(void** value,const char* b, unsigned int len) const
+ {
+ unsigned int i;
+ switch (typeEnum)
+ {
+ case BytesType:
+ {
+ if (*value != 0) delete ((char*)*value);
+ char* vc = new char[len+1];
+ for (i=0;i<len;i++)
+ {
+ vc[i] = (char)b[i];
+ }
+ vc[len] = 0;
+ *value = (void*)vc;
+ return len;
+ }
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case UriType:
+ case StringType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+ wchar_t* vw = new wchar_t[len+1];
+ for (i=0;i<len;i++)
+ {
+ vw[i] = b[i];
+ }
+ vw[len] = 0;
+ *value = (void*)vw;
+ return len;
+ }
+
+ case BooleanType:
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ if (len > 4)
+ {
+ *(long*)*value = 0;
+ }
+ else
+ {
+ if (b[0] == (char)'t' &&
+ b[1] == (char)'r' &&
+ b[2] == (char)'u' &&
+ b[3] == (char)'e' )
+ *(long*)*value = 1;
+ else *(long*)*value = 0;
+ }
+ return sizeof(long);
+
+ case ByteType:
+ case CharacterType:
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ if (len > 0)
+ {
+ *(long*)*value = (long)b[0];
+ }
+ else
+ {
+ *(long*)*value = (long)0;
+ }
+ return sizeof(long);
+
+ case IntegerType:
+ case ShortType:
+ {
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ int val = 0;
+ for (unsigned int j=0;j<len;j++)
+ {
+ val += (1+ (10*j)) * ((char)b[len-1-j] - (char)'0');
+ }
+ *(long*)*value = (long)val;
+ return sizeof(long);
+ }
+
+ case LongType:
+ {
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ int64_t val = 0;
+ for (unsigned int j=0;j<len;j++)
+ {
+ val += (int64_t)(1+ (10*j)) * ((char)b[len-1-j] - (char)'0');
+ }
+ *(int64_t*)*value = (int64_t)val;
+ return sizeof(long);
+ }
+
+ case DoubleType:
+ case FloatType:
+ case DateType:
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set Bytes on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setBytes" ,
+ SDOInvalidConversionException, msg.c_str());
+ return 0;
+ }
+ }
+ return 0;
+ }
+
+ // +++
+
+ unsigned int TypeImpl::convert(void** value, const SDOString& b, unsigned int len) const
+ {
+ unsigned int i;
+ switch (typeEnum)
+ {
+ case BytesType:
+ {
+ if (*value != 0) delete ((char*)*value);
+
+ char* vc = new char[len + 1];
+ b.copy(vc, len);
+ vc[len] = 0;
+
+ *value = (void*)vc;
+ return len;
+ }
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case UriType:
+ case StringType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+
+ wchar_t* vw = new wchar_t[len+1];
+ // Can't use std::string.copy() because we are copying into wchar_t elements.
+ for (i=0;i<len;i++)
+ {
+ vw[i] = b[i];
+ }
+ vw[len] = 0;
+ *value = (void*)vw;
+ return len;
+ }
+
+ case BooleanType:
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ if (len > 4)
+ {
+ *(long*)*value = 0;
+ }
+ else
+ {
+ if (b == "true")
+ *(long*)*value = 1;
+ else *(long*)*value = 0;
+ }
+ return sizeof(long);
+
+ case ByteType:
+ case CharacterType:
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ if (len > 0)
+ {
+ *(long*)*value = (long)b[0];
+ }
+ else
+ {
+ *(long*)*value = (long)0;
+ }
+ return sizeof(long);
+
+ case IntegerType:
+ case ShortType:
+ {
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ int val = 0;
+ for (unsigned int j=0;j<len;j++)
+ {
+ val += (1+ (10*j)) * ((char)b[len-1-j] - (char)'0');
+ }
+ *(long*)*value = (long)val;
+ return sizeof(long);
+ }
+
+ case LongType:
+ {
+ if (*value != 0)delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ int64_t val = 0;
+ for (unsigned int j=0;j<len;j++)
+ {
+ val += (int64_t)(1+ (10*j)) * ((char)b[len-1-j] - (char)'0');
+ }
+ *(int64_t*)*value = (int64_t)val;
+ return sizeof(long);
+ }
+
+ case DoubleType:
+ case FloatType:
+ case DateType:
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set Bytes on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setBytes" ,
+ SDOInvalidConversionException, msg.c_str());
+ return 0;
+ }
+ }
+ return 0;
+ }
+
+ // ---
+
+ unsigned int TypeImpl::convert(void** value,const short s) const
+ {
+#if __WORDSIZE ==64
+ return convert(value,(int64_t)s);
+#else
+ return convert(value,(long)s);
+#endif
+ }
+
+/* unsigned int TypeImpl::convert(void** value,const int i) const
+ {
+ return convert(value,(long)i);
+ }
+*/
+ unsigned int TypeImpl::convertDate(void** value, const SDODate i) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ {
+ string msg("Cannot set Date on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setDate" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ default:
+#if __WORDSIZE ==64
+ return convert(value, (int64_t)(i.getTime()));
+#else
+ return convert(value, (long)(i.getTime()));
+#endif
+ }
+ }
+
+#if __WORDSIZE !=64
+ // setInteger
+ unsigned int TypeImpl::convert(void** value,const long i) const
+ {
+#if ! defined(WIN32) && ! defined (_WINDOWS)
+ char *tmp = new char[MAX_LONG_SIZE];
+ int j = 0;
+#endif
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ *(long*)*value = (long)i;
+ return sizeof(long);
+
+ case DoubleType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long double)];
+ *(long double*)*value = (long double)i;
+ return sizeof(long double);
+
+ case FloatType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)i;
+ return sizeof(float);
+
+ case LongType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ *(int64_t*)*value = (int64_t)i;
+ return sizeof(int64_t);
+
+ case DateType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)i;
+ return sizeof(time_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+ *value = new wchar_t[MAX_LONG_SIZE];
+ // TODO - whats the equivalent of _ltow on linux?
+#if defined(WIN32) || defined (_WINDOWS)
+ _ltow(i,(wchar_t*)*value,10);
+ return wcslen((wchar_t*)(*value));
+#else
+ sprintf(tmp,"%d", i);
+ for (j=0; j< strlen(tmp); j++)
+ {
+ ((wchar_t*)(*value))[j] = (wchar_t)tmp[j];
+ }
+ ((wchar_t*)(*value))[strlen(tmp)] = 0;
+ delete tmp;
+ return j;
+#endif
+
+ }
+
+ case BytesType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+ *value = new char[MAX_LONG_SIZE];
+ // TODO - whats the equivalent of _ltow on linux?
+ sprintf((char*)*value,"%d", i);
+ return strlen((char*)(*value));
+
+ }
+
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set Integer on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setInteger" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+#endif
+
+ // setLongLong
+
+ unsigned int TypeImpl::convert(void** value,const int64_t l) const
+ {
+#if ! defined(WIN32) && ! defined (_WINDOWS)
+ char *tmp = new char[MAX_LONG_SIZE];
+ int j = 0;
+#endif
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ *(long*)*value = (long)l;
+ return sizeof(long);
+
+ case DoubleType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long double)];
+ *(long double*)*value = (long double)l;
+ return sizeof(long double);
+
+ case FloatType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)l;
+ return sizeof(float);
+
+ case LongType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ *(int64_t*)*value = (int64_t)l;
+ return sizeof(int64_t);
+
+ case DateType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)l;
+ return sizeof(time_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (*value != 0) delete ((wchar_t*)*value);
+ *value = new wchar_t[MAX_LONG_SIZE];
+ // TODO - whats the equivalent of _ltow on linux?
+#if defined(WIN32) || defined (_WINDOWS)
+ _i64tow(l,(wchar_t*)*value,10);
+ return wcslen((wchar_t*)(*value));
+#else
+ sprintf(tmp, "%lld", l);
+ for (j=0; j< strlen(tmp); j++)
+ {
+ ((wchar_t*)(*value))[j] = (wchar_t)tmp[j];
+ }
+ ((wchar_t*)(*value))[strlen(tmp)] = 0;
+ delete tmp;
+ return j;
+#endif
+
+ }
+
+ case BytesType:
+ {
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[MAX_LONG_SIZE];
+#if defined(WIN32) || defined (_WINDOWS)
+ _i64toa(l,(char*)*value,10);
+#else
+ sprintf((char*)*value, "%lld", l);
+#endif
+ return strlen((char*)(*value));
+
+ }
+
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set LongLong on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setLongLong" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+ // setFloat
+ unsigned int TypeImpl::convert(void** value,const float f) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ *(long*)*value = (long)f;
+ return sizeof(long);
+
+ case DoubleType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long double)];
+ *(long double*)*value = (long double)f;
+ return sizeof(long double);
+
+ case FloatType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)f;
+ return sizeof(float);
+
+ case LongType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ *(int64_t*)*value = (int64_t)f;
+ return sizeof(int64_t);
+
+ case DateType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)f;
+ return sizeof(time_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ case BytesType:
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set Float on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setFloat" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ break;
+ }
+ }
+
+ // TODO - storing the double as a long double - perhaps I need
+ // a new type?
+/* unsigned int TypeImpl::convert(void** value,const double d) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ *(long*)*value = (long)d;
+ return sizeof(long);
+
+ case DoubleType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long double)];
+ *(long double*)*value = (long double)d;
+ return sizeof(long double);
+
+ case FloatType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)d;
+ return sizeof(float);
+
+ case LongType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ *(int64_t*)*value = (int64_t)d;
+ return sizeof(int64_t);
+
+ case DateType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)d;
+ return sizeof(time_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ case BytesType:
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set Double on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setDouble" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+*/
+ unsigned int TypeImpl::convert(void** value,const long double d) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long)];
+ *(long*)*value = (long)d;
+ return sizeof(long);
+
+ case DoubleType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(long double)];
+ *(long double*)*value = (long double)d;
+ return sizeof(long double);
+
+ case FloatType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(float)];
+ *(float*)*value = (float)d;
+ return sizeof(float);
+
+ case LongType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(int64_t)];
+ *(int64_t*)*value = (int64_t)d;
+ return sizeof(int64_t);
+
+ case DateType:
+ if (*value != 0) delete ((char*)*value);
+ *value = new char[sizeof(time_t)];
+ *(time_t*)*value = (time_t)d;
+ return sizeof(time_t);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ case BytesType:
+ case OtherTypes:
+ case DataObjectType:
+ case ChangeSummaryType:
+ default:
+ {
+ string msg("Cannot set Long Double on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setLongDouble" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+ unsigned int TypeImpl::convert(void** value,DataObject* dob) const
+ {
+ switch (typeEnum)
+ {
+
+ case OtherTypes:
+ case DataObjectType:
+ *(DataObject**)value = dob;
+ return sizeof (void*);
+
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ case DoubleType:
+ case FloatType:
+ case LongType:
+ case DateType:
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case BytesType:
+ case UriType:
+ default:
+ {
+ string msg("Cannot set Data Object on object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("setDataObject" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ return 0;
+ }
+
+ unsigned int TypeImpl::convertToString(void* value, wchar_t* outval, unsigned int len,
+ unsigned int max) const
+ {
+#if ! defined(WIN32) && ! defined (_WINDOWS)
+ char* tmpstr = new char[MAX_LONG_SIZE];
+ int j = 0;
+#endif
+ unsigned int i;
+ switch (typeEnum)
+ {
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case UriType:
+ case StringType:
+ {
+ if (value == 0) return 0;
+ wchar_t* tmp = (wchar_t*)value;
+ for (i=0;(i < len) && (i < max);i++)
+ {
+ outval[i] = tmp[i];
+ }
+ return len>max?max:len;
+ }
+ case BytesType:
+ {
+ if (value == 0) return 0;
+ char* tmp = (char*)value;
+ for (i=0;(i < len) && (i < max);i++)
+ {
+ outval[i] = (wchar_t)(tmp[i]);
+ }
+ return len>max?max:len;
+ }
+
+ case BooleanType:
+ {
+ if (max < 4) return 0;
+ if (value == 0 || *(long*)value == 0) {
+ if (max < 5) return 0;
+ outval[0] = (wchar_t)'f';
+ outval[1] = (wchar_t)'a';
+ outval[2] = (wchar_t)'l';
+ outval[3] = (wchar_t)'s';
+ outval[4] = (wchar_t)'e';
+ return 5;
+ }
+ else
+ {
+ outval[0] = (wchar_t)'t';
+ outval[1] = (wchar_t)'r';
+ outval[2] = (wchar_t)'u';
+ outval[3] = (wchar_t)'e';
+ return 4;
+ }
+ }
+
+ case ByteType:
+ {
+ if (value == 0) return 0;
+ long tmp = *(long*)value;
+ outval[0] = (wchar_t)(tmp&0xFF);
+ return 1;
+ }
+
+ case CharacterType:
+ {
+ if (value == 0) return 0;
+ long tmp = *(long*)value;
+ outval[0] = (wchar_t)(tmp & 0xFFFF);
+ return 1;
+ }
+
+ case ShortType:
+ case IntegerType:
+ {
+ if (value == 0) return 0;
+ long tmp = *(long*)value;
+#if defined(WIN32) || defined (_WINDOWS)
+ wchar_t* tmpstr = new wchar_t[MAX_LONG_SIZE];
+ _ltow(tmp,tmpstr,10);
+ if (wcslen(tmpstr) > max) return 0;
+ _ltow(tmp,outval,10);
+ return wcslen(outval);
+#else
+ sprintf(tmpstr, "%ld", tmp);
+ if (strlen(tmpstr) > max) return 0;
+ for (j=0; j< strlen(tmpstr); j++)
+ {
+ outval[j] = (wchar_t)tmpstr[j];
+ }
+ delete tmpstr;
+ return j;
+#endif
+ }
+
+
+ case LongType:
+ {
+ if (value == 0) return 0;
+ int64_t tmp = *(int64_t*)value;
+#if defined(WIN32) || defined (_WINDOWS)
+ wchar_t* tmpstr = new wchar_t[MAX_LONG_SIZE];
+ _i64tow(tmp,tmpstr,10);
+ if (wcslen(tmpstr) > max)
+ {
+ delete tmpstr;
+ return 0;
+ }
+ _i64tow(tmp,outval,10);
+ return wcslen(outval);
+#else
+ sprintf(tmpstr, "%lld", tmp);
+ if (strlen(tmpstr) > max) return 0;
+ for (j=0; j< strlen(tmpstr); j++)
+ {
+ outval[j] = (wchar_t)tmpstr[j];
+ }
+ delete tmpstr;
+ return j;
+#endif
+ }
+
+ case DateType:
+ {
+
+ if (value == 0) return 0;
+ string msg("Conversion to string not implemented from type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getString" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+
+ case DoubleType:
+ {
+ if (value == 0) return 0;
+ if (max < MAX_DOUBLE_SIZE) return 0;
+ wchar_t* fmt = new wchar_t[5];
+ fmt[0] = (wchar_t)'%';
+ fmt[1] = (wchar_t)'.';
+ fmt[2] = (wchar_t)'3';
+ fmt[3] = (wchar_t)'e';
+ fmt[4] = (wchar_t)0;
+#if defined(WIN32) || defined (_WINDOWS)
+ swprintf((wchar_t*)outval,fmt,*(long double*)value);
+#else
+#if defined(NO_SWPRINTF)
+ {
+ int k;
+ char *tmpbuf = new char[50];
+ wchar_t *tmpw = (wchar_t*)outval;
+ sprintf(tmpbuf,"%.3Le",*(long double*)value);
+ for (k=0;k<strlen(tmpbuf);k++)
+ {
+ *(tmpw++) = (wchar_t)(tmpbuf[k]);
+ }
+ *tmpw = 0;
+ delete tmpbuf;
+ }
+
+#else
+ swprintf((wchar_t*)outval, wcslen((wchar_t*)outval), fmt, *(long double*)value);
+#endif
+#endif
+ delete fmt;
+
+ return wcslen(outval);
+ }
+ case FloatType:
+ {
+ if (value == 0) return 0;
+ if (max < MAX_FLOAT_SIZE) return 0;
+ wchar_t* fmt = new wchar_t[5];
+ fmt[0] = (wchar_t)'%';
+ fmt[1] = (wchar_t)'.';
+ fmt[2] = (wchar_t)'3';
+ fmt[3] = (wchar_t)'e';
+ fmt[4] = (wchar_t)0;
+#if defined(WIN32) || defined (_WINDOWS)
+ swprintf(outval,fmt,*(float*)value);
+#else
+#if defined(NO_SWPRINTF)
+ {
+ int k;
+ char *tmpbuf = new char[50];
+ wchar_t *tmpw = (wchar_t*)outval;
+ sprintf(tmpbuf,"%.3e",*(float*)value);
+ for (k=0;k<strlen(tmpbuf);k++)
+ {
+ *(tmpw++) = (wchar_t)(tmpbuf[k]);
+ }
+ *tmpw = 0;
+ delete tmpbuf;
+ }
+#else
+ swprintf(outval, wcslen(outval), fmt, *(float*)value);
+#endif
+#endif
+ delete fmt;
+
+ return wcslen(outval);
+ }
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get String from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getString" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ return 0;
+ }
+
+ unsigned int TypeImpl::convertToBytes(void* value, char* outval, unsigned int len,
+ unsigned int max) const
+ {
+ unsigned int i;
+ switch (typeEnum)
+ {
+ case BytesType:
+ {
+ if (value == 0) return 0;
+ char* tmp = (char*)value;
+ for (i=0;(i < max) && (i < len);i++)
+ {
+ outval[i] = tmp[i];
+ }
+ return len>max?max:len;
+ }
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case UriType:
+ case StringType:
+ {
+ if (value == 0) return 0;
+ wchar_t* tmp = (wchar_t*)value;
+ for (i=0;(i < max) && (i < len);i++)
+ {
+ outval[i] = (char)(tmp[i]);
+ }
+ return len>max?max:len;
+ }
+
+ case BooleanType:
+ {
+ if (value == 0 || *(long*)value == 0) {
+ if (max < 5) return 0;
+ outval[0] = 'f';
+ outval[1] = 'a';
+ outval[2] = 'l';
+ outval[3] = 's';
+ outval[4] = 'e';
+ return 5;
+ }
+ else {
+ if (max < 4) return 0;
+ outval[0] = 't';
+ outval[1] = 'r';
+ outval[2] = 'u';
+ outval[3] = 'e';
+ return 4;
+ }
+ return 0;
+ }
+
+ case CharacterType:
+ case ByteType:
+ {
+ if (value == 0) return 0;
+ long tmp = *(long*)value;
+ outval[0] = (char)(tmp&0xFF);
+ return 1;
+ }
+
+ case ShortType:
+ case IntegerType:
+ {
+ if (value == 0) return 0;
+ long tmp = *(long*)value;
+ char* tmpstr = new char[MAX_LONG_SIZE];
+ sprintf(tmpstr, "%ld", tmp);
+ if (strlen(tmpstr) > max)
+ {
+ delete tmpstr;
+ return 0;
+ }
+ delete tmpstr;
+ sprintf(outval, "%ld", tmp);
+ return strlen(outval);
+ }
+
+
+ case LongType:
+ {
+ if (value == 0) return 0;
+ int64_t tmp = *(int64_t*)value;
+ char * tmpstr = new char[MAX_LONG_SIZE];
+ sprintf(tmpstr, "%lld", tmp);
+ if (strlen(tmpstr) > max)
+ {
+ delete tmpstr;
+ return 0;
+ }
+ delete tmpstr;
+ sprintf(outval, "%lld", tmp);
+ return strlen(outval);
+ }
+ case DateType:
+ {
+ if (value == 0) return 0;
+ string msg("Conversion to string not implemented from type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getBytes" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+
+ case DoubleType:
+ if (value == 0) return 0;
+ if (max < MAX_DOUBLE_SIZE) return 0;
+ sprintf(outval,"%.3Le",*(long double*)value);
+ return strlen(outval);
+
+ case FloatType:
+ if (value == 0) return 0;
+ if (max < MAX_FLOAT_SIZE) return 0;
+ sprintf(outval,"%.3e",*(float*)value);
+ return strlen(outval);
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ if (max < 9) return 0;
+ sprintf(outval,"%08x",value);
+ //string msg("Cannot get Bytes from object of type:");
+ //msg += getName();
+ //SDO_THROW_EXCEPTION("getBytes" ,
+ // SDOInvalidConversionException, msg.c_str());
+ return strlen(outval);
+ }
+ }
+ return 0;
+ }
+
+ // +++
+
+ // value is a pointer to the byte stream that is the value to convert
+ // outval is the resulting string representation of value
+ // len is the length of the input byte stream, it is used only when the length cannot be inferred from other information.
+ // max is the maximum size allowed for the output byte stream. (Not strictly needed when the output is an std::string but we maintain the behaviour from the earlier method.
+
+ // Questions
+ // 1. Why isn't value const?
+ //
+ unsigned int TypeImpl::convertToBytes(const void* value,
+ SDOString& outval,
+ unsigned int len,
+ unsigned int max) const
+ {
+ unsigned int i;
+ switch (typeEnum)
+ {
+ case BytesType:
+ {
+ if (value == 0) return 0;
+
+ const char* tempPtr = (const char*) value;
+ unsigned int count = (len > max) ? max : len;
+ outval.assign(tempPtr, count);
+
+ return count;
+ }
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case UriType:
+ case StringType:
+ {
+ if (value == 0) return 0;
+
+ const wchar_t* tempPtr = (const wchar_t*) value;
+ unsigned int count = (len > max) ? max : len;
+
+ // The following loop copies the low byte from each 2 byte wchar_t
+ // into one byte of the target array eg H_E_L_P -> HELP
+ for (i = 0; (i < count); i++)
+ {
+ outval[i] = (char)(tempPtr[i]);
+ }
+ return count;
+ }
+
+ case BooleanType:
+ {
+ if (value == 0 || *(const long*)value == 0) {
+ if (max < 5) return 0;
+ outval = "false";
+ return 5;
+ }
+ else {
+ if (max < 4) return 0;
+ outval = "true";
+ return 4;
+ }
+ return 0;
+ }
+
+ case CharacterType:
+ case ByteType:
+ {
+ if (value == 0) return 0;
+
+ const long tmp = *(const long*)value;
+ outval[0] = (char)(tmp&0xFF);
+ return 1;
+ }
+
+ case ShortType:
+ case IntegerType:
+ {
+ if (value == 0) return 0;
+
+ const long tmp = *(const long*) value;
+ char* tmpstr = new char[MAX_LONG_SIZE + 1];
+ sprintf(tmpstr, "%ld", tmp);
+ if (strlen(tmpstr) > max)
+ {
+ delete tmpstr;
+ return 0;
+ }
+ outval = tmpstr;
+ delete tmpstr;
+ return outval.length();
+ }
+
+ case LongType:
+ {
+ if (value == 0) return 0;
+
+ const int64_t tmp = *(const int64_t*)value;
+ char* tmpstr = new char[MAX_LONG_SIZE + 1];
+ sprintf(tmpstr, "%lld", tmp);
+ if (strlen(tmpstr) > max)
+ {
+ delete tmpstr;
+ return 0;
+ }
+ outval = tmpstr;
+ delete tmpstr;
+ return outval.length();
+ }
+ case DateType:
+ {
+ if (value == 0) return 0;
+
+ string msg("Conversion to string not implemented from type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getBytes" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+
+ case DoubleType:
+ {
+ if (value == 0) return 0;
+
+ if (max < MAX_DOUBLE_SIZE) return 0;
+
+ char* tmpstr = new char[MAX_DOUBLE_SIZE + 1];
+ sprintf(tmpstr, "%.3Le", *(const long double*)value);
+ outval = tmpstr;
+ delete tmpstr;
+ return outval.length();
+ }
+
+ case FloatType:
+ {
+ if (value == 0) return 0;
+
+ if (max < MAX_FLOAT_SIZE) return 0;
+
+ char* tmpstr = new char[MAX_FLOAT_SIZE + 1];
+ sprintf(tmpstr, "%.3Le", *(const float*)value);
+ outval = tmpstr;
+ delete tmpstr;
+ return outval.length();
+ }
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ if (max < 9) return 0;
+
+ char tmpstr[9];
+ sprintf(tmpstr, "%08x", value);
+ outval = tmpstr;
+ //string msg("Cannot get Bytes from object of type:");
+ //msg += getName();
+ //SDO_THROW_EXCEPTION("getBytes" ,
+ // SDOInvalidConversionException, msg.c_str());
+ return outval.length();
+ }
+ }
+ return 0;
+ }
+
+ // ---
+
+ const char* TypeImpl::convertToCString(void* value, char** asstringbuf, unsigned int len) const
+ {
+ unsigned int i;
+
+ switch (typeEnum)
+ {
+ case BooleanType:
+ if (value == 0 || *(long*)value == 0) {
+ *asstringbuf = new char[6];
+ strcpy(*asstringbuf,"false");
+ }
+ else {
+ *asstringbuf = new char[5];
+ strcpy(*asstringbuf,"true");
+ }
+ return *asstringbuf;
+
+ case ByteType:
+ *asstringbuf = new char[MAX_LONG_SIZE];
+ if (value == 0){
+ sprintf(*asstringbuf,"%ld",0);
+ }
+ else {
+ sprintf(*asstringbuf,"%ld",*(long*)value);
+ }
+ return *asstringbuf;
+
+ case CharacterType:
+ *asstringbuf = new char[MAX_LONG_SIZE];
+ if (value == 0){
+ sprintf(*asstringbuf,"%ld",0);
+ }
+ else {
+ sprintf(*asstringbuf,"%ld", *(long*)value);
+ }
+ return *asstringbuf;
+
+ case IntegerType:
+ *asstringbuf = new char[MAX_LONG_SIZE];
+ if (value == 0){
+ sprintf(*asstringbuf,"%ld",0);
+ }
+ else {
+ sprintf(*asstringbuf,"%ld", *(long*)value);
+ }
+ return *asstringbuf;
+
+ case ShortType:
+ *asstringbuf = new char[MAX_LONG_SIZE];
+ if (value == 0){
+ sprintf(*asstringbuf,"%ld",0);
+ }
+ else {
+ sprintf(*asstringbuf,"%ld", *(long*)value);
+ }
+ return *asstringbuf;
+
+ case DoubleType:
+ *asstringbuf = new char[MAX_DOUBLE_SIZE];
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ (*asstringbuf)[0] = 0;
+ return *asstringbuf;
+ }
+ sprintf(*asstringbuf,"%.3Le",*(long double*)value);
+ return *asstringbuf;
+
+ case FloatType:
+ *asstringbuf = new char[MAX_FLOAT_SIZE];
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ (*asstringbuf)[0] = 0;
+ return *asstringbuf;
+ }
+ sprintf(*asstringbuf,"%.3e", *(float*)value);
+ return *asstringbuf;
+
+ case LongType:
+ {
+ *asstringbuf = new char[MAX_LONG_SIZE];
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ (*asstringbuf)[0] = 0;
+ return *asstringbuf;
+ }
+ int64_t temp = *(int64_t*)value;
+#if defined(WIN32) || defined (_WINDOWS)
+ sprintf(*asstringbuf,"%I64d", temp);
+#else
+ sprintf(*asstringbuf,"%lld", temp);
+#endif
+ return *asstringbuf;
+ }
+ case DateType:
+ *asstringbuf = new char[MAX_LONG_SIZE];
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ (*asstringbuf)[0] = 0;
+ return *asstringbuf;
+ }
+ sprintf(*asstringbuf,"%ld", *(time_t*)value);
+ return *asstringbuf;
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (value == 0 || len == 0)
+ {
+ *asstringbuf = new char[1];
+ (*asstringbuf)[0] = 0;
+ return *asstringbuf;
+ }
+ *asstringbuf = new char[len + 1];
+ wchar_t* tmp = (wchar_t*)value;
+ for (i=0;i< len;i++)
+ {
+ (*asstringbuf)[i] = tmp[i] & 0xFF;
+ }
+ (*asstringbuf)[i] = 0;
+ return *asstringbuf;
+ }
+
+ case BytesType:
+ {
+ if (value == 0 || len == 0)
+ {
+ *asstringbuf = new char[1];
+ (*asstringbuf)[0] = 0;
+ return *asstringbuf;
+ }
+ *asstringbuf = new char[len + 1];
+ char* tmp = (char*)value;
+ for (i=0;i< len ;i++)
+ {
+ (*asstringbuf)[i] = (char)(tmp[i]);
+ }
+ (*asstringbuf)[i] = 0;
+ return *asstringbuf;
+ }
+
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ *asstringbuf = new char[9];
+ sprintf(*asstringbuf,"%08x",value);
+ //string msg("Cannot get CString from object of type:");
+ //msg += getName();
+ //SDO_THROW_EXCEPTION("getCString" ,
+ // SDOInvalidConversionException, msg.c_str());
+ return *asstringbuf;
+ }
+ }
+ return 0;
+ }
+
+ const bool TypeImpl::convertToBoolean(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return false;
+ if (*(long*)value != 0) return true;
+ return false;
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return false;
+ }
+ if (*(long double*)value != 0.0) return true;
+ return false;
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return false;
+ }
+ if (*(float*)value != 0.0) return true;
+ return false;
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return false;
+ }
+ if (*(int64_t*)value != 0)return true;
+ return false;
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return false;
+ }
+ if (*(time_t*)value != 0)return true;
+ return false;
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ if (value == 0 || len < 4)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return false;
+ }
+ if ( ((wchar_t*)value)[0] == (wchar_t)'t' &&
+ ((wchar_t*)value)[1] == (wchar_t)'r' &&
+ ((wchar_t*)value)[2] == (wchar_t)'u' &&
+ ((wchar_t*)value)[3] == (wchar_t)'e' )
+ return true;
+
+ return false;
+
+ case BytesType:
+ if (value == 0 || len < 4)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return false;
+ }
+ if (!strncmp((char*)value,"true", 4)) return true;
+ return false;
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Boolean from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getBoolean" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+
+ }
+
+ const char TypeImpl::convertToByte(void* value , unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (char)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (char)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (char)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (char)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+
+ return (char)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (value == 0) return 0;
+ return (char)*(wchar_t*)value;
+ }
+
+ case BytesType:
+ {
+ if (value == 0) return 0;
+ return (char)*(char*)value;
+ }
+
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Byte from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getByte" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+ const wchar_t TypeImpl::convertToCharacter(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (wchar_t)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (wchar_t)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (wchar_t)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (wchar_t)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (wchar_t)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (value == 0) return 0;
+ return *(wchar_t*)value;
+ }
+
+ case BytesType:
+ {
+ if (value == 0) return 0;
+ return (wchar_t)*(char*)value;
+ }
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Character from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getCharacter" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+ const short TypeImpl::convertToShort(void* value, unsigned int len) const
+ {
+#if ! defined(WIN32) && !defined (_WINDOWS)
+ char* tmpstr = new char[len+1];
+ short s = 0;
+#endif
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (short)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (short)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (short)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (short)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (short)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ if (value == 0 || len == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+#if defined(WIN32) || defined (_WINDOWS)
+ return (short)_wtoi((wchar_t*)value);
+#else
+ for (int j=0;j< len;j++)
+ {
+ tmpstr[j] = (char)((char *)value)[j];
+ }
+ tmpstr[len] = 0;
+ s = (short) atoi(tmpstr);
+ delete tmpstr;
+ return s;
+#endif
+
+
+ case BytesType:
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Short from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getShort" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+
+/* const int TypeImpl::convertToInt(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (int)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+#if defined(WIN32) || defined (_WINDOWS)
+ return (int)_wtoi((wchar_t*)value);
+#else
+ char* tmp = new char[len+1];
+ int j = 0;;
+ for (j=0;j<len;j++)
+ {
+ tmp[j] = (char)(wchar_t*)value[j];
+ }
+ tmp[j] = 0;
+ j = atoi(tmp);
+ delete tmp;
+ return j;
+#endif
+
+ case BytesType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int)atoi((char*)value);
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Int from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getInt" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+ */
+ const long TypeImpl::convertToInteger(void* value, unsigned int len) const
+ {
+#if ! defined(WIN32) && ! defined (_WINDOWS)
+ char* tmp = new char[len+1];
+ int j = 0;
+ long l = 0;
+#endif
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (long)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (long)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (long)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (long)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (long)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+#if defined(WIN32) || defined (_WINDOWS)
+ return (long)_wtol((wchar_t*)value);
+#else
+ for (j=0;j<len;j++)
+ {
+ tmp[j] = (char)((wchar_t*)value)[j];
+ }
+ tmp[j] = 0;
+ l = atol(tmp);
+ delete tmp;
+ return l;
+#endif
+
+ case BytesType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int)atol((char*)value);
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Long from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getLong" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+ const int64_t TypeImpl::convertToLong(void* value, unsigned int len) const
+ {
+#if ! defined(WIN32) && ! defined (_WINDOWS)
+ char* tmp = new char[len+1];
+ int j = 0;
+ int64_t l = 0;
+#endif
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case CharacterType:
+ case ByteType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (int64_t)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int64_t)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int64_t)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int64_t)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (int64_t)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+#if defined(WIN32) || defined (_WINDOWS)
+ return (long)_wtol((wchar_t*)value);
+#else
+ for (j=0;j<len;j++)
+ {
+ tmp[j] = (char)((wchar_t*)value)[j];
+ }
+ tmp[j] = 0;
+ l = strtoll(tmp, NULL, 0);
+ delete tmp;
+ return l;
+#endif
+
+
+ case BytesType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+#if defined(WIN32) || defined (_WINDOWS)
+ return _atoi64((char*)value);
+#else
+ return strtoll((char*)value, NULL, 0);
+#endif
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Long Long from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getLongLong" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+ const float TypeImpl::convertToFloat(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (float)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (float)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (float)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (float)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (float)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ char* tmp = new char[len+1];
+ for (unsigned int j=0;j<len;j++)
+ {
+ tmp[j] = (char)((wchar_t*)value)[j];
+ }
+ tmp[len] = 0;
+ float f = atof(tmp);
+ delete tmp;
+ return f;
+ }
+
+ case BytesType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (float)atof((char*)value);
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Float from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getFloat" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+ /*const double TypeImpl::convertToDouble(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (double)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (double)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (double)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (double)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (double)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ char* tmp = new char[len+1];
+ int j = 0;
+ for (j=0;j<len;j++)
+ {
+ tmp[j] = (char)((wchar_t*)value)[j];
+ }
+ tmp[len] = 0;
+ float f = atof(tmp);
+ delete tmp;
+ return (double)f;
+ }
+ case BytesType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (double)atof((char*)value);
+
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get LongDouble from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getLongDouble" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+*/
+ const long double TypeImpl::convertToDouble(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (long double)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (long double)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (long double)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (long double)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (long double)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ {
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ char* tmp = new char[len+1];
+ for (unsigned int j=0;j<len;j++)
+ {
+ tmp[j] = (char)((wchar_t*)value)[j];
+ }
+ tmp[len] = 0;
+ float f = atof(tmp);
+ delete tmp;
+ return (long double)f;
+ }
+
+ case BytesType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0.0;
+ }
+ return (long double)atof((char*)value);
+
+ case OtherTypes:
+ case DataObjectType:
+ SDO_THROW_EXCEPTION("getLongDouble" ,
+ SDOInvalidConversionException, "Not implemented on data object");
+ break;
+
+ default:
+ {
+ string msg("Cannot get LongDouble from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getLongDouble" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+ const SDODate TypeImpl::convertToDate(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ if (value == 0) return 0;
+ return (time_t)(*(long*)value);
+
+ case DoubleType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (time_t)(*(long double*)value);
+
+ case FloatType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (time_t)(*(float*)value);
+
+ case LongType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (time_t)(*(int64_t*)value);
+
+ case DateType:
+ if (value == 0)
+ {
+ // Conversions might set from a zero value, as they are used
+ // by the default Setting code as well
+ return 0;
+ }
+ return (time_t)(*(time_t*)value);
+
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case UriType:
+ case BooleanType:
+ case BytesType:
+ case OtherTypes:
+ case DataObjectType:
+ default:
+ {
+ string msg("Cannot get Date from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getDate" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+
+ DataObject* TypeImpl::convertToDataObject(void* value, unsigned int len) const
+ {
+ switch (typeEnum)
+ {
+ case OtherTypes:
+ case DataObjectType:
+ return (DataObject*)value;
+
+ case BooleanType:
+ case ByteType:
+ case CharacterType:
+ case IntegerType:
+ case ShortType:
+ case DoubleType:
+ case FloatType:
+ case LongType:
+ case DateType:
+ case BigDecimalType:
+ case BigIntegerType:
+ case StringType:
+ case BytesType:
+ case UriType:
+ default:
+ {
+ string msg("Cannot get Data Object from object of type:");
+ msg += getName();
+ SDO_THROW_EXCEPTION("getDataObject" ,
+ SDOInvalidConversionException, msg.c_str());
+ break;
+ }
+ }
+ }
+};
+
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.h
new file mode 100644
index 0000000000..5a8bcec2e7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeImpl.h
@@ -0,0 +1,325 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/13 08:35:04 $ */
+
+#ifndef _TYPEIMPL_H_
+#define _TYPEIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include <list>
+#include <map>
+#include <vector>
+#include "commonj/sdo/DASType.h"
+#include "commonj/sdo/PropertyImpl.h"
+#include "commonj/sdo/SDODate.h"
+
+
+#define MAX_LONG_SIZE 20
+#define MAX_FLOAT_SIZE 32
+#define MAX_DOUBLE_SIZE 32
+#define BOOL_SIZE 5
+#define CHAR_SIZE 1
+#define BYTE_SIZE 1
+
+
+
+namespace commonj{
+namespace sdo{
+
+class DataObject;
+class PropertyList;
+class MetadataGraph;
+
+
+#ifndef PROPERTY_LIST
+ typedef std::list<PropertyImpl*> PROPERTY_LIST;
+#endif
+
+/**
+ * TypeImpl implements the abstract class Type.
+ * A representation of the type of property of a data object.
+ */
+
+
+class TypeImpl : public DASType
+{
+
+public:
+
+
+ virtual ~TypeImpl();
+
+ /** convert - converts between types
+ *
+ * When a DataObject is queried for the value of one of its
+ * properties, the method to call varies according to the
+ * type of the property.
+ * If the wrong API is called (E.g getBoolean() called on
+ * an Integer value), then a conversion is attempted.
+ * Many conversions will succeed and return the value,
+ * others will throw an InvalidConversionException
+ */
+
+ unsigned int convertDate( void ** value, const SDODate i) const;
+ unsigned int convert( void ** value,const char* s) const;
+ unsigned int convert(void ** value, const SDOString& s) const;
+ unsigned int convert( void ** value,const wchar_t* s, unsigned int len) const;
+ unsigned int convert( void ** value,const char* s, unsigned int len) const;
+ unsigned int convert(void ** value, const SDOString& s, unsigned int len) const;
+ unsigned int convert( void ** value,const bool b) const;
+ unsigned int convert( void ** value,const char c) const;
+ unsigned int convert( void ** value,const wchar_t c) const;
+ unsigned int convert( void ** value,const short s) const;
+#if __WORDSIZE !=64
+ unsigned int convert( void ** value,const long i) const;
+#endif
+ unsigned int convert( void ** value,const int64_t l) const;
+ unsigned int convert( void ** value,const float f) const;
+ unsigned int convert( void ** value,const long double d) const;
+ unsigned int convert( void ** value,DataObject* dob) const;
+
+ const char* convertToCString( void* value , char** inbuf, unsigned int len) const;
+ const bool convertToBoolean( void* value, unsigned int len) const;
+ const char convertToByte( void* value,unsigned int len ) const;
+ unsigned int convertToString( void* value , wchar_t* val, unsigned int len,
+ unsigned int max) const;
+ unsigned int convertToBytes( void* value , char* val, unsigned int len,
+ unsigned int max) const;
+ unsigned int convertToBytes( const void* value , SDOString& val, unsigned int len,
+ unsigned int max) const;
+ const wchar_t convertToCharacter( void* value ,unsigned int len) const;
+ const short convertToShort( void* value ,unsigned int len) const;
+ const long convertToInteger( void* value ,unsigned int len) const;
+ const int64_t convertToLong( void* value ,unsigned int len) const;
+ const float convertToFloat( void* value ,unsigned int len) const;
+ const long double convertToDouble(void* value ,unsigned int len) const;
+ DataObject* convertToDataObject(void* value ,unsigned int len) const;
+ const SDODate convertToDate (void* value ,unsigned int len) const;
+
+ /** equals - compares
+ *
+ * equals returns true if the name and uri are the same
+ */
+
+ bool equals(const Type& t);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the name of the type.
+ ///////////////////////////////////////////////////////////////////////////
+ const char* getName() const;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Alias support.
+ // @return nth alias
+ ///////////////////////////////////////////////////////////////////////////
+ virtual const char* getAlias(unsigned int index = 0) const ;
+ virtual unsigned int getAliasCount() const ;
+ virtual void setAlias(const char* alias);
+
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the namespace URI of the type.
+ ///////////////////////////////////////////////////////////////////////////
+ const char* getURI() const;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the list of the properties of this type.
+ ///////////////////////////////////////////////////////////////////////////
+ PropertyList getProperties() const;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // add a property to a Type whilst building - this is for DAS
+ ///////////////////////////////////////////////////////////////////////////
+ void addProperty(const char* name,
+ const TypeImpl& t, bool many, bool rdonly, bool cont);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Returns the property with the specified name.
+ ///////////////////////////////////////////////////////////////////////////
+ const Property& getProperty(const char* propertyName) const ;
+ const Property& getProperty(const SDOString& propertyName) const ;
+ const Property& getProperty(unsigned int index) const ;
+
+ PropertyImpl* getPropertyImpl(const char* propertyName) const ;
+ PropertyImpl* getPropertyImpl(const SDOString& propertyName) const ;
+ PropertyImpl* getPropertyImpl(unsigned int index) const ;
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Substitute support
+ ///////////////////////////////////////////////////////////////////////////
+ // get the property with no substitute possible.
+ PropertyImpl* getPropertyImplPure(const char* propertyName) const ;
+
+ // get the type of the property even if its a substitute
+ const Type& getRealPropertyType(const char* propertyName) const ;
+ const TypeImpl* getRealPropertyTypeImpl(const char* propertyName) const ;
+
+
+
+ unsigned int getPropertyIndex(const char* propertyName) const ;
+ unsigned int getPropertyIndex(const SDOString& propertyName) const ;
+
+ unsigned int getPropertiesSize() const;
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this Type specifies DataObjects.
+ ///////////////////////////////////////////////////////////////////////////
+ bool isDataObjectType() const;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this Type specifies Sequenced DataObjects.
+ ///////////////////////////////////////////////////////////////////////////
+ bool isSequencedType() const;
+ void setSequenced(bool set);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this Type allows any form of open content. If false,
+ // dataObject.getInstanceProperties() must be the same as
+ // DataObject.getType().getProperties().
+ ///////////////////////////////////////////////////////////////////////////
+ bool isOpenType() const;
+ void setOpen(bool set);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates if this type may not be instantiated.
+ ///////////////////////////////////////////////////////////////////////////
+ bool isAbstractType() const;
+ void setAbstract(bool set);
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Set the base type for inherited types
+ ///////////////////////////////////////////////////////////////////////////
+ void setBaseType(const Type* tb, bool isRestriction = false);
+ const Type* getBaseType() const;
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates a non-object type
+ ///////////////////////////////////////////////////////////////////////////
+ bool isDataType() const;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Indicates a non-object type
+ ///////////////////////////////////////////////////////////////////////////
+ Type::Types getTypeEnum() const;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // set this type as a change summary holder
+ ///////////////////////////////////////////////////////////////////////////
+ void addChangeSummary();
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Say if this type is allowed to have a summary
+ ///////////////////////////////////////////////////////////////////////////
+ bool isChangeSummaryType() const;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Used by the DAS to resolve the base type properties list
+ ///////////////////////////////////////////////////////////////////////////
+ void initCompoundProperties();
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Used by the DAS to chack for nested change summaries
+ ///////////////////////////////////////////////////////////////////////////
+ void validateChangeSummary();
+
+ virtual bool equals(const Type& tother) const;
+
+ virtual bool isFromList() const;
+
+
+private:
+ friend class DataFactoryImpl;
+
+ bool changeSummaryType;
+
+ bool bFromList;
+
+ void* newValue(void* v, int size) const;
+
+ PROPERTY_LIST getCompoundProperties();
+
+ void throwIfNestedChangeSummary() const;
+
+ TypeImpl(const char* uri,const char* name,
+ bool isSeq= false,
+ bool isOp = false,
+ bool isAbs = false,
+ bool isData = false,
+ bool isFromList = false);
+
+ TypeImpl(const Type* base, const char* uri,const char* name,
+ bool isSeq = false,
+ bool isOp = false,
+ bool isAbs = false,
+ bool isData = false,
+ bool isRest = false);
+
+ void init(const char* uri, const char* inname,
+ bool isSeq,
+ bool isOp,
+ bool isAbs,
+ bool isData);
+
+
+
+ TypeImpl();
+ TypeImpl(const TypeImpl& t);
+
+
+ char* name;
+ char* typeURI;
+
+
+ bool isPrimitive;
+ bool isSequenced;
+ bool isOpen;
+ bool isAbstract;
+
+ // baseType properties included
+ bool isResolved;
+ // check for circular dependency
+ bool isResolving;
+
+ Types typeEnum;
+
+ static char* types[num_types];
+
+ // alias support
+
+ std::vector<char*> aliases;
+
+
+ PROPERTY_LIST props;
+
+
+ // type inheritance
+ TypeImpl* baseType;
+ bool brestriction; /* if this is a restriction of the base type
+ rather than an extension.*/
+ // says how many of the props are really in this data object type.
+ unsigned int localPropsSize;
+
+};
+
+};
+};
+
+#endif //_TYPEIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.cpp
new file mode 100644
index 0000000000..ec86a95eb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.cpp
@@ -0,0 +1,84 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/01/16 15:41:28 $ */
+
+#ifndef SDO_EXPORTS
+ #define SDO_EXPORTS
+#endif
+
+#include "commonj/sdo/export.h"
+#include <iostream>
+#include "commonj/sdo/Property.h"
+#include "commonj/sdo/Type.h"
+#include "commonj/sdo/TypeList.h"
+#include "commonj/sdo/Logger.h"
+
+using namespace std;
+
+namespace commonj{
+namespace sdo {
+
+
+/** TypeList provides access to a list of Types.
+ *
+ * The data factory can return a list of types available. This
+ * class wraps that list and provides access to Types by
+ * iteration
+ */
+
+SDO_API TypeList::TypeList(std::vector<const Type*> p) : plist (p)
+{
+}
+
+SDO_API TypeList::TypeList(const TypeList &pin)
+{
+ plist = std::vector<const Type*>(pin.getVec());
+}
+
+SDO_API TypeList::TypeList()
+{
+}
+
+SDO_API TypeList::~TypeList()
+{
+}
+
+
+SDO_API const Type& TypeList::operator[] (int pos) const
+{
+ return *plist[pos];
+}
+
+SDO_API int TypeList::size () const
+{
+ return plist.size();
+}
+
+std::vector<const Type*> TypeList::getVec() const
+{
+ return plist;
+}
+
+SDO_API void TypeList::insert (const Type* t)
+{
+ plist.insert(plist.end(),t);
+}
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.h
new file mode 100644
index 0000000000..bdc20cbfe3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/TypeList.h
@@ -0,0 +1,56 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _TYPELIST_H_
+#define _TYPELIST_H_
+#include "commonj/sdo/export.h"
+
+#include <vector>
+#include "commonj/sdo/Type.h"
+
+namespace commonj{
+namespace sdo
+{
+class Type;
+
+/** TypeList - provides access to a list of Types
+ *
+ * The data factory can return a list of types available. This
+ * class wraps that list and provides access to Types by
+ * iteration
+ */
+
+class TypeList
+{
+private:
+ std::vector<const Type*> plist;
+ std::vector<const Type*> getVec() const;
+public:
+ SDO_API TypeList(const TypeList &pin);
+ SDO_API TypeList(std::vector<const Type*> p);
+ SDO_API TypeList();
+ virtual SDO_API ~TypeList();
+ SDO_API const Type& operator[] (int pos) const;
+ SDO_API int size () const;
+ SDO_API void insert (const Type* t);
+};
+};
+};
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.cpp
new file mode 100644
index 0000000000..b16b2eedff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.cpp
@@ -0,0 +1,31 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/XMLDocument.h"
+namespace commonj
+{
+ namespace sdo
+ {
+
+ XMLDocument::~XMLDocument()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.h
new file mode 100644
index 0000000000..4737fa9d03
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocument.h
@@ -0,0 +1,145 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _XMLDOCUMENT_H_
+#define _XMLDOCUMENT_H_
+
+
+#include "commonj/sdo/export.h"
+
+#include "commonj/sdo/DataObject.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ /** XMLDocument - place for holding a graph
+ *
+ * The XMLDocument class provides a place to hold a loaded
+ * graph of data. The root element name is maintained here so that
+ * the graph can be serialized to the same name later.
+ */
+
+
+ class XMLDocument : public RefCountingObject
+ {
+
+ public:
+
+ SDO_API virtual ~XMLDocument();
+
+ /** getRootDataObject- return the topmost data object
+ *
+ * When XML data is loaded, there is one base element which becomes
+ * the root data object. As this data object is not a property of any
+ * other data object, it has no name
+ * The XMLDocument stores the name which was in the XML file.
+ * This root data object has a URI and a Name only within this
+ * XMLDocument
+ */
+
+ SDO_API virtual DataObjectPtr getRootDataObject() const = 0;
+
+ /** getRootElementName- return the topmost data objects name
+ *
+ * When XML data is loaded, there is one base element which becomes
+ * the root data object. As this data object is not a property of any
+ * other data object, it has no name
+ * The XMLDocument stores the name/uri which was in the XML file.
+ */
+ SDO_API virtual const char* getRootElementURI() const = 0;
+
+ /** getRootElementURI- return the topmost data objects uri
+ *
+ * When XML data is loaded, there is one base element which becomes
+ * the root data object. As this data object is not a property of any
+ * other data object, it has no name
+ * The XMLDocument stores the name/uri which was in the XML file.
+ */
+ SDO_API virtual const char* getRootElementName() const = 0;
+
+ /** getEncoding- return the encoding for this document
+ *
+ * NOT IMPLEMENTED
+ * This returns the encoding specified in the original XML.
+ */
+ SDO_API virtual const char* getEncoding() const = 0;
+
+ /** setEncoding- set the encoding to save this document
+ *
+ * This sets the encoding to save this data to XML.
+ */
+ SDO_API virtual void setEncoding(const char* encoding) = 0;
+
+ /** getXMLDeclaration
+ *
+ * NOT IMPLEMENTED
+ */
+ SDO_API virtual bool getXMLDeclaration() const = 0;
+
+ /** setXMLDeclaration
+ *
+ * Sets the XMLDeclaration
+ */
+ SDO_API virtual void setXMLDeclaration(bool xmlDeclaration) = 0;
+
+ /** getXMLVersion- return the xml version for this document
+ *
+ * NOT IMPLEMENTED
+ */
+ SDO_API virtual const char* getXMLVersion() const = 0;
+
+ /** setXMLVersion- sets the version for this document
+ *
+ * NOT IMPLEMENTED
+ */
+ SDO_API virtual void setXMLVersion(const char* xmlVersion) = 0;
+
+ /** getSchemaLocation- return the schema location
+ *
+ * NOT IMPLEMENTED
+ */
+ SDO_API virtual const char* getSchemaLocation() const = 0;
+
+ /** setSchemaLocation
+ *
+ * Sets the XML Schema location.
+ */
+ SDO_API virtual void setSchemaLocation(const char* schemaLocation) = 0;
+
+ /** getNoNamespaceSchemaLocation
+ *
+ * NOT IMPLEMENTED
+ */
+ SDO_API virtual const char* getNoNamespaceSchemaLocation() const = 0;
+
+ /** setNoNamespaceSchemaLocation
+ *
+ * Sets the nonamespace schema location
+ */
+ SDO_API virtual void setNoNamespaceSchemaLocation(const char* noNamespaceSchemaLocation) = 0;
+
+ SDO_API friend std::istream& operator>>(std::istream& input, XMLDocument& doc);
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_XMLDOCUMENT_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.cpp
new file mode 100644
index 0000000000..88e93ad480
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.cpp
@@ -0,0 +1,69 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/XMLDocumentImpl.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ XMLDocumentImpl::XMLDocumentImpl(
+ DataObjectPtr dob,
+ const char* rootURI,
+ const char* rootName)
+ : dataObject(dob),
+ rootElementURI(rootURI),
+ rootElementName(rootName),
+ xmlDeclaration(true),
+ encoding("UTF-8"),
+ xmlVersion("1.0")
+ {
+ }
+
+ XMLDocumentImpl::~XMLDocumentImpl()
+ {
+ }
+
+ void XMLDocumentImpl::setEncoding(const char* enc)
+ {
+ encoding = enc;
+ }
+
+ void XMLDocumentImpl::setXMLDeclaration(bool xmlDecl)
+ {
+ xmlDeclaration = xmlDecl;
+ }
+
+ void XMLDocumentImpl::setXMLVersion(const char* xmlVer)
+ {
+ xmlVersion = xmlVer;
+ }
+
+ void XMLDocumentImpl::setSchemaLocation(const char* schemaLoc)
+ {
+ schemaLocation = schemaLoc;
+ }
+
+ void XMLDocumentImpl::setNoNamespaceSchemaLocation(const char* noNamespaceSchemaLoc)
+ {
+ noNamespaceSchemaLocation = noNamespaceSchemaLoc;
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.h
new file mode 100644
index 0000000000..a799ba90f2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLDocumentImpl.h
@@ -0,0 +1,96 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _XMLDocumentImpl_H_
+#define _XMLDocumentImpl_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/XMLDocument.h"
+#include "commonj/sdo/DataObject.h"
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/SDOString.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/** XMLDocumentImpl place for holding a graph
+ *
+ * The XMLDocumentImpl class implements the abstract XMLDocument.
+ * Provides a place to hold a loaded
+ * graph of data. The root element name is maintained here so that
+ * the graph can be serialized to the same name later.
+ */
+
+ class XMLDocumentImpl : public XMLDocument
+ {
+
+ public:
+ XMLDocumentImpl();
+
+ XMLDocumentImpl(
+ DataObjectPtr dataObject);
+
+ XMLDocumentImpl(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName);
+
+ virtual ~XMLDocumentImpl();
+
+ virtual DataObjectPtr getRootDataObject() const {return dataObject;}
+ virtual const char* getRootElementURI() const {return rootElementURI;}
+ virtual const char* getRootElementName() const {return rootElementName;}
+ virtual const char* getEncoding() const {return encoding;}
+ virtual void setEncoding(const char* enc);
+
+ virtual bool getXMLDeclaration() const {return xmlDeclaration;}
+ virtual void setXMLDeclaration(bool xmlDecl);
+
+ virtual const char* getXMLVersion() const {return xmlVersion;}
+ virtual void setXMLVersion(const char* xmlVer);
+
+ virtual const char* getSchemaLocation() const {return schemaLocation;}
+ virtual void setSchemaLocation(const char* schemaLoc);
+
+ virtual const char* getNoNamespaceSchemaLocation() const { return noNamespaceSchemaLocation;}
+ virtual void setNoNamespaceSchemaLocation(const char* noNamespaceSchemaLoc);
+
+
+ friend std::istream& operator>>(std::istream& input, XMLDocumentImpl& doc);
+ private:
+ DataObjectPtr dataObject;
+ SDOXMLString rootElementURI;
+ SDOXMLString rootElementName;
+ SDOXMLString encoding;
+ bool xmlDeclaration;
+ SDOXMLString xmlVersion;
+ SDOXMLString schemaLocation;
+ SDOXMLString noNamespaceSchemaLocation;
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_XMLDocumentImpl_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.cpp
new file mode 100644
index 0000000000..3b0648ce10
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.cpp
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/01/16 15:41:28 $ */
+
+
+#include "commonj/sdo/XMLHelper.h"
+namespace commonj
+{
+ namespace sdo
+ {
+ //////////////////////////////////////////////////////////////////////
+ // Construction/Destruction
+ //////////////////////////////////////////////////////////////////////
+ XMLHelper::~XMLHelper()
+ {
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.h
new file mode 100644
index 0000000000..f9e280583e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelper.h
@@ -0,0 +1,142 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#ifndef _XMLHELPER_H_
+#define _XMLHELPER_H_
+
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/XMLDocument.h"
+#include "commonj/sdo/RefCountingObject.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ /**
+ *
+ * XMLHelper provides the ability to load XML data into
+ * a data object graph, according to a schema
+ */
+
+ class XMLHelper : public RefCountingObject
+ {
+ public:
+
+ /** load/loadFile - loads xml data
+ *
+ * De-serializes the specified XML file building a graph of DataObjects.
+ * Returns a pointer to the root data object
+ */
+
+ SDO_API virtual XMLDocumentPtr createDocument(
+ const char* elementname = 0,
+ const char* rootElementURI=0) = 0;
+
+ SDO_API virtual XMLDocumentPtr loadFile(
+ const char* xmlFile,
+ const char* targetNamespaceURI=0) = 0;
+ SDO_API virtual XMLDocumentPtr load(
+ std::istream& inXml,
+ const char* targetNamespaceURI=0) = 0;
+ SDO_API virtual XMLDocumentPtr load(
+ const char* inXml,
+ const char* targetNamespaceURI=0) = 0;
+
+ /** save saves the graph to XML
+ *
+ * save - Serializes the datagraph to the XML file
+ */
+
+ SDO_API virtual void save(XMLDocumentPtr doc, const char* xmlFile,
+ int indent = -1) = 0;
+ SDO_API virtual void save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ const char* xmlFile,
+ int indent = -1) = 0;
+
+
+ /** save saves the graph to XML
+ *
+ * save - Serializes the datagraph to the XML stream
+ */
+
+ SDO_API virtual void save(XMLDocumentPtr doc, std::ostream& outXml,
+ int indent = -1) = 0;
+ SDO_API virtual void save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ std::ostream& outXml,
+ int indent = -1) = 0;
+
+ /** save saves the graph to XML
+ *
+ * save - Serializes the datagraph to a string
+ */
+
+ SDO_API virtual char* save(XMLDocumentPtr doc, int indent = -1) = 0;
+ SDO_API virtual char* save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ int indent = -1) = 0;
+
+ /** createDocument creates an XMLDocument
+ *
+ * An XMLDocument holds a root data object and all its
+ * tree of children. This provides the means of storing the
+ * name to be applied to the root element when serializing
+ */
+
+ SDO_API virtual XMLDocumentPtr createDocument(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName) = 0;
+
+ /***********************************/
+ /* Destructor */
+ /***********************************/
+ SDO_API virtual ~XMLHelper();
+
+ /** getErrorCount gets number of parse errors
+ *
+ * Parser error count - the parse may have
+ * succeeded or partially succeeded or failed. There
+ * may be errors to report or handle.
+ */
+
+ virtual int getErrorCount() const = 0;
+
+ /** getErrorMessage gets the nth error message
+ *
+ * Each error has a message, usually giving the line and file
+ * in which the parser error occurred.
+ */
+
+ virtual const char* getErrorMessage(int errnum) const = 0;
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif //_XMLHELPER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.cpp
new file mode 100644
index 0000000000..b2889ac195
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.cpp
@@ -0,0 +1,308 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#include "commonj/sdo/SDOXMLFileWriter.h" // Include first to avoid libxml compile problems!
+#include "commonj/sdo/SDOXMLStreamWriter.h" // Include first to avoid libxml compile problems!
+#include "commonj/sdo/SDOXMLBufferWriter.h" // Include first to avoid libxml compile problems!
+#include "commonj/sdo/XMLHelperImpl.h"
+#include "commonj/sdo/XMLDocumentImpl.h"
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include "commonj/sdo/SDOSAX2Parser.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include "commonj/sdo/XSDTypeInfo.h"
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/DataFactoryImpl.h"
+
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+ //////////////////////////////////////////////////////////////////////
+ // Construction/Destruction
+ //////////////////////////////////////////////////////////////////////
+
+ XMLHelperImpl::XMLHelperImpl(DataFactoryPtr df)
+ {
+ dataFactory = (DataFactory*)df;
+ if (!dataFactory)
+ {
+ dataFactory = DataFactory::getDataFactory();
+ }
+ }
+
+ XMLHelperImpl::~XMLHelperImpl()
+ {
+ clearErrors();
+ }
+
+ DataFactoryPtr XMLHelperImpl::getDataFactory()
+ {
+ if (!dataFactory)
+ {
+ dataFactory = DataFactory::getDataFactory();
+ }
+ return dataFactory;
+ }
+
+ XMLDocumentPtr XMLHelperImpl::createDocument(DataObjectPtr dataObject)
+ {
+
+ SDOXMLString rootElementName = "";
+ SDOXMLString rootElementURI = "";
+ if (dataObject)
+ {
+ // Set the root element name to the name of the containment property
+ // or null if there is no container
+ try
+ {
+ DataObjectPtr cont = dataObject->getContainer();
+ if (cont != 0)
+ {
+ const Property& containmentProp = dataObject->getContainmentProperty();
+ rootElementName = containmentProp.getName();
+ rootElementURI = cont->getType().getURI();
+ }
+ else
+ {
+ DataFactory* df = dataFactory;
+ rootElementURI = dataObject->getType().getURI();
+ rootElementName = ((DataFactoryImpl*)df)->getRootElementName().c_str();
+ }
+ }
+ catch (SDOPropertyNotFoundException&)
+ {}
+ }
+
+ return new XMLDocumentImpl(dataObject, rootElementURI, rootElementName);
+ }
+
+
+ const TypeImpl* XMLHelperImpl::findRoot(DataFactory* df,
+ const char* rootElementURI)
+ {
+ if (rootElementURI != 0)
+ {
+ return ((DataFactoryImpl*)df)->findTypeImpl
+ (rootElementURI, "RootType");
+ }
+
+ const TypeList& tl = df->getTypes();
+ for (int i=0;i<tl.size();i++)
+ {
+ if (!strcmp("RootType",tl[i].getName()))
+ {
+ return ((DataFactoryImpl*)df)->findTypeImpl
+ (tl[i].getURI(), "RootType");
+ }
+ }
+ return 0;
+ }
+
+ XMLDocumentPtr XMLHelperImpl::createDocument(const char* elementname,
+ const char* rootElementURI)
+ {
+ DataFactory* dp = (DataFactory*)getDataFactory();
+ if (dp == 0) return 0;
+
+ const TypeImpl* rType = findRoot(dp,rootElementURI);
+ if (rType == 0)
+ {
+ std::string msg("createDocument - cannot find element ");
+ if (elementname != 0) msg += elementname;
+ SDO_THROW_EXCEPTION("createDocument", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ if ((elementname != 0) && (strlen(elementname) != 0))
+ {
+ PropertyImpl* pl = rType->getPropertyImpl(elementname);
+ if (pl == 0)
+ {
+ std::string msg("createDocument - cannot find element ");
+ msg += elementname;
+ SDO_THROW_EXCEPTION("createDocument", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ const Type& tp = pl->getType();
+ DataObjectPtr dob = dp->create(tp);
+ return new XMLDocumentImpl(dob,
+ tp.getURI(), /*tp.getName()*/ elementname);
+ }
+ else
+ {
+ const Property& pl = rType->getProperty((unsigned int)0);
+ const Type& tp = pl.getType();
+ DataObjectPtr dob = dp->create(tp);
+ return new XMLDocumentImpl(dob,
+ tp.getURI(), /*tp.getName()*/ pl.getName());
+ }
+
+ std::string msg("createDocument - unable to find root type in namespace ");
+ if (rootElementURI != 0)
+ msg += rootElementURI;
+ else
+ msg += " NULL";
+ SDO_THROW_EXCEPTION("createDocument", SDOUnsupportedOperationException,
+ msg.c_str());
+ }
+
+ XMLDocumentPtr XMLHelperImpl::createDocument(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName)
+ {
+ return new XMLDocumentImpl(dataObject, rootElementURI, rootElementName);
+ }
+
+ XMLDocumentPtr XMLHelperImpl::loadFile(
+ const char* xmlFile,
+ const char* targetNamespaceURI)
+ {
+ DataObjectPtr rootDataObject;
+ clearErrors();
+ SDOSAX2Parser sdoParser(getDataFactory(), targetNamespaceURI, rootDataObject,
+ this);
+ if (sdoParser.parse(xmlFile) == 0)
+ {
+ return createDocument(rootDataObject);
+ }
+ return 0;
+ }
+
+
+ XMLDocumentPtr XMLHelperImpl::load(
+ std::istream& inXml,
+ const char* targetNamespaceURI)
+ {
+ DataObjectPtr rootDataObject;
+ SDOSAX2Parser sdoParser(getDataFactory(), targetNamespaceURI, rootDataObject,
+ this);
+ clearErrors();
+ inXml>>sdoParser;
+ return createDocument(rootDataObject);
+ }
+
+ XMLDocumentPtr XMLHelperImpl::load(
+ const char* inXml,
+ const char* targetNamespaceURI)
+ {
+ std::istringstream str(inXml);
+ return load(str, targetNamespaceURI);
+ }
+
+ void XMLHelperImpl::save(XMLDocumentPtr doc, const char* xmlFile, int indent)
+ {
+ SDOXMLFileWriter writer(xmlFile, dataFactory);
+ writer.write(doc, indent);
+ }
+
+ void XMLHelperImpl::save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ const char* xmlFile,
+ int indent)
+ {
+ save(createDocument(dataObject,rootElementURI, rootElementName), xmlFile,
+ indent);
+ }
+
+
+ // Serializes the datagraph to a stream
+ void XMLHelperImpl::save(XMLDocumentPtr doc, std::ostream& outXml,
+ int indent)
+ {
+ SDOXMLStreamWriter writer(outXml, dataFactory);
+ writer.write(doc, indent);
+ }
+ void XMLHelperImpl::save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ std::ostream& outXml,
+ int indent )
+ {
+ save(createDocument(dataObject,rootElementURI, rootElementName), outXml, indent);
+ }
+
+ // Serializes the datagraph to a std::string
+ char* XMLHelperImpl::save(XMLDocumentPtr doc,
+ int indent)
+ {
+ SDOXMLBufferWriter writer(dataFactory);
+ writer.write(doc, indent);
+ SDOXMLString ret = writer.getBuffer();
+ char* retString = new char[strlen(ret) +1];
+ strcpy(retString, ret);
+ return retString;
+ }
+ char* XMLHelperImpl::save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ int indent)
+ {
+ return save(createDocument(dataObject,rootElementURI, rootElementName),
+ indent);
+ }
+
+ int XMLHelperImpl::getErrorCount() const
+ {
+ return parseErrors.size();
+ }
+
+
+ const char* XMLHelperImpl::getErrorMessage(int errnum) const
+ {
+ if (errnum >= 0 && errnum < parseErrors.size())
+ {
+ return parseErrors[errnum];
+ }
+ return 0;
+ }
+
+ void XMLHelperImpl::setError(const char* message)
+ {
+ if (message == 0) return;
+ char * m = new char[strlen(message) + 1];
+ strcpy(m,message);
+ m[strlen(message)] = 0;
+ parseErrors.push_back(m);
+ }
+
+ void XMLHelperImpl::clearErrors()
+ {
+ while (!parseErrors.empty())
+ {
+ if (*parseErrors.begin() != 0)
+ {
+ delete (char*)(*parseErrors.begin());
+ }
+ parseErrors.erase(parseErrors.begin());
+ }
+ }
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.h
new file mode 100644
index 0000000000..302a9e5072
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLHelperImpl.h
@@ -0,0 +1,143 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#ifndef _XMLHELPERIMPL_H_
+#define _XMLHELPERIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/XMLHelper.h"
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/SchemaInfo.h"
+#include "commonj/sdo/TypeDefinitionsImpl.h"
+#include "commonj/sdo/ParserErrorSetter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ /**
+ *
+ * XMLHelperImpl is the implementation of the abstract class
+ * XMLHelper.
+ * Provides the ability to load XML data into
+ * a data object graph, according to a schema
+ */
+
+ class XMLHelperImpl : public XMLHelper, ParserErrorSetter
+ {
+ public:
+ // Constructor
+ XMLHelperImpl(DataFactoryPtr dataFactory);
+
+ // Destructor
+ virtual ~XMLHelperImpl();
+
+ virtual int getErrorCount() const;
+ virtual const char* getErrorMessage(int errnum) const;
+ virtual void setError(const char* error);
+
+
+ /** load/loadFile - loads xml data
+ *
+ * De-serializes the specified XML file building a graph of DataObjects.
+ * Returns a pointer to the root data object
+ */
+
+ virtual XMLDocumentPtr createDocument(
+ const char* elementname= 0,
+ const char* rootElementURI=0);
+
+ virtual XMLDocumentPtr loadFile(
+ const char* xmlFile,
+ const char* targetNamespaceURI = 0);
+ virtual XMLDocumentPtr load(
+ std::istream& inXml,
+ const char* targetNamespaceURI = 0);
+ virtual XMLDocumentPtr load(
+ const char* inXml,
+ const char* targetNamespaceURI = 0);
+
+ virtual XMLDocumentPtr createDocument(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName);
+
+ /** save saves the graph to XML
+ *
+ * save - Serializes the datagraph to the XML file
+ */
+
+ void save(XMLDocumentPtr doc, const char* xmlFile, int indent = -1);
+ void save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ const char* xmlFile, int indent = -1);
+
+ /** save saves the graph to XML
+ *
+ * save - Serializes the datagraph to a stream
+ */
+
+ void save(XMLDocumentPtr doc, std::ostream& outXml,
+ int indent = -1);
+ void save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ std::ostream& outXml,
+ int indent = -1);
+
+ /** save saves the graph to XML
+ *
+ * save - Serializes the datagraph to a string
+ */
+ char* save(XMLDocumentPtr doc,int indent = -1);
+ char* save(
+ DataObjectPtr dataObject,
+ const char* rootElementURI,
+ const char* rootElementName,
+ int indent = -1);
+
+ private:
+ int parse(const char* source);
+ void clearErrors();
+
+ std::vector<char*> parseErrors;
+
+ // Instance variables
+ DataFactoryPtr dataFactory;
+ SDOXMLString targetNamespaceURI;
+
+ XMLDocumentPtr createDocument(DataObjectPtr dataObject);
+
+ const TypeImpl* findRoot(DataFactory* df,
+ const char* rootElementURI);
+
+ DataFactoryPtr getDataFactory();
+ };
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif // _XMLHELPERIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.cpp
new file mode 100644
index 0000000000..de03d3affb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.cpp
@@ -0,0 +1,84 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/XMLQName.h"
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+ XMLQName::XMLQName()
+ {
+ }
+
+ XMLQName::XMLQName(const SDOXMLString& sdouri)
+ {
+ int index = sdouri.lastIndexOf('#');
+ if (index < 0)
+ {
+ localName = sdouri;
+ }
+ else
+ {
+ uri = sdouri.substring(0, index);
+ localName = sdouri.substring(index+1);
+ }
+ }
+
+ XMLQName::XMLQName(
+ const SDOXMLString& qname,
+ const SAX2Namespaces& globalNamespaces,
+ const SAX2Namespaces& localNamespaces)
+ {
+ SDOXMLString prefix;
+
+ int index = qname.firstIndexOf(':');
+ if (index < 0)
+ {
+ localName = qname;
+ }
+ else
+ {
+ prefix = qname.substring(0, index);
+ localName = qname.substring(index+1);
+ }
+
+ const SDOXMLString* namespaceURI = localNamespaces.find(prefix);
+ if (namespaceURI == 0)
+ {
+ namespaceURI = globalNamespaces.find(prefix);
+ }
+ if (namespaceURI != 0)
+ {
+ uri = *namespaceURI;
+ }
+
+ }
+
+ XMLQName::~XMLQName()
+ {
+ }
+
+ SDOXMLString XMLQName::getSDOName() const
+ {
+ return uri + "#" + localName;
+ }
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.h
new file mode 100644
index 0000000000..9548a737d0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XMLQName.h
@@ -0,0 +1,66 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _XMLQName_H_
+#define _XMLQName_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/DataObject.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+/** XMLQname wraps a qualified name
+ *
+ * This class holds a QName and provides access to its
+ * members
+ */
+
+ class XMLQName
+ {
+
+ public:
+ XMLQName();
+ XMLQName(const SDOXMLString& sdoUri);
+ XMLQName(
+ const SDOXMLString& qname,
+ const SAX2Namespaces& globalNamespaces,
+ const SAX2Namespaces& localNamespaces = SAX2Namespaces());
+
+ SDOXMLString getSDOName() const ;
+ const SDOXMLString& getURI() const {return uri;}
+ const SDOXMLString& getLocalName() const {return localName;}
+ virtual ~XMLQName();
+
+ private:
+ SDOXMLString uri;
+ SDOXMLString localName;
+
+
+ };
+ } // End - namespace sdo
+} // End - namespace commonj
+
+
+#endif //_XMLQName_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.cpp
new file mode 100644
index 0000000000..6c9ce98127
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.cpp
@@ -0,0 +1,35 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/XSDHelper.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+
+ XSDHelper::~XSDHelper()
+ {
+ }
+
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.h
new file mode 100644
index 0000000000..9457176e89
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelper.h
@@ -0,0 +1,130 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#ifndef _XSDHELPER_H_
+#define _XSDHELPER_H_
+
+
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/RefCountingObject.h"
+#include "commonj/sdo/DataFactory.h"
+#include "commonj/sdo/TypeDefinitions.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ /**
+ *
+ * XSDHelper provides the means of loading and saving XSD information
+ * from/to the metadata (Types and properties)
+ */
+
+ class XSDHelper : public RefCountingObject
+ {
+ public:
+
+ /** define builds types/properties from file or stream
+ *
+ * define/defineFile
+ *
+ * Populates the data factory with Types and Properties from the schema
+ * Loads from file, stream or char* buffer.
+ * The return value is the URI of the root Type
+ *
+ */
+
+ SDO_API virtual const char* defineFile(const char* schemaFile) = 0;
+ SDO_API virtual const char* define(std::istream& schema) = 0;
+ SDO_API virtual const char* define(const char* schema) = 0;
+
+
+ /** generate buildsXSD from types/properties
+ *
+ * generate/generateFile
+ *
+ * Saves the types/properties to an XSD stream or file
+ *
+ */
+
+ SDO_API virtual char* generate(
+ const TypeList& types,
+ const char* targetNamespaceURI = "",
+ int indent = -1) = 0;
+ SDO_API virtual void generate(
+ const TypeList& types,
+ std::ostream& outXsd,
+ const char* targetNamespaceURI = "",
+ int indent = -1) = 0;
+ SDO_API virtual void generateFile(
+ const TypeList& types,
+ const char* fileName,
+ const char* targetNamespaceURI = "",
+ int indent = -1) = 0;
+
+ /***********************************/
+ /* Destructor */
+ /***********************************/
+ SDO_API virtual ~XSDHelper();
+
+ /** getDataFactory()
+ *
+ * Return the DataFactory
+ */
+
+ SDO_API virtual DataFactoryPtr getDataFactory() = 0;
+
+ /** getRootTypeURI
+ *
+ * Return the URI for the root Type
+ */
+
+ SDO_API virtual const char* getRootTypeURI() = 0;
+
+ /** getErrorCount gets number of parse errors
+ *
+ * Parser error count - the parse may have
+ * succeeded or partially succeeded or failed. There
+ * may be errors to report or handle.
+ */
+
+ virtual int getErrorCount() const = 0;
+
+ /** getErrorMessage gets the nth error message
+ *
+ * Each error has a message, usually giving the line and file
+ * in which the parser error occurred.
+ */
+
+ virtual const char* getErrorMessage(int errnum) const = 0;
+
+ /**
+ *
+ * used for defining types from type definitions
+ */
+
+ SDO_API virtual void defineTypes(TypeDefinitions& types) = 0;
+
+
+ };
+ }//End - namespace sdo
+} // End - namespace commonj
+
+#endif //_XSDHELPER_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp
new file mode 100644
index 0000000000..7b918c576e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.cpp
@@ -0,0 +1,589 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/04/18 12:33:33 $ */
+
+#include "commonj/sdo/SDOXMLFileWriter.h" // Include first to avoid libxml compile problems!
+#include "commonj/sdo/SDOXMLStreamWriter.h" // Include first to avoid libxml compile problems!
+#include "commonj/sdo/SDOXMLBufferWriter.h" // Include first to avoid libxml compile problems!
+#include "commonj/sdo/SDOXSDFileWriter.h"
+#include "commonj/sdo/SDOXSDStreamWriter.h"
+#include "commonj/sdo/SDOXSDBufferWriter.h"
+#include "commonj/sdo/XSDHelperImpl.h"
+#include "commonj/sdo/XMLDocumentImpl.h"
+#include <iostream>
+#include <fstream>
+#include <sstream>
+#include "commonj/sdo/SDOSchemaSAX2Parser.h"
+#include "commonj/sdo/SDOSAX2Parser.h"
+#include "commonj/sdo/XSDPropertyInfo.h"
+#include "commonj/sdo/XSDTypeInfo.h"
+
+#include "commonj/sdo/SDORuntimeException.h"
+#include "commonj/sdo/DASProperty.h"
+#include "commonj/sdo/Logging.h"
+#include "commonj/sdo/Type.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ /** XSDHelperImpl
+ *
+ * XSDHelperImpl is the implementation of the abstract class
+ * XSDHelper.
+ * Provides the means of loading and saving XSD information
+ * from/to the metadata (Types and properties)
+ */
+
+ XSDHelperImpl::XSDHelperImpl(DataFactoryPtr df)
+ {
+ dataFactory = (DataFactory*)df;
+ if (!dataFactory)
+ {
+ dataFactory = DataFactory::getDataFactory();
+ }
+ }
+
+ XSDHelperImpl::~XSDHelperImpl()
+ {
+ clearErrors();
+ }
+
+ /** define builds types/properties from file or stream
+ *
+ * define/defineFile
+ *
+ * Populates the data factory with Types and Properties from the schema
+ * Loads from file, stream or char* buffer.
+ * The return value is the URI of the root Type
+ *
+ */
+
+ const char* XSDHelperImpl::defineFile(const char* schema)
+ {
+
+ SDOSchemaSAX2Parser schemaParser(schemaInfo, this);
+ clearErrors();
+ if (schemaParser.parse(schema) == 0)
+ {
+ defineTypes(schemaParser.getTypeDefinitions());
+ return schemaInfo.getTargetNamespaceURI();
+ }
+ return 0;
+ }
+
+ const char* XSDHelperImpl::define(std::istream& schema)
+ {
+ SDOSchemaSAX2Parser schemaParser(schemaInfo, this);
+ clearErrors();
+ schema >> schemaParser;
+ defineTypes(schemaParser.getTypeDefinitions());
+ return schemaInfo.getTargetNamespaceURI();
+ }
+
+ const char* XSDHelperImpl::define(const char* schema)
+ {
+ std::istringstream str(schema);
+ SDOSchemaSAX2Parser schemaParser(schemaInfo, this);
+ clearErrors();
+ str >> schemaParser;
+ defineTypes(schemaParser.getTypeDefinitions());
+ return schemaInfo.getTargetNamespaceURI();
+ return define(str);
+ }
+
+ void XSDHelperImpl::newSubstitute(const char* entryName,
+ PropertyDefinitionImpl& prop)
+ {
+ try
+ {
+ const char* typeUri = prop.substituteUri.isNull() ?
+ prop.typeUri : prop.substituteUri;
+ const Type& rootType = dataFactory->getType(typeUri, entryName);
+ PropertyList pl = rootType.getProperties();
+ for (int j = 0; j < pl.size(); j++)
+ {
+ if (!pl[j].getType().isDataType()
+ && strcmp(pl[j].getType().getURI(),Type::SDOTypeNamespaceURI.c_str()))
+ {
+ // recurse the tree..
+ newSubstitute(pl[j].getType().getName(),
+ prop);
+
+ if (!strcmp(pl[j].getName(),prop.substituteName))
+ {
+ dataFactory->setPropertySubstitute(rootType.getURI(),
+ rootType.getName(),
+ pl[j].getName(),
+ prop.name,
+ typeUri,
+ prop.typeName);
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)
+ ((DASProperty*)&pl[j])->getDASValue("XMLDAS::PropertyInfo");
+ if (pi)
+ {
+ PropertyDefinitionImpl& propdef = (PropertyDefinitionImpl&)pi->getPropertyDefinition();
+ propdef.substituteNames.push_back(prop.name);
+ propdef.substituteLocalNames.push_back(prop.localname);
+ }
+
+ }
+
+ }
+ }
+ }
+ catch (const SDORuntimeException&)
+ {
+ }
+ }
+
+ void XSDHelperImpl::addSubstitutes(PropertyDefinitionImpl& prop,
+ TypeDefinitionImpl& ty)
+ {
+ try
+ {
+ const char* typeUri = prop.substituteUri.isNull() ?
+ ty.uri : prop.substituteUri;
+ DataFactoryImpl* df = (DataFactoryImpl*)(DataFactory*)dataFactory;
+ const Type* rootType = df->findType(typeUri,"RootType");
+ if (rootType == 0) return;
+ PropertyList pl = rootType->getProperties();
+ for (int j = 0; j < pl.size(); j++)
+ {
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)
+ ((DASProperty*)&pl[j])->getDASValue("XMLDAS::PropertyInfo");
+ if (pi)
+ {
+ PropertyDefinitionImpl& propdef = (PropertyDefinitionImpl&)pi->getPropertyDefinition();
+ if (propdef.isSubstitute && propdef.substituteName.equals(prop.name))
+ {
+
+ LOGINFO_1(INFO,"XSDHelper adding substitute for property %s", (const char*)prop.name);
+
+ dataFactory->setPropertySubstitute(typeUri,ty.name,
+ prop.name, propdef.name,
+ pl[j].getType().getURI(),
+ pl[j].getType().getName());
+ prop.substituteNames.push_back(propdef.name);
+ prop.substituteLocalNames.push_back(propdef.localname);
+ }
+ }
+ }
+ }
+ catch (const SDORuntimeException&)
+ {
+ }
+ }
+
+
+ /** defineTypes
+ *
+ * This method works through all the data gathered during parsing
+ * and defines all the types using the data factory.
+ */
+
+ void XSDHelperImpl::defineTypes(TypeDefinitions& types)
+ {
+ defineTypes(types.getTypeDefinitions());
+ }
+
+
+ /** defineTypes
+ *
+ * This method works through all the data gathered during parsing
+ * and defines all the types using the data factory.
+ */
+
+ void XSDHelperImpl::defineTypes(TypeDefinitionsImpl& typedefs)
+ {
+ DataFactoryImpl* df = (DataFactoryImpl*)(DataFactory*)dataFactory;
+
+ XMLDAS_TypeDefs types = typedefs.types;
+ XMLDAS_TypeDefs::iterator iter;
+
+
+ for (iter=types.begin(); iter != types.end(); iter++)
+ {
+ TypeDefinitionImpl& ty = iter->second;
+ try
+ {
+ /*
+ string isSeqCode = "false";
+ if (ty.isSequenced)
+ isSeqCode = "true";
+ string isOpenCode = "false";
+ if (ty.isOpen)
+ isOpenCode = "true";
+ string isAbstractCode = "false";
+ if (ty.isAbstract)
+ isAbstractCode = "true";
+ string uriCode = "0";
+ if (!ty.uri.isNull())
+ {
+ uriCode = "\"" + string(ty.uri) + "\"";
+ }
+
+ string addTypeCode = "dataFactory->addType(\n"
+ + uriCode + ", \"" + string(ty.name) + "\", \n"
+ + isSeqCode + ", " + isOpenCode + ", " + isAbstractCode +");";
+ cout << addTypeCode.c_str() <<endl;
+ */
+
+ df->addType(ty.uri, ty.name, ty.isSequenced,
+ ty.isOpen, ty.isAbstract, ty.dataType, ty.isFromList);
+ df->setDASValue(
+ ty.uri, ty.name,
+ "XMLDAS::TypeInfo",
+ new XSDTypeInfo(ty));
+
+ // add aliases
+ if (!ty.aliases.isNull())
+ {
+ SDOXMLString al = ty.aliases;
+ SDOXMLString al1 = "";
+ int index;
+ while (!al.isNull() && !al.equals(""))
+ {
+ index = al.lastIndexOf(' ');
+ if (index < 0)
+ {
+ al1 = al;
+ al = "";
+ }
+ else
+ {
+ al1 = al.substring(index + 1);
+ al = al.substring(0,index);
+ }
+ if (!al1.isNull() && !al1.equals(""))
+ {
+ df->setAlias(
+ ty.uri,
+ ty.name,
+ (const char*)al1);
+ }
+ }
+ }
+
+ }
+ catch (SDORuntimeException& e)
+ {
+ SDO_RETHROW_EXCEPTION("defineTypes", e);
+ }
+ }
+ for (iter=types.begin(); iter != types.end(); iter++)
+ {
+ TypeDefinitionImpl& ty = iter->second;
+ if (!ty.parentTypeName.isNull())
+ {
+ try
+ {
+ /*
+ string uriCode = "0";
+ if (!ty.uri.isNull())
+ {
+ uriCode = "\"" + string(ty.uri) + "\"";
+ }
+ string parentUriCode = "0";
+ if (!ty.uri.isNull())
+ {
+ parentUriCode = "\"" + string(ty.parentTypeUri) + "\"";
+ }
+
+ string addTypeCode = "dataFactory->setBaseType(\n"
+ + uriCode + ", \"" + string(ty.name) + "\", \n"
+ + parentUriCode + ", \"" + string(ty.parentTypeName) + "\");";
+
+ cout << addTypeCode.c_str() <<endl;
+ */
+
+ df->setBaseType(
+ ty.uri,
+ ty.name,
+ ty.parentTypeUri,
+ ty.parentTypeName,
+ ty.isRestriction);
+ }
+ catch (SDORuntimeException& e)
+ {
+ SDO_RETHROW_EXCEPTION("defineTypes", e);
+ }
+ }
+
+ XmlDasPropertyDefs::iterator propsIter;
+ for (propsIter = ty.properties.begin(); propsIter != ty.properties.end(); propsIter++)
+ {
+ PropertyDefinitionImpl& prop = *propsIter;
+
+ // For a refence we need to determine the type from the
+ // global element declaration
+ if(prop.isReference)
+ {
+
+ bool refFound = false;
+
+ if (prop.name.isNull())
+ prop.name = prop.typeName;
+
+
+ XMLDAS_TypeDefs::iterator refTypeIter =
+ types.find(TypeDefinitionsImpl::getTypeQName(prop.typeUri, "RootType"));
+ if(refTypeIter != types.end())
+ {
+
+ TypeDefinitionImpl rootTy = refTypeIter->second;
+
+ // find the property on the root type
+ XmlDasPropertyDefs::iterator refPropsIter;
+ for (refPropsIter = rootTy.properties.begin(); refPropsIter != rootTy.properties.end(); refPropsIter++)
+ {
+
+ if (refPropsIter->localname.equals(prop.typeName))
+ {
+ prop.typeUri = refPropsIter->typeUri;
+ prop.typeName = refPropsIter->typeName;
+ refFound = true;
+ }
+ }
+ }
+ if (!refFound)
+ {
+
+ // Check if this type is already defined to the data factory
+ try
+ {
+ const Type& rootType = dataFactory->getType(prop.typeUri, "RootType");
+ PropertyList pl = rootType.getProperties();
+
+ for (int j = 0; j < pl.size(); j++)
+ {
+
+ XSDPropertyInfo* pi = (XSDPropertyInfo*)
+ ((DASProperty*)&pl[j])->getDASValue("XMLDAS::PropertyInfo");
+
+
+
+ if (prop.typeName.equals(pl[j].getName())
+ || (pi && prop.typeName.equals(pi->getPropertyDefinition().localname)))
+ {
+ prop.typeUri = pl[j].getType().getURI();
+ prop.typeName = pl[j].getType().getName();
+ refFound = true;
+ break;
+ }
+ }
+ }
+ catch (const SDORuntimeException&)
+ {
+ }
+ }
+ // If we haven't been able to resolve this reference we should ignore it
+ if (!refFound)
+ {
+ LOGINFO_1(INFO,"XsdHelper:no matching reference for %s",
+ (const char *)prop.name);
+ continue;
+ }
+ }
+
+ if (prop.name.isNull())
+ {
+ continue;
+ }
+ XMLDAS_TypeDefs::iterator propTypeIter =
+ types.find(TypeDefinitionsImpl::getTypeQName(prop.typeUri, prop.typeName));
+ if(propTypeIter != types.end())
+ {
+ prop.typeName = propTypeIter->second.name;
+ }
+
+ try
+ {
+
+ df->addPropertyToType(ty.uri, ty.name,
+ prop.name,
+ prop.typeUri,
+ prop.typeName,
+ prop.isMany,
+ prop.isReadOnly,
+ prop.isContainment);
+
+ LOGINFO_1(INFO,"XSDHelper adds property %s",(const char*)(prop.name));
+
+ if (!prop.aliases.isNull())
+ {
+ SDOXMLString al = prop.aliases;
+ SDOXMLString al1 = "";
+ int index;
+ while (!al.isNull() && !al.equals(""))
+ {
+ index = al.lastIndexOf(' ');
+ if (index < 0)
+ {
+ al1 = al;
+ al = "";
+ }
+ else
+ {
+ al1 = al.substring(index + 1);
+ al = al.substring(0,index);
+ }
+ if (!al1.isNull() && !al1.equals(""))
+ {
+ df->setAlias(
+ (const char*)ty.uri,
+ (const char*)ty.name,
+ (const char*)prop.name,
+ (const char*)al1);
+ }
+ }
+ }
+ if (prop.isSubstitute)
+ {
+ // we have a new substitute - so will check the existing graph for
+ // substitutions to insert
+
+ LOGINFO_1(INFO,"XSDHelper: Found new substitute %s",(const char*)(prop.name));
+
+ newSubstitute( "RootType",prop);
+ }
+ else
+ {
+ addSubstitutes(prop,ty);
+ }
+
+ // Do not add DASValue to ChangeSummary
+ if (!(prop.typeUri.equals(Type::SDOTypeNamespaceURI.c_str())
+ && prop.typeName.equals("ChangeSummary")))
+ {
+ df->setDASValue(
+ ty.uri, ty.name,
+ prop.name,
+ "XMLDAS::PropertyInfo",
+ new XSDPropertyInfo(prop));
+ }
+ }
+ catch (SDORuntimeException& e)
+ {
+ SDO_RETHROW_EXCEPTION("defineTypes", e);
+ }
+ }
+
+ }
+ } // End - defineTypes
+
+ /** getDataFactory returns the factory
+ *
+ */
+
+ DataFactoryPtr XSDHelperImpl::getDataFactory()
+ {
+ return dataFactory;
+ }
+
+
+ /** generate buildsXSD from types/properties
+ *
+ * generate/generateFile
+ *
+ * Saves the types/properties to an XSD stream or file
+ *
+ */
+
+ void XSDHelperImpl::generateFile(
+ const TypeList& types,
+ const char* fileName,
+ const char* targetNamespaceURI,
+ int indent
+ )
+ {
+ SDOXSDFileWriter writer(fileName);
+ DataFactory* fac = dataFactory;
+ writer.write(types, targetNamespaceURI,
+ ((DataFactoryImpl*)fac)->getOpenProperties(), indent);
+ }
+
+ void XSDHelperImpl::generate(
+ const TypeList& types,
+ std::ostream& outXml,
+ const char* targetNamespaceURI,
+ int indent
+ )
+ {
+ SDOXSDStreamWriter writer(outXml);
+ DataFactory* fac = dataFactory;
+ writer.write(types, targetNamespaceURI,
+ ((DataFactoryImpl*)fac)->getOpenProperties(), indent);
+ }
+
+ char* XSDHelperImpl::generate(
+ const TypeList& types,
+ const char* targetNamespaceURI,
+ int indent
+ )
+ {
+ SDOXSDBufferWriter writer;
+ DataFactory* fac = dataFactory;
+ writer.write(types, targetNamespaceURI,
+ ((DataFactoryImpl*)fac)->getOpenProperties(), indent);
+ SDOXMLString ret = writer.getBuffer();
+ char* retString = new char[strlen(ret) +1];
+ strcpy(retString, ret);
+ return retString;
+ }
+
+ int XSDHelperImpl::getErrorCount() const
+ {
+ return parseErrors.size();
+ }
+
+
+ const char* XSDHelperImpl::getErrorMessage(int errnum) const
+ {
+ if (errnum >= 0 && errnum < parseErrors.size())
+ {
+ return parseErrors[errnum];
+ }
+ return 0;
+ }
+
+ void XSDHelperImpl::setError(const char* message)
+ {
+ if (message == 0) return;
+ char * m = new char[strlen(message) + 1];
+ strcpy(m,message);
+ m[strlen(message)] = 0;
+ parseErrors.push_back(m);
+ }
+
+ void XSDHelperImpl::clearErrors()
+ {
+ while (!parseErrors.empty())
+ {
+ if (*parseErrors.begin() != 0)
+ {
+ delete (char*)(*parseErrors.begin());
+ }
+ parseErrors.erase(parseErrors.begin());
+ }
+ }
+
+
+ } // End - namespace sdo
+} // End - namespace commonj
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.h
new file mode 100644
index 0000000000..791d1229ce
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDHelperImpl.h
@@ -0,0 +1,145 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2006/02/01 16:24:13 $ */
+
+#ifndef _XSDHELPERIMPL_H_
+#define _XSDHELPERIMPL_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/XSDHelper.h"
+#include "commonj/sdo/export.h"
+#include "commonj/sdo/SDOXMLString.h"
+#include "commonj/sdo/SAX2Namespaces.h"
+#include "commonj/sdo/SchemaInfo.h"
+#include "commonj/sdo/TypeDefinitionsImpl.h"
+#include "commonj/sdo/ParserErrorSetter.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ /**
+ *
+ * XSDHelperImpl is the implementation of the abstract class
+ * XSDHelper.
+ * Provides the means of loading and saving XSD information
+ * from/to the metadata (Types and properties)
+ */
+
+ class XSDHelperImpl : public XSDHelper, ParserErrorSetter
+ {
+ public:
+
+ // Constructor
+ XSDHelperImpl(DataFactoryPtr dataFactory);
+
+ // Destructor
+ virtual ~XSDHelperImpl();
+
+ /** define builds types/properties from file or stream
+ *
+ * define/defineFile
+ *
+ * Populates the data factory with Types and Properties from the schema
+ * Loads from file, stream or char* buffer.
+ * The return value is the URI of the root Type
+ *
+ */
+ virtual const char* defineFile(const char* schemaFile);
+ virtual const char* define(std::istream& schema);
+ virtual const char* define(const char* schema);
+
+ /** getErrorCount gets number of parse errors
+ *
+ * Parser error count - the parse may have
+ * succeeded or partially succeeded or failed. There
+ * may be errors to report or handle.
+ */
+
+ virtual int getErrorCount() const;
+
+ /** getErrorMessage gets the nth error message
+ *
+ * Each error has a message, usually giving the line and file
+ * in which the parser error occurred.
+ */
+
+ virtual const char* getErrorMessage(int errnum) const;
+ virtual void setError(const char* error);
+
+ /** generate buildsXSD from types/properties
+ *
+ * generate/generateFile
+ *
+ * Saves the types/properties to an XSD stream or file
+ *
+ */
+
+ virtual char* generate(
+ const TypeList& types,
+ const char* targetNamespaceURI = "",
+ int indent = -1
+ );
+ void generate(
+ const TypeList& types,
+ std::ostream& outXsd,
+ const char* targetNamespaceURI = "",
+ int indent = -1
+ );
+ virtual void generateFile(
+ const TypeList& types,
+ const char* fileName,
+ const char* targetNamespaceURI = "",
+ int indent = -1);
+
+ virtual DataFactoryPtr getDataFactory();
+
+ // Return the URI for the root Type
+ virtual const char* getRootTypeURI()
+ {
+ return schemaInfo.getTargetNamespaceURI();
+ }
+
+ virtual void defineTypes(TypeDefinitions& types);
+
+ private:
+ virtual void clearErrors();
+
+ void newSubstitute(const char* entryName,
+ PropertyDefinitionImpl& prop);
+
+ void addSubstitutes(PropertyDefinitionImpl& prop,
+ TypeDefinitionImpl& ty);
+
+ void defineTypes(TypeDefinitionsImpl& types);
+ int parse(const char* source);
+
+ // Instance variables
+ DataFactoryPtr dataFactory; // metadata
+ SchemaInfo schemaInfo;
+
+ std::vector<char*> parseErrors;
+
+ };
+
+ } // End - namespace sdo
+} // End - namespace commonj
+
+#endif // _XSDHELPERIMPL_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.cpp
new file mode 100644
index 0000000000..9d001232cb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.cpp
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/XSDPropertyInfo.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ /**
+ *
+ * This holds a property definition during the parsing process
+ * when all properties need to be read and stored prior to creation
+ * within the data facttory.
+ */
+
+ XSDPropertyInfo::XSDPropertyInfo()
+ {
+ }
+
+ XSDPropertyInfo::XSDPropertyInfo(const PropertyDefinitionImpl& prop)
+ : property(prop)
+ {
+ }
+
+
+ XSDPropertyInfo::~XSDPropertyInfo()
+ {
+ }
+
+
+ }
+}
+// end - namespace sdo
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.h
new file mode 100644
index 0000000000..26307411a0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDPropertyInfo.h
@@ -0,0 +1,59 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _XSDPropertyInfo_H_
+#define _XSDPropertyInfo_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/DASValue.h"
+#include "commonj/sdo/PropertyDefinitionImpl.h"
+#include "commonj/sdo/SDOXMLString.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ /**
+ *
+ * This holds a property definition during the parsing process.
+ * This holds a property definition during the parsing process
+ * when all properties need to be read and stored prior to creation
+ * within the data facttory.
+ */
+
+ class XSDPropertyInfo : public DASValue
+ {
+ public:
+
+ XSDPropertyInfo();
+ XSDPropertyInfo(const PropertyDefinitionImpl& prop);
+
+ virtual ~XSDPropertyInfo();
+
+ const PropertyDefinitionImpl& getPropertyDefinition() {return property;}
+
+
+ private:
+ PropertyDefinitionImpl property;
+ };
+ }
+}
+#endif //_XSDPropertyInfo_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.cpp
new file mode 100644
index 0000000000..f0ae973195
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.cpp
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/XSDTypeInfo.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+
+ /** XSDTypeInfo
+ *
+ * This holds a type definition during the parsing process
+ * when all types need to be read and stored prior to creation
+ * within the data facttory.
+ */
+
+ XSDTypeInfo::XSDTypeInfo()
+ {
+ }
+
+ XSDTypeInfo::XSDTypeInfo(const TypeDefinitionImpl& typeDef)
+ : typeDefinition(typeDef)
+ {
+ }
+
+
+ XSDTypeInfo::~XSDTypeInfo()
+ {
+
+ }
+ }
+}
+// end - namespace sdo
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.h
new file mode 100644
index 0000000000..596766368c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XSDTypeInfo.h
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _XSDTypeInfo_H_
+#define _XSDTypeInfo_H_
+
+#include "commonj/sdo/disable_warn.h"
+
+#include "commonj/sdo/DASValue.h"
+#include "commonj/sdo/TypeDefinitionImpl.h"
+
+namespace commonj
+{
+ namespace sdo
+ {
+ /**
+ *
+ * This holds a type definition during the parsing process
+ * when all types need to be read and stored prior to creation
+ * within the data factory.
+ */
+
+ class XSDTypeInfo : public DASValue
+ {
+ public:
+ XSDTypeInfo();
+ XSDTypeInfo(const TypeDefinitionImpl& typeDef);
+ virtual ~XSDTypeInfo();
+ const TypeDefinitionImpl& getTypeDefinition() {return typeDefinition;}
+
+ private:
+ TypeDefinitionImpl typeDefinition;
+ };
+ }
+}
+#endif //_XSDTypeInfo_H_
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.cpp
new file mode 100644
index 0000000000..c53c577c2d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.cpp
@@ -0,0 +1,50 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#include "commonj/sdo/XpathHelper.h"
+
+#include <string.h>
+
+namespace commonj{
+namespace sdo{
+
+/**
+ *
+ * will provide utilities to help with xpath parsing
+ */
+
+/** isIndexed - true if [] or .
+ *
+ * Returns true if the path has an index, indicating a many valued
+ * property at the end of the path.
+ */
+
+
+const bool XpathHelper::isIndexed(const char* path)
+{
+ const char * c = strrchr(path,'/');
+ if (c == 0)c = path;
+ if (strchr(c,'[')) return true;
+ if (strchr(c,'.')) return true;
+ return false;
+}
+
+};
+};
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.h
new file mode 100644
index 0000000000..862c89d307
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/XpathHelper.h
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef XPATH_HELPER_H
+#define XPATH_HELPER_H
+
+#include "commonj/sdo/export.h"
+
+namespace commonj{
+namespace sdo{
+
+/**
+ *
+ * XpathHelper provides utilities to help with xpath parsing
+ */
+
+class XpathHelper
+{
+ public:
+
+ virtual ~XpathHelper();
+
+ /** isIndexed - true if [] or .
+ *
+ * Returns true if the path has an index, indicating a many valued
+ * property at the end of the path.
+ */
+
+ static SDO_API const bool isIndexed(const char * path);
+
+};
+};
+};
+
+
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/disable_warn.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/disable_warn.h
new file mode 100644
index 0000000000..7743ab55de
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/disable_warn.h
@@ -0,0 +1,27 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#ifndef _DISABLE_WARN_H_
+#define _DISABLE_WARN_H_
+
+#if defined(WIN32) || defined (_WINDOWS)
+#pragma warning(disable: 4786)
+#endif
+
+#endif
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/export.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/export.h
new file mode 100644
index 0000000000..51470a585b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/src/commonj/sdo/export.h
@@ -0,0 +1,47 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:15 $ */
+
+#define SDO4CPP_VERSION 20051202
+
+#if defined(WIN32) || defined (_WINDOWS)
+
+#define int64_t __int64
+
+#ifdef SDO_EXPORTS
+#include "commonj/sdo/disable_warn.h"
+# define SDO_API __declspec(dllexport)
+# define SDO_SPI __declspec(dllexport)
+# define EXPIMP
+#else
+# define SDO_API __declspec(dllimport)
+# define SDO_SPI __declspec(dllimport)
+# define EXPIMP extern
+#endif
+
+#else
+#include <sys/time.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <string.h>
+#include <wchar.h>
+# define SDO_API
+# define SDO_SPI
+# define EXPIMP
+#endif
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtbuild b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtbuild
new file mode 100644
index 0000000000..17ebd43324
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtbuild
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?fileVersion 3.0.0?>
+
+<ManagedProjectBuildInfo>
+<project id="tuscany_sdo_test.cdt.managedbuild.target.gnu.exe.841259234" name="Executable (Gnu)" projectType="cdt.managedbuild.target.gnu.exe">
+<configuration artifactName="tuscany_sdo_test" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.exe.debug.1698024418" name="Debug" parent="cdt.managedbuild.config.gnu.exe.debug">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.953243590" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.907958268" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.829396762" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
+<option id="gnu.cpp.compiler.option.preprocessor.def.1484983546" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
+<listOptionValue builtIn="false" value="_DEBUG"/>
+</option>
+<option id="gnu.cpp.compiler.option.include.paths.1537573101" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${project_loc}"/>
+<listOptionValue builtIn="false" value="${project_loc}/../src"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.1017750405" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.655773583" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
+<option id="gnu.cpp.link.option.libs.684950781" superClass="gnu.cpp.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="tuscany_sdo"/>
+<listOptionValue builtIn="false" value="xml2"/>
+</option>
+<option id="gnu.cpp.link.option.paths.507838253" superClass="gnu.cpp.link.option.paths" valueType="stringList">
+<listOptionValue builtIn="false" value="${project_loc}/../src/Debug"/>
+<listOptionValue builtIn="false" value="${LIBXML2_LIB}"/>
+</option>
+</tool>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.exe.debug.680127870" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug"/>
+<macros/>
+</toolChain>
+</configuration>
+<configuration artifactName="tuscany_sdo_test" cleanCommand="rm -rf" description="" errorParsers="org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GASErrorParser" id="cdt.managedbuild.config.gnu.exe.release.1720042110" name="Release" parent="cdt.managedbuild.config.gnu.exe.release">
+<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.1008721532" name="GCC Tool Chain" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1386443308" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.666703052" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
+<option id="gnu.cpp.compiler.option.include.paths.1488475926" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
+<listOptionValue builtIn="false" value="${project_loc}/../src"/>
+<listOptionValue builtIn="false" value="${project_loc}"/>
+</option>
+</tool>
+<tool command="gcc" id="cdt.managedbuild.tool.gnu.c.linker.exe.release.87016949" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
+<tool command="g++" id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.4247100" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
+<option id="gnu.cpp.link.option.libs.73989122" superClass="gnu.cpp.link.option.libs" valueType="libs">
+<listOptionValue builtIn="false" value="xml2"/>
+<listOptionValue builtIn="false" value="tuscany_sdo"/>
+</option>
+<option id="gnu.cpp.link.option.paths.984022714" superClass="gnu.cpp.link.option.paths" valueType="stringList">
+<listOptionValue builtIn="false" value="${project_loc}/../src/Debug"/>
+<listOptionValue builtIn="false" value="${LIBXML2_LIB}"/>
+</option>
+</tool>
+<tool command="as" id="cdt.managedbuild.tool.gnu.assembler.exe.release.937369355" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release"/>
+<macros/>
+</toolChain>
+</configuration>
+<macros/>
+</project>
+</ManagedProjectBuildInfo>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtproject b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtproject
new file mode 100644
index 0000000000..48a12e6664
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.cdtproject
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse-cdt version="2.0"?>
+
+<cdtproject id="org.eclipse.cdt.managedbuilder.core.managedMake">
+<extension id="org.eclipse.cdt.managedbuilder.core.ManagedBuildManager" point="org.eclipse.cdt.core.ScannerInfoProvider"/>
+<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
+<extension id="org.eclipse.cdt.core.domsourceindexer" point="org.eclipse.cdt.core.CIndexer"/>
+<data>
+<item id="org.eclipse.cdt.core.pathentry">
+<pathentry kind="src" path=""/>
+<pathentry kind="out" path=""/>
+<pathentry kind="con" path="org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER"/>
+</item>
+</data>
+</cdtproject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.project b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.project
new file mode 100644
index 0000000000..32920ef4cf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.project
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tuscany_sdo_test</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.cdt.core.cnature</nature>
+ <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+ <nature>org.eclipse.cdt.core.ccnature</nature>
+ </natures>
+</projectDescription>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs
new file mode 100644
index 0000000000..0c77f0af0f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/.settings/org.eclipse.cdt.managedbuilder.core.prefs
@@ -0,0 +1,9 @@
+#Wed Feb 15 16:37:24 GMT 2006
+eclipse.preferences.version=1
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.debug.1698024418=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentInclude/cdt.managedbuild.config.gnu.exe.release.1720042110=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="CPATH" operation\="remove"/>\n<variable name\="CPLUS_INCLUDE_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.debug.1698024418=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/buildEnvironmentLibrary/cdt.managedbuild.config.gnu.exe.release.1720042110=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable name\="LIBRARY_PATH" operation\="remove"/>\n</environment>\n
+environment/project=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment/>\n
+environment/project/cdt.managedbuild.config.gnu.exe.debug.1698024418=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="" name\="LIBXML2_LIB" operation\="replace" value\="/usr/lib"/>\n</environment>\n
+environment/project/cdt.managedbuild.config.gnu.exe.release.1720042110=<?xml version\="1.0" encoding\="UTF-8"?>\n<environment>\n<variable delimiter\="" name\="LIBXML2_LIB" operation\="replace" value\="/usr/lib"/>\n</environment>\n
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog-out.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog-out.xsd
new file mode 100644
index 0000000000..c56a4c341e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog-out.xsd
@@ -0,0 +1,70 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns1="customerNS" xmlns:tns2="orderNS" xmlns:tns="catalogNS" targetNamespace="catalogNS">
+<xsd:element name="catalogType" type="CatalogType"/>
+<xsd:complexType name="CatalogType">
+<xsd:sequence>
+<xsd:element name="item" type="tns2:item" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="addressType" type="tns1:AddressType"/>
+<xsd:complexType name="tns1:AddressType">
+<xsd:sequence>
+<xsd:element name="street" type="xsd:String" minOccurs="0"/>
+<xsd:element name="city" type="xsd:String" minOccurs="0"/>
+<xsd:element name="state" type="xsd:String" minOccurs="0"/>
+<xsd:element name="zip" type="xsd:String" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="customerType" type="tns1:CustomerType"/>
+<xsd:complexType name="tns1:CustomerType">
+<xsd:sequence>
+<xsd:element name="customerId" type="xsd:String" minOccurs="0"/>
+<xsd:element name="name" type="xsd:String" minOccurs="0"/>
+<xsd:element name="shipping" type="tns1:AddressType" minOccurs="0"/>
+<xsd:element name="payment" type="tns1:PaymentType" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="paymentType" type="tns1:PaymentType"/>
+<xsd:complexType name="tns1:PaymentType">
+<xsd:sequence>
+<xsd:element name="accountNo" type="xsd:String" minOccurs="0"/>
+<xsd:element name="bank" type="xsd:String" minOccurs="0"/>
+<xsd:element name="securityCode" type="xsd:String" minOccurs="0"/>
+<xsd:element name="amount" type="xsd:float" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="rootType" type="tns1:RootType"/>
+<xsd:complexType name="tns1:RootType">
+<xsd:sequence>
+<xsd:element name="customer" type="tns1:CustomerType" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:simpleType name="tns2:OrderStatus">
+<xsd:restriction base="xsd:String"/>
+</xsd:simpleType>
+<xsd:element name="orderType" type="tns2:OrderType"/>
+<xsd:complexType name="tns2:OrderType">
+<xsd:sequence>
+<xsd:element name="orderId" type="xsd:String" minOccurs="0"/>
+<xsd:element name="status" type="tns2:OrderStatus" minOccurs="0"/>
+<xsd:element name="item" type="tns2:item" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="customer" type="tns1:CustomerType" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="rootType" type="tns2:RootType"/>
+<xsd:complexType name="tns2:RootType">
+<xsd:sequence>
+<xsd:element name="order" type="tns2:OrderType" minOccurs="0"/>
+<xsd:element name="item" type="tns2:item" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="item" type="tns2:item"/>
+<xsd:complexType name="tns2:item">
+<xsd:sequence>
+<xsd:element name="itemId" type="xsd:integer" minOccurs="0"/>
+<xsd:element name="description" type="xsd:String" minOccurs="0"/>
+<xsd:element name="price" type="xsd:String" minOccurs="0"/>
+<xsd:element name="quantity" type="xsd:integer" minOccurs="0"/>
+<xsd:element name="warehouseId" type="xsd:integer" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xml
new file mode 100644
index 0000000000..809aced5a0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<catalog xmlns="catalogNS" xsi:type="CatalogType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><item xmlns="orderNS"><itemId>1</itemId><description>A Partridge in a Pear Tree</description><price>1.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>2</itemId><description>Turtle Doves</description><price>2.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>3</itemId><description>French Hens</description><price>3.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>4</itemId><description>Calling Birds</description><price>4.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>5</itemId><description>Golden Rings</description><price>5.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>6</itemId><description>Geese a-laying</description><price>6.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>7</itemId><description>Swans a-swimming</description><price>7.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>8</itemId><description>Maids a-milking</description><price>8.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>9</itemId><description>Ladies dancing</description><price>9.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>10</itemId><description>Lords a-leaping</description><price>10.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>11</itemId><description>Pipers piping</description><price>11.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item><item><itemId>12</itemId><description>Drummers drumming</description><price>12.99</price><quantity>0</quantity><warehouseId>1</warehouseId></item></catalog>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xsd
new file mode 100644
index 0000000000..28fd9d2f31
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Catalog.xsd
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cat="catalogNS" xmlns:ord="orderNS" targetNamespace="catalogNS">
+
+ <include schemaLocation="Order.xsd"/>
+
+ <element name="catalog" type="cat:CatalogType"/>
+
+ <complexType name="CatalogType">
+ <sequence>
+ <element maxOccurs="unbounded" ref="ord:item"/>
+ </sequence>
+ </complexType>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Customer.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Customer.xsd
new file mode 100644
index 0000000000..8471db253b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Customer.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cust="customerNS" targetNamespace="customerNS">
+ <element name="customer" type="cust:CustomerType">
+ <complexType name="CustomerType">
+ <sequence>
+ <element name="customerId" type="ID"/>
+ <element name="name" type="string"/>
+ <element name="shipping" type="cust:AddressType">
+ <complexType name="AddressType">
+ <element name="street" type="string"/>
+ <element name="city" type="string"/>
+ <element name="state" type="string"/>
+ <element name="zip" type="string"/>
+ </complexType>
+ </element>
+ <element name="payment" ref="cust:payment"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="payment" type="cust:PaymentType">
+ <complexType name="PaymentType">
+ <element name="paymentId" type="ID"/>
+ <element name="accountNo" type="string"/>
+ <element name="bank" type="string"/>
+ <element name="securityCode" type="string"/>
+ <element name="amount" type="string"/>
+ </complexType>
+ </element>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Order.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Order.xsd
new file mode 100644
index 0000000000..00036ae870
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/47293Order.xsd
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:ord="orderNS" xmlns:cust="customerNS" targetNamespace="orderNS">
+
+ <include schemaLocation="./Customer.xsd"/>
+
+ <element name="orders" type="ord:OrdersType">
+ <complexType name="OrdersType">
+ <sequence>
+ <element name="order" maxOccurs="unbounded" type="ord:OrderType"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="order" type="ord:OrderType">
+ <complexType name="OrderType">
+ <sequence>
+ <element name="orderId" type="ID"/>
+ <element name="status" type="ord:OrderStatus"/>
+ <element name="item" maxOccurs="unbounded" ref="ord:item"/>
+ <element ref="cust:customer"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="item">
+ <complexType>
+ <element name="itemId" type="integer"/>
+ <element name="description" type="string"/>
+ <element name="price" type="string"/>
+ <element name="quantity" type="integer"/>
+ <element name="warehouseId" type="integer"/>
+ </complexType>
+ </element>
+
+ <simpleType name="OrderStatus">
+ <restriction base="string">
+ <enumeration value="NONE"/>
+ <enumeration value="RECEIVED"/>
+ <enumeration value="INVOICED"/>
+ <enumeration value="DISPATCHED"/>
+ <enumeration value="COMPLETED"/>
+ <enumeration value="CANCELLED"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48601.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48601.xsd
new file mode 100644
index 0000000000..a5ef35ed7c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48601.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+<xs:complexType name="product">
+ <xs:sequence>
+ <xs:element name="brand" type="xs:string"/>
+ <xs:element name="size" type="available_sizes"/>
+ </xs:sequence>
+</xs:complexType>
+
+<xs:simpleType name='available_sizes'>
+ <xs:union>
+ <xs:simpleType>
+ <xs:restriction base='nonNegativeInteger'/>
+ </xs:simpleType>
+ <xs:simpleType>
+ <xs:restriction base='string'>
+ <xs:enumeration value='large'/>
+ <xs:enumeration value='small'/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:union>
+</xs:simpleType>
+
+</xs:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xml
new file mode 100644
index 0000000000..19e3ea93fe
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<name
+ xmlns="http://www.wrox.com/name"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchem-Instance"
+ xsi:schemaLocation="http://www.wrox.com/name name.xsd">
+ <first>John</first>
+ <middle>Fitzgerald</middle>
+ <last>Doe</last>
+ <ages>1 2 3</ages>
+</name>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xsd
new file mode 100644
index 0000000000..c06650bba6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48686.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.wrox.com/name"
+ xmlns:tns="http://www.wrox.com/name">
+
+ <element name="name">
+ <complexType>
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ <element name="ages">
+ <simpleType>
+ <list itemType="positiveInteger"/>
+ </simpleType>
+ </element>
+ </sequence>
+ </complexType>
+ </element>
+
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xml
new file mode 100644
index 0000000000..9fe7208345
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<formalname
+ xmlns="TNS"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchem-Instance"
+ xsi:schemaLocation="http://www.wrox.com/name name.xsd"
+ title="Mr.">
+ <last>Doe</last>
+</formalname>
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xsd
new file mode 100644
index 0000000000..1d531f9d11
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736.xsd
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="TNS"
+ xmlns:tns="TNS">
+
+ <complexType name="FormalNameType">
+ <complexContent>
+ <restriction base="tns:NameType">
+ <sequence>
+ <element ref="tns:last"/>
+ </sequence>
+ </restriction>
+ </complexContent>
+ </complexType>
+
+
+ <complexType name="NameType">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ </sequence>
+ <attribute name="title" type="string"/>
+ </complexType>
+
+ <element name="formalname" type="tns:FormalNameType"/>
+ <element name="last" type="string"/>
+
+</schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xml.txt
new file mode 100644
index 0000000000..d7b9d4b8d4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xml.txt
@@ -0,0 +1,42 @@
+***** TYPES AFTER RESOLVE*********************************
+Type:TNS#FormalNameType
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+Type:TNS#NameType
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+Type:TNS#RootType
+Property:formalname of type FormalNameType
+Property:last of type String
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+*******************************END TYPES******************
+===== DataObject contents =====
+first:string:
+
+middle:string:
+
+last:string:Doe
+
+title:string:Mr.
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xsd.txt
new file mode 100644
index 0000000000..822a05ec7f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/48736_xsd.txt
@@ -0,0 +1,29 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:TNS#FormalNameType
+Property:last of type String
+Type:TNS#NameType
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+Type:TNS#RootType
+Property:formalname of type FormalNameType
+Property:last of type String
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Atom1.0.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Atom1.0.xsd
new file mode 100644
index 0000000000..67942de547
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Atom1.0.xsd
@@ -0,0 +1,202 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema targetNamespace="http://www.w3.org/2005/Atom"
+ xmlns="http://www.w3.org/2005/Atom" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd" />
+ <xs:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="xhtml1.xsd" />
+
+ <xs:element name="feed" type="feedType"/>
+ <xs:element name="entry" type="entryType"/>
+
+ <xs:complexType name="feedType">
+ <xs:complexContent>
+ <xs:extension base="sourceType">
+ <xs:sequence>
+ <xs:element name="entry" type="entryType" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:attributeGroup ref="commonAttributes" />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+
+ <xs:complexType name="entryType">
+ <xs:choice maxOccurs="unbounded">
+ <xs:element name="author" type="personConstruct" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="category" type="categoryType" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="content" type="contentType" minOccurs="0" />
+ <xs:element name="contributor" type="personConstruct" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="id" type="idType" />
+ <xs:element name="link" type="linkType" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="published" type="dateConstruct" minOccurs="0" />
+ <xs:element name="rights" type="textConstruct" minOccurs="0" />
+ <xs:element name="source" type="sourceType" minOccurs="0" />
+ <xs:element name="summary" type="textConstruct" maxOccurs="0" />
+ <xs:element name="title" type="textConstruct" />
+ <xs:element name="updated" type="dateConstruct" />
+ <xs:element name="extension" type="extensionType" minOccurs="0" maxOccurs="unbounded" />
+ </xs:choice>
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:complexType>
+
+ <xs:complexType name="sourceType">
+ <xs:choice maxOccurs="unbounded">
+ <xs:element name="author" type="personConstruct" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="category" type="categoryType" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="contributor" type="personConstruct" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="generator" type="generatorType" minOccurs="0" />
+ <xs:element name="icon" type="iconType" minOccurs="0" />
+ <xs:element name="id" type="idType" />
+ <xs:element name="link" type="linkType" minOccurs="0" maxOccurs="unbounded" />
+ <xs:element name="logo" type="logoType" minOccurs="0" />
+ <xs:element name="rights" type="textConstruct" minOccurs="0" />
+ <xs:element name="subtitle" type="textConstruct" minOccurs="0" />
+ <xs:element name="title" type="textConstruct" />
+ <xs:element name="updated" type="dateConstruct" />
+ <xs:element name="extension" type="extensionType" minOccurs="0" maxOccurs="unbounded" />
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="personConstruct">
+ <xs:choice maxOccurs="unbounded">
+ <xs:element name="name" type="xs:string" />
+ <xs:element name="uri" type="uriType" minOccurs="0" />
+ <xs:element name="email" type="emailType" minOccurs="0" />
+ <xs:element name="extension" type="extensionType" minOccurs="0" maxOccurs="unbounded" />
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="categoryType">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="term" type="xs:string" use="required" />
+ <xs:attribute name="scheme" type="uriType" />
+ <xs:attribute name="label" type="xs:string" />
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:extension>
+ </xs:simpleContent>
+ <!-- TODO: undefinedContent - beyond string? -->
+ </xs:complexType>
+
+ <xs:complexType name="generatorType">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="uri" type="uriType" />
+ <xs:attribute name="version" type="xs:string" />
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="iconType">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="idType">
+ <xs:simpleContent>
+ <xs:extension base="uriType">
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="logoType">
+ <xs:simpleContent>
+ <xs:extension base="uriType">
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:complexType name="contentType" mixed="true">
+ <xs:sequence>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:attribute name="type" type="xs:string" />
+ <xs:attribute name="src" type="uriType" minOccurs="0" />
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:complexType>
+
+ <xs:complexType name="linkType">
+ <xs:simpleContent>
+ <xs:extension base="xs:string">
+ <xs:attribute name="href" type="uriType" use="required" />
+ <xs:attribute name="rel" type="uriType" /> <!-- { atomNCName | atomUri }? -->
+ <xs:attribute name="type" type="mediaType" />
+ <xs:attribute name="hreflang" type="languageTagType" />
+ <xs:attribute name="title" type="xs:string" />
+ <xs:attribute name="length" type="xs:string" />
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="languageTagType">
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="mediaType">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=".+/.+" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="emailType">
+ <xs:restriction base="xs:string">
+ <xs:pattern value=".+@.+" />
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:complexType name="textConstruct" mixed="true">
+ <xs:sequence>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:attribute name="type" type="xs:string" />
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:complexType>
+
+ <xs:complexType name="dateConstruct">
+ <xs:simpleContent>
+ <xs:extension base="xs:dateTime">
+ <xs:attributeGroup ref="commonAttributes"/>
+ </xs:extension>
+ </xs:simpleContent>
+ </xs:complexType>
+
+ <xs:simpleType name="uriType" type="xs:string" />
+
+ <xs:complexType name="extensionType" mixed="true">
+ <xs:sequence>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded" />
+ </xs:sequence>
+ <xs:anyAttribute />
+ </xs:complexType>
+
+ <xs:attributeGroup name="commonAttributes">
+ <xs:attribute ref="xml:base" />
+ <xs:attribute ref="xml:lang" />
+ <xs:anyAttribute/>
+ </xs:attributeGroup>
+
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xml
new file mode 100644
index 0000000000..981287237a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<Holiday xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="TravelBookingSchema.xsd">
+ <Flight flightNo="BA243">
+ <Departure>NCE</Departure>
+ <Arrival>PAR</Arrival>
+ <ThisJustAintPartOfTheSchema>DATA</ThisJustAintPartOfTheSchema>
+ </Flight>
+</Holiday>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xsd
new file mode 100644
index 0000000000..84af953576
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/BadElement.xsd
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:element name="Holiday">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Flight" maxOccurs="unbounded" minOccurs="1"/>
+ <xsd:element ref="Hotel" maxOccurs="unbounded" minOccurs="1"/>
+ <xsd:element ref="Excursion"/>
+ <xsd:element ref="Client"/>
+ <xsd:element ref="Party"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Flight">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Departure" type="xsd:string"/>
+ <xsd:element name="Arrival" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="flightNo" type="xsd:string" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Hotel">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ <xsd:element name="Phone" type="xsd:string"/>
+ <xsd:element ref="Room"/>
+ </xsd:sequence>
+ <xsd:attribute name="cardsAccepted" default="false" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Room">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="booked" use="required" type="xsd:boolean"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Party">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Person" maxOccurs="unbounded" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Person">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Client">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ <xsd:element name="Address" type="xsd:string"/>
+ <xsd:element name="CreditCard" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Excursion">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Title" type="xsd:string"/>
+ <xsd:element name="Cost" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Name" type="xsd:string"/>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Catalog.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Catalog.xsd
new file mode 100644
index 0000000000..23f3363394
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Catalog.xsd
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cat="catalogNS" targetNamespace="catalogNS">
+
+ <include schemaLocation="./Order.xsd"/>
+
+ <element name="catalog" type="cat:CatalogType"/>
+
+ <complexType name="CatalogType">
+ <sequence>
+ <element maxOccurs="unbounded" ref="ord:item"/>
+ </sequence>
+ </complexType>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Customer.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Customer.xsd
new file mode 100644
index 0000000000..670a804109
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Customer.xsd
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cust="customerNS" targetNamespace="customerNS">
+ <element name="customer" type="cust:CustomerType">
+ <complexType name="CustomerType">
+ <sequence>
+ <element name="customerId" type="ID"/>
+ <element name="name" type="string"/>
+ <element name="shipping" type="cust:AddressType">
+ <complexType name="AddressType">
+ <element name="street" type="string"/>
+ <element name="city" type="string"/>
+ <element name="state" type="string"/>
+ <element name="zip" type="string"/>
+ </complexType>
+ </element>
+ <element name="payment" type="cust:PaymentType">
+ <complexType name="PaymentType">
+ <element name="accountNo" type="string"/>
+ <element name="bank" type="string"/>
+ <element name="securityCode" type="string"/>
+ <element name="amount" type="float"/>
+ </complexType>
+ </element>
+ </sequence>
+ </complexType>
+ </element>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Makefile.am
new file mode 100644
index 0000000000..09c11205d7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Makefile.am
@@ -0,0 +1,16 @@
+prgbindir=$(prefix)/bin/test
+prgbin_PROGRAMS = tuscany_sdo_test
+SUBDIRS =
+AM_CPPFLAGS = $(CPPFLAGS)
+tuscany_sdo_test_SOURCES = sdotest.cpp sdotest2.cpp utils.cpp main.cpp
+
+EXTRA_DIST = *.xsd *.xml *.txt *.wsdl test/*.* test2/*.* t2/*.* g/*.* bugs/1/*.*
+noinst_HEADERS=sdotest.h
+
+tuscany_sdo_test_LDADD = \
+ -L$(top_builddir)/runtime/core/src/commonj/sdo -ltuscany_sdo \
+ -L${LIBXML2_LIB} -lxml2
+
+
+INCLUDES = -I$(top_builddir)/runtime/core/test \
+ -I$(top_builddir)/runtime/core/src
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xml
new file mode 100644
index 0000000000..920ef3c8bb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<Holiday xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="TravelBookingSchema.xsd">
+ <Flight flightNo="BA243">
+ <Departure>ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÃÂÀ©╣║╗â•Â¢Â¥â”└┴┬├─┼ãÃ╚╔╔╩╦╠â•â•¬Â¤Ã°ÃÊËÈıÃÃŽÃŽÃ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýï´­±‗¾¶§÷¸°¨·¹³²■ </Departure>
+ <Arrival>Pound:£ Dollar:$ Euro:Ç or █</Arrival>
+ </Flight>
+</Holiday>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xsd
new file mode 100644
index 0000000000..84af953576
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/OddChars.xsd
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:element name="Holiday">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Flight" maxOccurs="unbounded" minOccurs="1"/>
+ <xsd:element ref="Hotel" maxOccurs="unbounded" minOccurs="1"/>
+ <xsd:element ref="Excursion"/>
+ <xsd:element ref="Client"/>
+ <xsd:element ref="Party"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Flight">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Departure" type="xsd:string"/>
+ <xsd:element name="Arrival" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="flightNo" type="xsd:string" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Hotel">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ <xsd:element name="Phone" type="xsd:string"/>
+ <xsd:element ref="Room"/>
+ </xsd:sequence>
+ <xsd:attribute name="cardsAccepted" default="false" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Room">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="booked" use="required" type="xsd:boolean"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Party">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Person" maxOccurs="unbounded" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Person">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Client">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ <xsd:element name="Address" type="xsd:string"/>
+ <xsd:element name="CreditCard" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Excursion">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Title" type="xsd:string"/>
+ <xsd:element name="Cost" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Name" type="xsd:string"/>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Order.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Order.xsd
new file mode 100644
index 0000000000..4dbbad9507
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Order.xsd
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:ord="orderNS" xmlns:cust="customerNS" targetNamespace="orderNS">
+
+<include schemaLocation="./Customer.xsd"/>
+
+<element name="order" type="ord:OrderType">
+ <complexType name="OrderType">
+ <sequence>
+ <element name="orderId" type="ID"/>
+ <element name="status" type="ord:OrderStatus"/>
+ <element name="item" maxOccurs="unbounded" ref="ord:item"/>
+ <element ref="cust:customer"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="item">
+ <complexType>
+ <element name="itemId" type="integer"/>
+ <element name="description" type="string"/>
+ <element name="price" type="string"/>
+ <element name="quantity" type="integer"/>
+ <element name="warehouseId" type="integer"/>
+ </complexType>
+ </element>
+
+ <simpleType name="OrderStatus">
+ <restriction base="string">
+ <enumeration value="NONE"/>
+ <enumeration value="RECEIVED"/>
+ <enumeration value="INVOICED"/>
+ <enumeration value="DISPATCHED"/>
+ <enumeration value="COMPLETED"/>
+ <enumeration value="CANCELLED"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/SdoGenerate.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/SdoGenerate.cpp
new file mode 100644
index 0000000000..375f72d3d8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/SdoGenerate.cpp
@@ -0,0 +1,166 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: SdoGenerate.cpp,v 1.2 2006/03/16 12:53:57 slattery Exp $ */
+
+/* work in progress on generation of structures from sdos*/
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+using namespace std;
+
+
+
+#include "sdotest.h"
+
+
+
+using namespace commonj::sdo;
+
+
+char* sdotest::convert(const char* uri)
+{
+ char* newval = (char*)malloc(strlen(uri) + 1);
+ strcpy(newval,uri);
+
+ char* c;
+ while ((c = strchr(newval,'.')) != 0)
+ {
+ char * tmp = (char*)malloc(strlen(newval) + 5);
+ strncpy(tmp,newval, c - newval);
+ tmp[c-newval] = 0;
+ strcat(tmp,"<dot>");
+ strcat(tmp,c+1);
+ free(newval);
+ newval = tmp;
+ }
+ return newval;
+}
+
+
+void sdotest::generate(DataFactoryPtr fac)
+{
+ try {
+
+ TypeList tl = fac->getTypes();
+
+
+ cout << "// Generated structures " << endl;
+
+ for (int i=0;i<tl.size();i++)
+ {
+
+ if (!strcmp(tl[i].getURI(),"commonj.sdo")) continue;
+
+ char *uri = convert(tl[i].getURI());
+
+ cout << "typedef struct _";
+ if (uri) cout << uri << "_";
+ cout << tl[i].getName();
+
+ cout << "{" << endl;
+
+
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ if (pl[j].isMany())
+ {
+ cout << "struct _";
+ char *v = convert(pl[j].getType().getURI());
+ if (v) cout << v << "_";
+ cout << pl[j].getType().getName();
+ cout << "List *" << pl[j].getName() << ";" << endl;
+ if (v) free(v);
+ }
+ else
+ {
+ if (pl[j].getType().isDataType())
+ {
+ switch (pl[j].getTypeEnum())
+ {
+ case Type::BooleanType:
+
+ cout << "bool " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::ByteType:
+ cout << "char " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::BytesType:
+ cout << "char* " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::CharacterType:
+ cout << "wchar " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::DateType:
+ cout << "time_t " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::DoubleType:
+ cout << "long double " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::FloatType:
+ cout << "float " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::IntegerType:
+ cout << "long " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::LongType:
+ cout << "int64_t " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::ShortType:
+ cout << "short " << pl[j].getName() << ";" << endl;
+ break;
+ case Type::StringType:
+ case Type::UriType:
+ cout << "wchar_t* " << pl[j].getName() << ";" << endl;
+ break;
+ default:
+ cout << "// unknown primitive: " << pl[j].getName() << endl;
+ break;
+ }
+ }
+ else
+ {
+ cout << "struct _";
+ char *v = convert(pl[j].getType().getURI());
+ if (v) cout << v << "_";
+ cout << pl[j].getType().getName();
+ cout << " *" << pl[j].getName() << ";" << endl;
+ if (v) free(v);
+ }
+ }
+ }
+
+ cout << "} ";
+ if (uri) cout << uri << "_";
+ cout << tl[i].getName() << ";" << endl;
+ if (uri) free(uri);
+
+ }
+
+ cout << "// generated Accessors" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in Generation" << endl;
+ cout << e << endl;
+ }
+}
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/StockQuoteService.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/StockQuoteService.wsdl
new file mode 100644
index 0000000000..4917cde583
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/StockQuoteService.wsdl
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:s="http://www.w3.org/2001/XMLSchema"
+ xmlns:s0="http://swanandmokashi.com"
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
+ xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+ <types>
+ <s:schema elementFormDefault="qualified"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns:s="http://www.w3.org/2001/XMLSchema">
+ <s:element name="GetQuotes">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="QuoteTicker" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuotesResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="GetQuotesResult" type="s0:ArrayOfQuote" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:complexType name="ArrayOfQuote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="unbounded"
+ name="Quote" type="s0:Quote" />
+ </s:sequence>
+ </s:complexType>
+ <s:complexType name="Quote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="CompanyName" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockTicker" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockQuote" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="LastUpdated" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Change"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="OpenPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayHighPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayLowPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Volume"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="MarketCap" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="YearRange" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ <s:element name="ArrayOfQuote" nillable="true"
+ type="s0:ArrayOfQuote" />
+ </s:schema>
+ </types>
+ <message name="GetQuotesSoapIn">
+ <part name="parameters" element="s0:GetQuotes" />
+ </message>
+ <message name="GetQuotesSoapOut">
+ <part name="parameters" element="s0:GetQuotesResponse" />
+ </message>
+ <message name="GetQuotesHttpGetIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpGetOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <message name="GetQuotesHttpPostIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpPostOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <portType name="StockQuotesSoap">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesSoapIn" />
+ <output name="GetQuotes" message="s0:GetQuotesSoapOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpGet">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpGetIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpGetOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpPost">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpPostIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpPostOut" />
+ </operation>
+ </portType>
+ <binding name="StockQuotesSoap" type="s0:StockQuotesSoap">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+ style="document" />
+ <operation name="GetStockQuotes">
+ <soap:operation
+ soapAction="http://swanandmokashi.com/GetQuotes" style="document" />
+ <input name="GetQuotes">
+ <soap:body use="literal" />
+ </input>
+ <output name="GetQuotes">
+ <soap:body use="literal" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpGet" type="s0:StockQuotesHttpGet">
+ <http:binding verb="GET" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <http:urlEncoded />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpPost" type="s0:StockQuotesHttpPost">
+ <http:binding verb="POST" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <mime:content type="application/x-www-form-urlencoded" />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <service name="StockQuotes">
+ <port name="StockQuotesSoap" binding="s0:StockQuotesSoap">
+ <soap:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpGet"
+ binding="s0:StockQuotesHttpGet">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpPost"
+ binding="s0:StockQuotesHttpPost">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ </service>
+</definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style1.xsd
new file mode 100644
index 0000000000..8ff9357ef9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style1.xsd
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:lib="libraryNS" targetNamespace="libraryNS">
+
+ <element name="character">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="author">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="isbn">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="title">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="available">
+ <complexType>
+ <element name="isInPrint" type="boolean"/>
+ </complexType>
+ </element>
+
+<element name="library">
+ <complexType >
+ <sequence>
+ <element name="book" maxOccurs="unbounded">
+ <complexType>
+ <sequence>
+ <element ref="isbn"/>
+ <element ref="title"/>
+ <element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute ref="id"/>
+ <attribute ref="available"/>
+ </complexType>
+ </element>
+ </sequence>
+ </complexType>
+ </element>
+ </schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style2.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style2.xsd
new file mode 100644
index 0000000000..651a098956
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style2.xsd
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:lib="libraryNS" targetNamespace="libraryNS">
+
+ <element name="character">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="author">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="isbn">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="title">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="available">
+ <complexType>
+ <element name="isInPrint" type="boolean"/>
+ </complexType>
+ </element>
+
+<element name="book">
+ <complexType>
+ <sequence>
+ <element ref="isbn"/>
+ <element ref="title"/>
+ <element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute ref="id"/>
+ <attribute ref="available"/>
+ </complexType>
+</element>
+
+ <element name="library">
+ <complexType >
+ <sequence>
+ <element name="book" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+ </element>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style3.xsd
new file mode 100644
index 0000000000..af224db483
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style3.xsd
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:lib="libraryNS" targetNamespace="libraryNS">
+
+
+ <element name="character">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="author">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="isbn">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="title">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="available">
+ <complexType>
+ <element name="isInPrint" type="boolean"/>
+ </complexType>
+ </element>
+
+ <complexType name="bookType" >
+ <sequence>
+ <element ref="isbn"/>
+ <element ref="title"/>
+ <element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute ref="id"/>
+ <attribute ref="available"/>
+ </complexType>
+
+
+ <element name="library">
+ <complexType >
+ <sequence>
+ <element name="book" type="lib:bookType" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+ </element>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style4.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style4.xsd
new file mode 100644
index 0000000000..8ff8547f50
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/Style4.xsd
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:lib="libraryNS" targetNamespace="libraryNS">
+
+ <group name="bookGroup">
+ <sequence>
+ <element name="book">
+ <complexType >
+ <sequence>
+ <element ref="isbn"/>
+ <element ref="title"/>
+ <element ref="author" minOccurs="0" maxOccurs="unbounded"/>
+ <element ref="character" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute ref="id"/>
+ <attribute ref="available"/>
+ </complexType>
+ </element>
+ </sequence>
+ </group>
+
+
+ <element name="character">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="author">
+ <complexType>
+ <element name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="isbn">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="title">
+ <complexType>
+ <element name="value" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="available">
+ <complexType>
+ <element name="isInPrint" type="boolean"/>
+ </complexType>
+ </element>
+
+ <element name="library">
+ <complexType >
+ <sequence>
+ <group ref="lib:bookGroup" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+ </element>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingSchema.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingSchema.xsd
new file mode 100644
index 0000000000..84af953576
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingSchema.xsd
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+ <xsd:element name="Holiday">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Flight" maxOccurs="unbounded" minOccurs="1"/>
+ <xsd:element ref="Hotel" maxOccurs="unbounded" minOccurs="1"/>
+ <xsd:element ref="Excursion"/>
+ <xsd:element ref="Client"/>
+ <xsd:element ref="Party"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Flight">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Departure" type="xsd:string"/>
+ <xsd:element name="Arrival" type="xsd:string"/>
+ </xsd:sequence>
+ <xsd:attribute name="flightNo" type="xsd:string" use="required"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Hotel">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ <xsd:element name="Phone" type="xsd:string"/>
+ <xsd:element ref="Room"/>
+ </xsd:sequence>
+ <xsd:attribute name="cardsAccepted" default="false" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Room">
+ <xsd:complexType>
+ <xsd:simpleContent>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="booked" use="required" type="xsd:boolean"/>
+ </xsd:extension>
+ </xsd:simpleContent>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Party">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Person" maxOccurs="unbounded" minOccurs="1"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Person">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Client">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element ref="Name"/>
+ <xsd:element name="Address" type="xsd:string"/>
+ <xsd:element name="CreditCard" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Excursion">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="Title" type="xsd:string"/>
+ <xsd:element name="Cost" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="Name" type="xsd:string"/>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingUsingSchema.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingUsingSchema.xml
new file mode 100644
index 0000000000..80bcad875b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/TravelBookingUsingSchema.xml
@@ -0,0 +1,63 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<Holiday xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:noNamespaceSchemaLocation="TravelBookingSchema.xsd">
+ <Flight flightNo="BA243">
+ <Departure>LHR</Departure>
+ <Arrival>SNG</Arrival>
+ </Flight>
+ <Flight flightNo="SG561">
+ <Departure>SNG</Departure>
+ <Arrival>LHR</Arrival>
+ </Flight>
+ <Hotel cardsAccepted="true">
+ <Name>Excelsior</Name>
+ <Phone>222-3333</Phone>
+ <Room booked="true">303</Room>
+ </Hotel>
+ <Hotel>
+ <Name>Seedy Lodge</Name>
+ <Phone>888-9999</Phone>
+ <Room booked="true">14</Room>
+ </Hotel>
+ <Hotel cardsAccepted="true">
+ <Name>Hilton</Name>
+ <Phone>444-5555</Phone>
+ <Room booked="false">456</Room>
+ <foo>foo</foo>
+ </Hotel>
+ <Excursion>
+ <Title>Bird Baths of Singapore</Title>
+ <Cost>50</Cost>
+ </Excursion>
+ <Client>
+ <Name>Steve</Name>
+ <Address>134 Shirley Road</Address>
+ <CreditCard>1234-8908-6543-900</CreditCard>
+ </Client>
+ <Party>
+ <Person>
+ <Name>John</Name>
+ </Person>
+ <Person>
+ <Name>Jane</Name>
+ </Person>
+ <Person>
+ <Name>Bill</Name>
+ </Person>
+ </Party>
+</Holiday>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/axis.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/axis.xsd
new file mode 100644
index 0000000000..3ea0033a7c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/axis.xsd
@@ -0,0 +1,36 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="axis" targetNamespace="axis">
+<xsd:element name="ItemSearch" >
+ <xsd:complexType >
+ <xsd:sequence>
+<xsd:element name="SubscriptionId" type="xsd:string" minOccurs="0" />
+<xsd:element name="AssociateTag" type="xsd:string" minOccurs="0" />
+<xsd:element name="XMLEscaping" type="xsd:string" minOccurs="0" />
+<xsd:element name="Validate" type="xsd:string" minOccurs="0" />
+<xsd:element name="Shared" type="tns:ItemSearchRequest" minOccurs="0" />
+<xsd:element name="Request" type="tns:ItemSearchRequest" minOccurs="0" maxOccurs="unbounded" />
+</xsd:sequence>
+</xsd:complexType>
+</xsd:element>
+ <xsd:complexType name="ItemSearchRequest">
+ <xsd:sequence>
+<xsd:element name="Keywords" type="xsd:string" minOccurs="0" />
+<xsd:element name="SearchIndex" type="xsd:string" minOccurs="0" />
+</xsd:sequence>
+</xsd:complexType>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xml
new file mode 100644
index 0000000000..84a51b73ec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Eastleigh Borough Council" employeeOfTheMonth="#/CEO"><departments name="Waste Disposal" location="Botley" number="123"><employees name="Alphonse Dodet" SN="E0001"/><employees name="Carl Marx" SN="E0003"/></departments><CEO name="Bridget Jones" SN="E0002" manager="true"/></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xsd
new file mode 100644
index 0000000000..ea75c0c8b9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617.xsd
@@ -0,0 +1 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="companyNS" targetNamespace="companyNS"><xsd:element name="companyType" type="CompanyType"/><xsd:complexType name="CompanyType"><xsd:sequence><xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="CEO" type="tns:EmployeeType" minOccurs="0"/></xsd:sequence><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:IDREF"/></xsd:complexType><xsd:element name="departmentType" type="DepartmentType"/><xsd:complexType name="DepartmentType"><xsd:sequence><xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="name" type="xsd:String" minOccurs="0"/><xsd:element name="location" type="xsd:String" minOccurs="0"/><xsd:element name="number" type="xsd:String" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:element name="employeeType" type="EmployeeType"/><xsd:complexType name="EmployeeType"><xsd:sequence><xsd:element name="name" type="xsd:String" minOccurs="0"/><xsd:element name="SN" type="xsd:String" minOccurs="0"/><xsd:element name="manager" type="xsd:boolean" minOccurs="0"/></xsd:sequence></xsd:complexType></xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xml
new file mode 100644
index 0000000000..3ccd70a40b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<companyType xmlns="companyNS" xsi:type="CompanyType"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="#/CEO">
+<departments name="Shoe">
+<employees name="Sarah Jones"/>
+</departments>
+<CEO name="Fred Smith"/>
+</companyType>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xsd
new file mode 100644
index 0000000000..ae0d3a4bda
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46617b.xsd
@@ -0,0 +1,70 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
+xmlns:tns="companyNS" targetNamespace="companyNS">
+<xsd:element name="employeeType" type="tns:EmployeeType"/>
+<xsd:complexType name="EmployeeType">
+<xsd:sequence>
+<xsd:element name="name" type="xsd:String" minOccurs="0"/>
+<xsd:element name="SN" type="xsd:String" minOccurs="0"/>
+<xsd:element name="manager" type="xsd:boolean" minOccurs="0"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="departmentType" type="tns:DepartmentType"/>
+<xsd:complexType name="DepartmentType">
+<xsd:sequence><xsd:element name="name" type="xsd:String" minOccurs="0"/>
+<xsd:element name="location" type="xsd:String" minOccurs="0"/>
+<xsd:element name="number" type="xsd:integer" minOccurs="0"/>
+<xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+</xsd:complexType>
+<xsd:element name="companyType" type="tns:CompanyType"/>
+<xsd:complexType name="CompanyType" mixed="true">
+<xsd:choice maxOccurs="unbounded">
+<xsd:element name="name" type="xsd:String" minOccurs="0"/>
+<xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="CEO" type="tns:EmployeeType" minOccurs="0"/>
+<xsd:element name="string" type="xsd:String" minOccurs="0"/>
+<xsd:element name="bool" type="xsd:boolean" minOccurs="0"/>
+<xsd:element name="byte" type="xsd:byte" minOccurs="0"/>
+<xsd:element name="bytes" type="xsd:hexBinary" minOccurs="0"/>
+<xsd:element name="char" type="xsd:string" minOccurs="0"/>
+<xsd:element name="date" type="xsd:dateTime" minOccurs="0"/>
+<xsd:element name="double" type="xsd:double" minOccurs="0"/>
+<xsd:element name="float" type="xsd:float" minOccurs="0"/>
+<xsd:element name="int" type="xsd:integer" minOccurs="0"/>
+<xsd:element name="long" type="xsd:long" minOccurs="0"/>
+<xsd:element name="short" type="xsd:short" minOccurs="0"/>
+<xsd:element name="uri" type="xsd:anyURI" minOccurs="0"/>
+<xsd:element name="Mstring" type="xsd:String" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mbool" type="xsd:boolean" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mbyte" type="xsd:byte" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mbytes" type="xsd:hexBinary" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mchar" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mdate" type="xsd:dateTime" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mdouble" type="xsd:double" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mfloat" type="xsd:float" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mint" type="xsd:integer" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mlong" type="xsd:long" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Mshort" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="Muri" type="xsd:anyURI" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:choice>
+<xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/>
+<xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:IDREF"/>
+</xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46633.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46633.txt
new file mode 100644
index 0000000000..da34a5196e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46633.txt
@@ -0,0 +1,8 @@
+A modified of type myspace#Department
+Property employees[(null)] was unset before the change
+Property ints[(null)] was unset before the change
+Property bool was unset before the change
+A modified of type myspace#Department
+Property employees[(null)] was unset before the change
+Property ints[(null)] was unset before the change
+Property bool was unset before the change
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.txt
new file mode 100644
index 0000000000..b228d4052c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp"><departments name="Advanced Technologies" location="NY" number="123"><employees><name>Jane Doe</name><employees xmlns="companyNS" xsi:nil="true"/></employees></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.xml
new file mode 100644
index 0000000000..b228d4052c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46634_out.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp"><departments name="Advanced Technologies" location="NY" number="123"><employees><name>Jane Doe</name><employees xmlns="companyNS" xsi:nil="true"/></employees></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46693.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46693.xsd
new file mode 100644
index 0000000000..8488597741
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b46693.xsd
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="utf-8" ?>
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:s="http://www.w3.org/2001/XMLSchema"
+ xmlns:s0="http://swanandmokashi.com"
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
+ xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
+ targetNamespace="http://swanandmokashi.com"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+ <types>
+ <s:schema elementFormDefault="qualified"
+ targetNamespace="http://swanandmokashi.com">
+ <s:element name="GetQuotes">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="QuoteTicker" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuotesResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="GetQuotesResult" type="s0:ArrayOfQuote" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:complexType name="ArrayOfQuote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="unbounded"
+ name="Quote" type="s0:Quote" />
+ </s:sequence>
+ </s:complexType>
+ <s:complexType name="Quote">
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1"
+ name="CompanyName" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockTicker" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="StockQuote" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="LastUpdated" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Change"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="OpenPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayHighPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="DayLowPrice" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1" name="Volume"
+ type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="MarketCap" type="s:string" />
+ <s:element minOccurs="0" maxOccurs="1"
+ name="YearRange" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ <s:element name="ArrayOfQuote" nillable="true"
+ type="s0:ArrayOfQuote" />
+ </s:schema>
+ </types>
+ <message name="GetQuotesSoapIn">
+ <part name="parameters" element="s0:GetQuotes" />
+ </message>
+ <message name="GetQuotesSoapOut">
+ <part name="parameters" element="s0:GetQuotesResponse" />
+ </message>
+ <message name="GetQuotesHttpGetIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpGetOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <message name="GetQuotesHttpPostIn">
+ <part name="QuoteTicker" type="s:string" />
+ </message>
+ <message name="GetQuotesHttpPostOut">
+ <part name="Body" element="s0:ArrayOfQuote" />
+ </message>
+ <portType name="StockQuotesSoap">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesSoapIn" />
+ <output name="GetQuotes" message="s0:GetQuotesSoapOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpGet">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpGetIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpGetOut" />
+ </operation>
+ </portType>
+ <portType name="StockQuotesHttpPost">
+ <operation name="GetStockQuotes">
+ <input name="GetQuotes" message="s0:GetQuotesHttpPostIn" />
+ <output name="GetQuotes" message="s0:GetQuotesHttpPostOut" />
+ </operation>
+ </portType>
+ <binding name="StockQuotesSoap" type="s0:StockQuotesSoap">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
+ style="document" />
+ <operation name="GetStockQuotes">
+ <soap:operation
+ soapAction="http://swanandmokashi.com/GetQuotes" style="document" />
+ <input name="GetQuotes">
+ <soap:body use="literal" />
+ </input>
+ <output name="GetQuotes">
+ <soap:body use="literal" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpGet" type="s0:StockQuotesHttpGet">
+ <http:binding verb="GET" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <http:urlEncoded />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <binding name="StockQuotesHttpPost" type="s0:StockQuotesHttpPost">
+ <http:binding verb="POST" />
+ <operation name="GetStockQuotes">
+ <http:operation location="/GetQuotes" />
+ <input name="GetQuotes">
+ <mime:content type="application/x-www-form-urlencoded" />
+ </input>
+ <output name="GetQuotes">
+ <mime:mimeXml part="Body" />
+ </output>
+ </operation>
+ </binding>
+ <service name="StockQuotes">
+ <port name="StockQuotesSoap" binding="s0:StockQuotesSoap">
+ <soap:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpGet"
+ binding="s0:StockQuotesHttpGet">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ <port name="StockQuotesHttpPost"
+ binding="s0:StockQuotesHttpPost">
+ <http:address
+ location="http://www.swanandmokashi.com/HomePage/WebServices/StockQuotes.asmx" />
+ </port>
+ </service>
+</definitions>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.txt
new file mode 100644
index 0000000000..d525bd7776
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.txt
@@ -0,0 +1,6 @@
+Property:value
+Property:isPermaLink
+Property:value
+Value:Hello
+Property:isPermaLink
+Value:true
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.xsd
new file mode 100644
index 0000000000..90f78c7398
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137.xsd
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema version="1.1.0"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="guid" minOccurs="0" maxOccurs="1">
+ <xs:complexType>
+ <xs:extension base="xs:string">
+ <xs:attribute name="isPermaLink" use="optional" type="xs:boolean">
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexType>
+ </xs:element>
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137_out.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137_out.xml
new file mode 100644
index 0000000000..1bb06f8f0a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137_out.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<fluid xsi:type="guid" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" isPermaLink="true">Hello</fluid>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.txt
new file mode 100644
index 0000000000..202a17fc21
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.txt
@@ -0,0 +1,31 @@
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:companyNS#CompanyType
+Type:companyNS#DepartmentType
+Type:companyNS#EmployeeType
+Type:companyNS#RootType
+Type:companyNS#guid
+Property:departments
+Property:guid
+Property:name
+Property:employeeOfTheMonth
+Property:departments
+Property:guid
+guid Value:Wilbur
+guid isPermaLink:Property:name
+Property:employeeOfTheMonth
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.xsd
new file mode 100644
index 0000000000..5282a4b4ba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b.xsd
@@ -0,0 +1,55 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:element name="guid" minOccurs="0" maxOccurs="1">
+ <xsd:complexType>
+ <xsd:extension base="xsd:string">
+ <xsd:attribute name="isPermaLink" use="optional" type="xsd:boolean">
+ </xsd:attribute>
+ </xsd:extension>
+ </xsd:complexType>
+ </xsd:element>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b_out.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b_out.xml
new file mode 100644
index 0000000000..28de3c4f9f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47137b_out.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><sdo:changeSummary xmlns:sdo="commonj.sdo"/><guid isPermaLink="true">Wilbur</guid></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47293.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47293.txt
new file mode 100644
index 0000000000..9d571da67c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b47293.txt
@@ -0,0 +1,27 @@
+Type:catalogNS#CatalogTypeType:catalogNS#RootTypeType:commonj.sdo#BigDecimalType:commonj.sdo#BigIntegerType:commonj.sdo#BooleanType:commonj.sdo#ByteType:commonj.sdo#BytesType:commonj.sdo#ChangeSummaryType:commonj.sdo#CharacterType:commonj.sdo#DataObjectType:commonj.sdo#DateType:commonj.sdo#DoubleType:commonj.sdo#FloatType:commonj.sdo#IntegerType:commonj.sdo#LongType:commonj.sdo#OpenDataObjectType:commonj.sdo#ShortType:commonj.sdo#StringType:commonj.sdo#URIType:customerNS#AddressTypeType:customerNS#CustomerTypeType:customerNS#PaymentTypeType:customerNS#RootTypeType:orderNS#OrderStatusType:orderNS#OrderTypeType:orderNS#RootTypeType:orderNS#itemType:catalogNS#CatalogType
+Type:catalogNS#RootType
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:customerNS#AddressType
+Type:customerNS#CustomerType
+Type:customerNS#PaymentType
+Type:customerNS#RootType
+Type:orderNS#OrderStatus
+Type:orderNS#OrderType
+Type:orderNS#RootType
+Type:orderNS#item
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48602.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48602.xsd
new file mode 100644
index 0000000000..dcb288f86a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48602.xsd
@@ -0,0 +1,25 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
+ <xs:element name="address" type="Address"/>
+<xs:complexType name="Address">
+ <xs:sequence>
+<xs:element name="name" type="string"/>
+</xs:sequence>
+</xs:complexType >
+</xs:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xml
new file mode 100644
index 0000000000..ffb7a039d4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<name
+ xmlns="http://www.wrox.com/name"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
+ xsi:schemaLocation="http://www.wrox.com/name name.xsd"
+ title="Mr.">
+ <first>John</first>
+ <middle>Fitzgerald</middle>
+ <last>Doe</last>
+</name>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xsd
new file mode 100644
index 0000000000..0a7c526c02
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.wrox.com/name"
+ xmlns:tns="http://www.wrox.com/name"
+ elementFormDefault="qualified">
+
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+
+ <complexType name="NameType">
+ <sequence>
+ <element ref="tns:first"/>
+ <element ref="tns:middle"/>
+ <element ref="tns:last"/>
+ </sequence>
+ <attribute name="title" type="string"/>
+ </complexType>
+
+ <element name="name" type="tns:NameType"/>
+</schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633_xml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633_xml.txt
new file mode 100644
index 0000000000..7c0425d298
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633_xml.txt
@@ -0,0 +1,10 @@
+===== DataObject contents =====
+first:string:John
+
+middle:string:Fitzgerald
+
+last:string:Doe
+
+title:string:Mr.
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b.xsd
new file mode 100644
index 0000000000..c9bca4a9c3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b.xsd
@@ -0,0 +1,22 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="TNS"
+ xmlns:v="TNS">
+<element name="version" type="string"/>
+</schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b_xsd.txt
new file mode 100644
index 0000000000..0836fda6cd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48633b_xsd.txt
@@ -0,0 +1,31 @@
+***** TESTANY ******************************************
+Type:TNS#RootType
+Property:version of type String
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#NameType
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+Type:http://www.wrox.com/name#RootType
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:name of type NameType
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xml
new file mode 100644
index 0000000000..1edcdf37c1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<name
+ xmlns="http://www.wrox.com/name"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.wrox.com/name name8.xsd"
+ title="Mr.">
+ <first>John</first>
+ <middle>Fitzgerald</middle>
+ <last>Doe</last>
+</name>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xsd
new file mode 100644
index 0000000000..5387611997
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636.xsd
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <group name="NameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ </sequence>
+ </group>
+ <element name="name">
+ <complexType>
+ <group ref="target:NameGroup"/>
+ <attribute name="title" type="string"/>
+ </complexType>
+ </element>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xml.txt
new file mode 100644
index 0000000000..4b5b55ced7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xml.txt
@@ -0,0 +1,36 @@
+***** TYPES AFTER RESOLVE*********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+*******************************END TYPES******************
+===== DataObject contents =====
+first:string:John
+
+middle:string:Fitzgerald
+
+last:string:Doe
+
+title:string:Mr.
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xsd.txt
new file mode 100644
index 0000000000..81ccaee474
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48636_xsd.txt
@@ -0,0 +1,26 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xml
new file mode 100644
index 0000000000..19e3ea93fe
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<name
+ xmlns="http://www.wrox.com/name"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchem-Instance"
+ xsi:schemaLocation="http://www.wrox.com/name name.xsd">
+ <first>John</first>
+ <middle>Fitzgerald</middle>
+ <last>Doe</last>
+ <ages>1 2 3</ages>
+</name>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xsd
new file mode 100644
index 0000000000..c06650bba6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.wrox.com/name"
+ xmlns:tns="http://www.wrox.com/name">
+
+ <element name="name">
+ <complexType>
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ <element name="ages">
+ <simpleType>
+ <list itemType="positiveInteger"/>
+ </simpleType>
+ </element>
+ </sequence>
+ </complexType>
+ </element>
+
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xml.txt
new file mode 100644
index 0000000000..f4899d810e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xml.txt
@@ -0,0 +1,46 @@
+***** TYPES AFTER RESOLVE*********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#ages
+Property:values (many) of type Integer
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:ages (many) of type ages
+*******************************END TYPES******************
+===== DataObject contents =====
+first:string:John
+
+middle:string:Fitzgerald
+
+last:string:Doe
+
+ages: list dataObject[0]=
+===== DataObject contents =====
+values: list integer[0]=1
+
+integer[1]=2
+
+integer[2]=3
+
+===== End DataObject =====
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xsd.txt
new file mode 100644
index 0000000000..df670b8066
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/b48686_xsd.txt
@@ -0,0 +1,28 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#ages
+Property:values (many) of type Integer
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:ages (many) of type ages
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/badelement.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/badelement.txt
new file mode 100644
index 0000000000..f9ddc1e3b1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/badelement.txt
@@ -0,0 +1,2 @@
+BADELEMENT correctly found errors:
+Parser found unknown element ThisJustAintPartOfTheSchema
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups.xsd
new file mode 100644
index 0000000000..d5a27a8cd5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <group name="NameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ </sequence>
+ </group>
+ <attributeGroup name="NameAttributeGroup">
+ <attribute name="firstattribute" type="string"/>
+ <attribute name="secondattribute" type="string"/>
+ <attribute name="thirdattribute" type="string"/>
+ </attributeGroup>
+ <element name="name">
+ <complexType>
+ <group ref="target:NameGroup"/>
+ <attribute name="title" type="string"/>
+ <attributeGroup ref="target:NameAttributeGroup"/>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups_xsd.txt
new file mode 100644
index 0000000000..5d92da21c5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroups_xsd.txt
@@ -0,0 +1,29 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+Property:firstattribute of type String
+Property:secondattribute of type String
+Property:thirdattribute of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename.xsd
new file mode 100644
index 0000000000..4648a9e917
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <group name="NameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ </sequence>
+ </group>
+ <attributeGroup name="NameGroup">
+ <attribute name="firstattribute" type="string"/>
+ <attribute name="secondattribute" type="string"/>
+ <attribute name="thirdattribute" type="string"/>
+ </attributeGroup>
+ <element name="name">
+ <complexType>
+ <group ref="target:NameGroup"/>
+ <attribute name="title" type="string"/>
+ <attributeGroup ref="target:NameGroup"/>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename_xsd.txt
new file mode 100644
index 0000000000..5d92da21c5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bothgroupssamename_xsd.txt
@@ -0,0 +1,29 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+Property:firstattribute of type String
+Property:secondattribute of type String
+Property:thirdattribute of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug2.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug2.txt
new file mode 100644
index 0000000000..aae01a0c9c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug2.txt
@@ -0,0 +1,9 @@
+MObject Property companies
+Property:name:Acme
+End of MObject Property companies
+MObject Property companies
+End of MObject Property companies
+Change summary should have no entries...
+MObject Property companies
+End of MObject Property companies
+Change summary should have no entries...
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.txt
new file mode 100644
index 0000000000..366d41ef02
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Bug45933"><sdo:changeSummary xmlns:sdo="commonj.sdo"><company sdo:ref="#/"><bools>false</bools></company></sdo:changeSummary></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.xml
new file mode 100644
index 0000000000..366d41ef02
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug45933-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Bug45933"><sdo:changeSummary xmlns:sdo="commonj.sdo"><company sdo:ref="#/"><bools>false</bools></company></sdo:changeSummary></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xml
new file mode 100644
index 0000000000..77ccd72ba6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<template:template xmlns:template="http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/" name="CTShop" version="1.0.0">
+ <description>This is my online shop</description>
+ <displayName>The CT Shop</displayName>
+ <templateType>php</templateType>
+ <verifiers/>
+ <globalHelperArguments>
+ </globalHelperArguments>
+ <unboundTemplateParameters name="name" expert="false" multiplicity="1..1">
+ <description>
+ <description>Name for the shop</description>
+ <displayName>Shop Name</displayName>
+ </description>
+ <verifiers>
+ </verifiers>
+ <constraints>
+ </constraints>
+ <defaults>
+ <description></description>
+ <displayName>CT Shop</displayName>
+ <data>CT Shop</data>
+ </defaults>
+ </unboundTemplateParameters>
+ <unboundTemplateParameters name="branding" expert="false" multiplicity="1..1">
+ <description>
+ <description>Colour of background for Shop</description>
+ <displayName>Branding</displayName>
+ </description>
+ <verifiers>
+ </verifiers>
+ <constraints>
+ <description></description>
+ <displayName>Olive</displayName>
+ <data>Olive</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>Lime</displayName>
+ <data>Lime</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>Gray</displayName>
+ <data>Gray</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>Teal</displayName>
+ <data>Teal</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>Silver</displayName>
+ <data>Silver</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>White</displayName>
+ <data>White</data>
+ </constraints>
+ <defaults>
+ <description></description>
+ <displayName>Olive</displayName>
+ <data>Olive</data>
+ </defaults>
+ </unboundTemplateParameters>
+ <unboundTemplateParameters name="catalog" expert="false" multiplicity="1..1">
+ <description>
+ <description>Product Catalog for the shop</description>
+ <displayName>Product Catalog</displayName>
+ </description>
+ <verifiers>
+ </verifiers>
+ <constraints>
+ </constraints>
+ <factory kind="php" name="CatalogFactory">
+ </factory>
+ <defaults>
+ <description></description>
+ <displayName>Catalog</displayName>
+ <data>Catalog</data>
+ </defaults>
+ </unboundTemplateParameters>
+ <unboundTemplateParameters name="cart" expert="false" multiplicity="1..1">
+ <description>
+ <description>Shopping cart for the shop</description>
+ <displayName>Shopping Cart</displayName>
+ </description>
+ <verifiers>
+ </verifiers>
+ <constraints>
+ <description></description>
+ <displayName>Cart</displayName>
+ <data>Cart</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>GCCart</displayName>
+ <data>GCCart</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>MyCart</displayName>
+ <data>MyCart</data>
+ </constraints>
+ <factory kind="php" name="CartFactory">
+ </factory>
+ <defaults>
+ <description></description>
+ <displayName>Cart</displayName>
+ <data>Cart</data>
+ </defaults>
+ </unboundTemplateParameters>
+ <unboundTemplateParameters name="payment" expert="false" multiplicity="1..1">
+ <description>
+ <description>Payment Modules for the shop</description>
+ <displayName>Payment Module</displayName>
+ </description>
+ <verifiers>
+ </verifiers>
+ <constraints>
+ <description></description>
+ <displayName>MyPayPal</displayName>
+ <data>MyPayPal</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>PayPal</displayName>
+ <data>PayPal</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>USPayPal</displayName>
+ <data>USPayPal</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>MyStormPay</displayName>
+ <data>MyStormPay</data>
+ </constraints>
+ <constraints>
+ <description></description>
+ <displayName>StormPay</displayName>
+ <data>StormPay</data>
+ </constraints>
+ <factory kind="php" name="PaymentFactory">
+ </factory>
+ <defaults>
+ <description></description>
+ <displayName>PayPal</displayName>
+ <data>PayPal</data>
+ </defaults>
+ </unboundTemplateParameters>
+ </template:template> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xsd
new file mode 100644
index 0000000000..e6bdb8128b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300.xsd
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:template="http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/"
+ targetNamespace="http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/">
+
+ <element name="template" type="template:TemplateType">
+ <complexType name="TemplateType">
+ <sequence>
+ <element name="displayName" type="string"/>
+ <element name="templateType" type="string"/>
+ <element name="description" type="string"/>
+ <element name="expert" type="string"/>
+ <element name="icon" type="string"/>
+ <element name="verifiers" minOccurs="0" maxOccurs="unbounded" type="string"/>
+ <element name="globalHelperArguments" minOccurs="0" maxOccurs="unbounded" type="string"/>
+ <element name="unboundTemplateParameters" minOccurs="0" maxOccurs="unbounded" ref="template:unboundTemplateParameter"/>
+ <attribute name="name" type="string"/>
+ <attribute name="version" type="string"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="unboundTemplateParameter">
+ <complexType>
+ <element name="description" minOccurs="0" maxOccurs="1" ref="template:description"/>
+ <element name="verifiers" minOccurs="0" maxOccurs="unbounded" type="string"/>
+ <element name="constraints" minOccurs="0" maxOccurs="unbounded" ref="template:value"/>
+ <element name="factory" minOccurs="0" maxOccurs="1" ref="template:factory"/>
+ <element name="defaults" minOccurs="0" maxOccurs="unbounded" ref="template:value"/>
+ <attribute name="name" type="string"/>
+ <attribute name="expert" type="string"/>
+ <attribute name="multiplicity" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="description">
+ <complexType>
+ <element name="description" type="string"/>
+ <element name="displayName" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="factory">
+ <complexType>
+ <attribute name="kind" type="string"/>
+ <attribute name="name" type="string"/>
+ </complexType>
+ </element>
+
+ <element name="valueprovider">
+ <complexType>
+ <element name="values" minOccurs="0" maxOccurs="unbounded" ref="template:value"/>
+ </complexType>
+ </element>
+
+ <element name="value">
+ <complexType>
+ <element name="description" type="string"/>
+ <element name="displayName" type="string"/>
+ <element name="data" type="string"/>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xml.txt
new file mode 100644
index 0000000000..d8b1345d0d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xml.txt
@@ -0,0 +1,424 @@
+***** TYPES AFTER RESOLVE*********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#RootType
+Property:template of type TemplateType
+Property:unboundTemplateParameter of type unboundTemplateParameter
+Property:description of type description
+Property:factory of type factory
+Property:valueprovider of type valueprovider
+Property:value of type value
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#TemplateType
+Property:displayName of type String
+Property:templateType of type String
+Property:description of type String
+Property:expert of type String
+Property:icon of type String
+Property:verifiers (many) of type String
+Property:globalHelperArguments (many) of type String
+Property:unboundTemplateParameters (many) of type unboundTemplateParameter
+Property:name of type String
+Property:version of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#description
+Property:description of type String
+Property:displayName of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#factory
+Property:kind of type String
+Property:name of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#unboundTemplateParameter
+Property:description of type description
+Property:verifiers (many) of type String
+Property:constraints (many) of type value
+Property:factory of type factory
+Property:defaults (many) of type value
+Property:name of type String
+Property:expert of type String
+Property:multiplicity of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#value
+Property:description of type String
+Property:displayName of type String
+Property:data of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#valueprovider
+Property:values (many) of type value
+*******************************END TYPES******************
+===== DataObject contents =====
+displayName:string:The CT Shop
+
+templateType:string:php
+
+description:string:This is my online shop
+
+expert:string:
+
+icon:string:
+
+verifiers: list string[0]=
+
+globalHelperArguments: list string[0]=
+
+
+unboundTemplateParameters: list dataObject[0]=
+===== DataObject contents =====
+description:dataObject
+===== DataObject contents =====
+description:string:Name for the shop
+
+displayName:string:Shop Name
+
+===== End DataObject =====
+
+verifiers: list string[0]=
+
+
+constraints: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:
+
+data:string:
+
+===== End DataObject =====
+
+factory:dataObject
+ - null or unset
+
+defaults: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:CT Shop
+
+data:string:CT Shop
+
+===== End DataObject =====
+
+name:string:name
+
+expert:string:false
+
+multiplicity:string:1..1
+
+===== End DataObject =====
+
+dataObject[1]=
+===== DataObject contents =====
+description:dataObject
+===== DataObject contents =====
+description:string:Colour of background for Shop
+
+displayName:string:Branding
+
+===== End DataObject =====
+
+verifiers: list string[0]=
+
+
+constraints: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Olive
+
+data:string:Olive
+
+===== End DataObject =====
+
+dataObject[1]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Lime
+
+data:string:Lime
+
+===== End DataObject =====
+
+dataObject[2]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Gray
+
+data:string:Gray
+
+===== End DataObject =====
+
+dataObject[3]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Teal
+
+data:string:Teal
+
+===== End DataObject =====
+
+dataObject[4]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Silver
+
+data:string:Silver
+
+===== End DataObject =====
+
+dataObject[5]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:White
+
+data:string:White
+
+===== End DataObject =====
+
+factory:dataObject
+ - null or unset
+
+defaults: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Olive
+
+data:string:Olive
+
+===== End DataObject =====
+
+name:string:branding
+
+expert:string:false
+
+multiplicity:string:1..1
+
+===== End DataObject =====
+
+dataObject[2]=
+===== DataObject contents =====
+description:dataObject
+===== DataObject contents =====
+description:string:Product Catalog for the shop
+
+displayName:string:Product Catalog
+
+===== End DataObject =====
+
+verifiers: list string[0]=
+
+
+constraints: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:
+
+data:string:
+
+===== End DataObject =====
+
+factory:dataObject
+===== DataObject contents =====
+kind:string:php
+
+name:string:CatalogFactory
+
+===== End DataObject =====
+
+defaults: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Catalog
+
+data:string:Catalog
+
+===== End DataObject =====
+
+name:string:catalog
+
+expert:string:false
+
+multiplicity:string:1..1
+
+===== End DataObject =====
+
+dataObject[3]=
+===== DataObject contents =====
+description:dataObject
+===== DataObject contents =====
+description:string:Shopping cart for the shop
+
+displayName:string:Shopping Cart
+
+===== End DataObject =====
+
+verifiers: list string[0]=
+
+
+constraints: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Cart
+
+data:string:Cart
+
+===== End DataObject =====
+
+dataObject[1]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:GCCart
+
+data:string:GCCart
+
+===== End DataObject =====
+
+dataObject[2]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:MyCart
+
+data:string:MyCart
+
+===== End DataObject =====
+
+factory:dataObject
+===== DataObject contents =====
+kind:string:php
+
+name:string:CartFactory
+
+===== End DataObject =====
+
+defaults: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:Cart
+
+data:string:Cart
+
+===== End DataObject =====
+
+name:string:cart
+
+expert:string:false
+
+multiplicity:string:1..1
+
+===== End DataObject =====
+
+dataObject[4]=
+===== DataObject contents =====
+description:dataObject
+===== DataObject contents =====
+description:string:Payment Modules for the shop
+
+displayName:string:Payment Module
+
+===== End DataObject =====
+
+verifiers: list string[0]=
+
+
+constraints: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:MyPayPal
+
+data:string:MyPayPal
+
+===== End DataObject =====
+
+dataObject[1]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:PayPal
+
+data:string:PayPal
+
+===== End DataObject =====
+
+dataObject[2]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:USPayPal
+
+data:string:USPayPal
+
+===== End DataObject =====
+
+dataObject[3]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:MyStormPay
+
+data:string:MyStormPay
+
+===== End DataObject =====
+
+dataObject[4]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:StormPay
+
+data:string:StormPay
+
+===== End DataObject =====
+
+factory:dataObject
+===== DataObject contents =====
+kind:string:php
+
+name:string:PaymentFactory
+
+===== End DataObject =====
+
+defaults: list dataObject[0]=
+===== DataObject contents =====
+description:string:
+
+displayName:string:PayPal
+
+data:string:PayPal
+
+===== End DataObject =====
+
+name:string:payment
+
+expert:string:false
+
+multiplicity:string:1..1
+
+===== End DataObject =====
+
+name:string:CTShop
+
+version:string:1.0.0
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xsd.txt
new file mode 100644
index 0000000000..38d7c904f0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bug48300_xsd.txt
@@ -0,0 +1,58 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#RootType
+Property:template of type TemplateType
+Property:unboundTemplateParameter of type unboundTemplateParameter
+Property:description of type description
+Property:factory of type factory
+Property:valueprovider of type valueprovider
+Property:value of type value
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#TemplateType
+Property:displayName of type String
+Property:templateType of type String
+Property:description of type String
+Property:expert of type String
+Property:icon of type String
+Property:verifiers (many) of type String
+Property:globalHelperArguments (many) of type String
+Property:unboundTemplateParameters (many) of type unboundTemplateParameter
+Property:name of type String
+Property:version of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#description
+Property:description of type String
+Property:displayName of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#factory
+Property:kind of type String
+Property:name of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#unboundTemplateParameter
+Property:description of type description
+Property:verifiers (many) of type String
+Property:constraints (many) of type value
+Property:factory of type factory
+Property:defaults (many) of type value
+Property:name of type String
+Property:expert of type String
+Property:multiplicity of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#value
+Property:description of type String
+Property:displayName of type String
+Property:data of type String
+Type:http://www.ibm.com/xmlns/prod/ct/ctdl-template/v1.0.0/#valueprovider
+Property:values (many) of type value
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xml
new file mode 100644
index 0000000000..8e130ae2aa
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<mci:company xmlns:mci="http://www.mycompanyinc.com"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.mycompanyinc.com company.xsd"
+ version="0.0.1">
+ <mci:employees>
+ <mci:employee>
+ <mci:id>1</mci:id>
+ <mci:name>Mary Kay</mci:name>
+ </mci:employee>
+ </mci:employees>
+ <mci:departments>
+ <mci:department>
+ <mci:id>3</mci:id>
+ <mci:name>Sales</mci:name>
+ <mci:employeesList>
+ <mci:ids>1</mci:ids>
+ </mci:employeesList>
+ </mci:department>
+ </mci:departments>
+</mci:company> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xsd
new file mode 100644
index 0000000000..34a66c282a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/company.xsd
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema targetNamespace="http://www.mycompanyinc.com"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:mci="http://www.mycompanyinc.com" elementFormDefault="qualified"
+ version="0.0.1">
+ <xsd:complexType name="employeesListType">
+ <xsd:sequence>
+ <xsd:element name="ids" type="xsd:string" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="employeeType">
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string" />
+ <xsd:element name="name" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="departmentType">
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string" />
+ <xsd:element name="name" type="xsd:string" />
+ <xsd:element name="employeesList" type="mci:employeesListType" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="employeesType">
+ <xsd:sequence>
+ <xsd:element name="employee" type="mci:employeeType" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="departmentsType">
+ <xsd:sequence>
+ <xsd:element name="department" type="mci:departmentType" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="companyType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="mci:employeesType" />
+ <xsd:element name="departments" type="mci:departmentsType" />
+ </xsd:sequence>
+ <xsd:attribute name="version" type="xsd:string" use="required" />
+ </xsd:complexType>
+ <xsd:element name="company" type="mci:companyType" />
+</xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/include.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/include.xsd
new file mode 100644
index 0000000000..f2df5c1695
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/include.xsd
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema targetNamespace="http://www.mycompanyinc.com"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:mci="http://www.mycompanyinc.com" elementFormDefault="qualified"
+ version="0.0.1">
+
+ <xsd:include schemaLocation="c:/absolute-drivel/ok1.xsd" />
+ <xsd:include schemaLocation="ok2.xsd" />
+ <xsd:include schemaLocation="c:\\absolute-tosh\\ok3.xsd" />
+
+ <xsd:complexType name="employeesListType">
+ <xsd:sequence>
+ <xsd:element name="ids" type="xsd:string" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="employeeType">
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string" />
+ <xsd:element name="name" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="departmentType">
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string" />
+ <xsd:element name="name" type="xsd:string" />
+ <xsd:element name="employeesList" type="mci:employeesListType" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="employeesType">
+ <xsd:sequence>
+ <xsd:element name="employee" type="mci:employeeType" maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="departmentsType">
+ <xsd:sequence>
+ <xsd:element name="department" type="mci:departmentType" minOccurs="0"
+ maxOccurs="unbounded" />
+ </xsd:sequence>
+ </xsd:complexType>
+ <xsd:complexType name="companyType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="mci:employeesType" />
+ <xsd:element name="departments" type="mci:departmentsType" />
+ </xsd:sequence>
+ <xsd:attribute name="version" type="xsd:string" use="required" />
+ </xsd:complexType>
+ <xsd:element name="company" type="mci:companyType" />
+</xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok1.xsd
new file mode 100644
index 0000000000..e8bea67b49
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok1.xsd
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema targetNamespace="http://www.mycompanyinc.com"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:mci="http://www.mycompanyinc.com" elementFormDefault="qualified"
+ version="0.0.1">
+
+ <xsd:complexType name="ok1">
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string" />
+ <xsd:element name="name" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok2.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok2.xsd
new file mode 100644
index 0000000000..9cecce2f7f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok2.xsd
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema targetNamespace="http://www.mycompanyinc.com"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:mci="http://www.mycompanyinc.com" elementFormDefault="qualified"
+ version="0.0.1">
+
+ <xsd:complexType name="ok2">
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string" />
+ <xsd:element name="name" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok3.xsd
new file mode 100644
index 0000000000..f5bba60269
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bugs/1/ok3.xsd
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xsd:schema targetNamespace="http://www.mycompanyinc.com"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:mci="http://www.mycompanyinc.com" elementFormDefault="qualified"
+ version="0.0.1">
+
+ <xsd:complexType name="ok3">
+ <xsd:sequence>
+ <xsd:element name="id" type="xsd:string" />
+ <xsd:element name="name" type="xsd:string" />
+ </xsd:sequence>
+ </xsd:complexType>
+</xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.txt
new file mode 100644
index 0000000000..da1aabead7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.txt
@@ -0,0 +1 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns1="nottest" xmlns:tns="test" targetNamespace="test"><xsd:element name="duplicate" type="tns1:Duplicate"/><xsd:complexType name="tns1:Duplicate"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/></xsd:sequence><xsd:attribute name="id" type="xsd:integer"/></xsd:complexType><xsd:element name="duplicate" type="Duplicate"/><xsd:complexType name="Duplicate"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/></xsd:sequence><xsd:attribute name="id" type="xsd:integer"/></xsd:complexType><xsd:element name="object" type="Object"/><xsd:complexType name="Object"/><xsd:element name="root" type="Root"/><xsd:complexType name="Root"><xsd:sequence><xsd:element name="duplicate" type="tns:Duplicate" minOccurs="0"/><xsd:element name="duplicate2" type="tns1:Duplicate" minOccurs="0"/><xsd:element name="unique" type="tns:Unique" minOccurs="0"/><xsd:element name="duplicatelist" type="tns:Duplicate" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="duplicatelist2" type="tns1:Duplicate" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="uniquelist" type="tns:Unique" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:element name="unique" type="Unique"/><xsd:complexType name="Unique"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/></xsd:sequence><xsd:attribute name="id" type="xsd:integer"/></xsd:complexType></xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xml
new file mode 100644
index 0000000000..44650e05a4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rooty xmlns="test" xsi:type="Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns2="nottest" xmlns:tns="test"><duplicate id="1"><ob/></duplicate><tns2:duplicate2 id="3"/><unique id="5"><ob/></unique><duplicatelist id="2"><ob/></duplicatelist><tns2:duplicatelist2 id="4"/><uniquelist id="6"/></rooty>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd
new file mode 100644
index 0000000000..da1aabead7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd
@@ -0,0 +1 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns1="nottest" xmlns:tns="test" targetNamespace="test"><xsd:element name="duplicate" type="tns1:Duplicate"/><xsd:complexType name="tns1:Duplicate"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/></xsd:sequence><xsd:attribute name="id" type="xsd:integer"/></xsd:complexType><xsd:element name="duplicate" type="Duplicate"/><xsd:complexType name="Duplicate"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/></xsd:sequence><xsd:attribute name="id" type="xsd:integer"/></xsd:complexType><xsd:element name="object" type="Object"/><xsd:complexType name="Object"/><xsd:element name="root" type="Root"/><xsd:complexType name="Root"><xsd:sequence><xsd:element name="duplicate" type="tns:Duplicate" minOccurs="0"/><xsd:element name="duplicate2" type="tns1:Duplicate" minOccurs="0"/><xsd:element name="unique" type="tns:Unique" minOccurs="0"/><xsd:element name="duplicatelist" type="tns:Duplicate" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="duplicatelist2" type="tns1:Duplicate" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="uniquelist" type="tns:Unique" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:element name="unique" type="Unique"/><xsd:complexType name="Unique"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/></xsd:sequence><xsd:attribute name="id" type="xsd:integer"/></xsd:complexType></xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd_safe.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd_safe.txt
new file mode 100644
index 0000000000..1b4c6bb7da
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-out.xsd_safe.txt
@@ -0,0 +1,53 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
+xmlns:tns1="nottest" xmlns:tns="test" targetNamespace="test">
+
+<xsd:element name="duplicate" type="tns1:Duplicate"/>
+
+<xsd:complexType name="tns1:Duplicate">
+
+<xsd:sequence>
+<xsd:element name="ob" type="tns:Object" minOccurs="0"/>
+</xsd:sequence>
+
+<xsd:attribute name="id" type="xsd:integer"/>
+
+</xsd:complexType>
+
+<xsd:element name="duplicate" type="Duplicate"/>
+
+<xsd:complexType name="Duplicate">
+<xsd:sequence>
+<xsd:element name="ob" type="tns:Object" minOccurs="0"/>
+</xsd:sequence>
+
+<xsd:attribute name="id" type="xsd:integer"/>
+
+</xsd:complexType>
+
+<xsd:element name="object" type="Object"/>
+
+<xsd:complexType name="Object"/>
+
+<xsd:element name="root" type="Root"/>
+
+<xsd:complexType name="Root">
+<xsd:sequence>
+<xsd:element name="duplicate" type="tns:Duplicate" minOccurs="0"/>
+<xsd:element name="duplicate2" type="tns1:Duplicate" minOccurs="0"/>
+<xsd:element name="unique" type="tns:Unique" minOccurs="0"/>
+<xsd:element name="duplicatelist" type="tns:Duplicate" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="duplicatelist2" type="tns1:Duplicate" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:element name="uniquelist" type="tns:Unique" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+</xsd:complexType>
+
+<xsd:element name="unique" type="Unique"/>
+
+<xsd:complexType name="Unique">
+<xsd:sequence>
+<xsd:element name="ob" type="tns:Object" minOccurs="0"/>
+</xsd:sequence>
+<xsd:attribute name="id" type="xsd:integer"/>
+</xsd:complexType>
+
+</xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-outxml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-outxml.txt
new file mode 100644
index 0000000000..44650e05a4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/bunique-outxml.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rooty xmlns="test" xsi:type="Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns2="nottest" xmlns:tns="test"><duplicate id="1"><ob/></duplicate><tns2:duplicate2 id="3"/><unique id="5"><ob/></unique><duplicatelist id="2"><ob/></duplicatelist><tns2:duplicatelist2 id="4"/><uniquelist id="6"/></rooty>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.txt
new file mode 100644
index 0000000000..44650e05a4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rooty xmlns="test" xsi:type="Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns2="nottest" xmlns:tns="test"><duplicate id="1"><ob/></duplicate><tns2:duplicate2 id="3"/><unique id="5"><ob/></unique><duplicatelist id="2"><ob/></duplicatelist><tns2:duplicatelist2 id="4"/><uniquelist id="6"/></rooty>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xml
new file mode 100644
index 0000000000..44650e05a4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<rooty xmlns="test" xsi:type="Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns2="nottest" xmlns:tns="test"><duplicate id="1"><ob/></duplicate><tns2:duplicate2 id="3"/><unique id="5"><ob/></unique><duplicatelist id="2"><ob/></duplicatelist><tns2:duplicatelist2 id="4"/><uniquelist id="6"/></rooty>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xsd
new file mode 100644
index 0000000000..3b8cdffd61
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/buniqueread-out.xsd
@@ -0,0 +1 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns1="nottest" xmlns:tns="test" targetNamespace="test"><xsd:element name="duplicate" type="tns1:Duplicate"/><xsd:complexType name="tns1:Duplicate"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/><xsd:element name="id" type="xsd:integer" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:element name="duplicate" type="Duplicate"/><xsd:complexType name="Duplicate"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/><xsd:element name="id" type="xsd:integer" minOccurs="0"/></xsd:sequence></xsd:complexType><xsd:element name="object" type="Object"/><xsd:complexType name="Object"/><xsd:element name="root" type="Root"/><xsd:complexType name="Root"><xsd:sequence><xsd:element name="duplicate" type="tns:Duplicate" minOccurs="0"/><xsd:element name="duplicate2" type="tns1:Duplicate" minOccurs="0"/><xsd:element name="unique" type="tns:Unique" minOccurs="0"/><xsd:element name="duplicatelist" type="tns:Duplicate" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="duplicatelist2" type="tns1:Duplicate" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="uniquelist" type="tns:Unique" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence></xsd:complexType><xsd:element name="unique" type="Unique"/><xsd:complexType name="Unique"><xsd:sequence><xsd:element name="ob" type="tns:Object" minOccurs="0"/><xsd:element name="id" type="xsd:integer" minOccurs="0"/></xsd:sequence></xsd:complexType></xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator.xsd
new file mode 100644
index 0000000000..d04b0c22e1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator.xsd
@@ -0,0 +1,28 @@
+<?xml version="1.0" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:calc="http://example.org/CalculatorTypes"
+ targetNamespace="http://example.org/CalculatorTypes">
+ <xsd:complexType name="AddArguments">
+ <xsd:sequence>
+ <xsd:element name="a" type="xsd:float"/>
+ <xsd:element name="b" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2.wsdl
new file mode 100644
index 0000000000..93cdce8874
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2.wsdl
@@ -0,0 +1,70 @@
+<?xml version ="1.0" encoding ="UTF-8" ?>
+<definitions name="Calculator"
+ targetNamespace="http://example.org/Calculator"
+ xmlns:calc="http://example.org/CalculatorTypes"
+ xmlns:tns="http://example.org/Calculator"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+
+<!-- This is how it's done with an import -->
+<types>
+ <xsd:schema targetNamespace="http://example.org/Calculator">
+ <xsd:import namespace="http://example.org/CalculatorTypes" schemaLocation="calculator.xsd"/>
+ </xsd:schema>
+</types>
+
+
+<!-- This is how it's done without an import
+<types>
+ <xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://example.org/Calculator">
+ <xsd:complexType name="AddArguments">
+ <xsd:sequence>
+ <xsd:element name="a" type="xsd:float"/>
+ <xsd:element name="b" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+</types>
+-->
+
+<message name="getCalculatorRequest">
+ <part name="arguments" type="calc:AddArguments"/>
+</message>
+<message name="getCalculatorResponse">
+ <part name="result" type="xsd:float"/>
+</message>
+
+<portType name="CalculatorPortType">
+ <operation name="add2">
+ <input message="tns:getCalculatorRequest"/>
+ <output message="tns:getCalculatorResponse"/>
+ </operation>
+</portType>
+
+<binding name="CalculatorBinding" type="tns:CalculatorPortType">
+ <soap:binding style="rpc"
+ transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="add2">
+ <soap:operation soapAction="urn:example-org-calculator#add2"/>
+ <input>
+ <soap:body use="encoded" namespace="urn:example-org-calculator"
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </input>
+ <output>
+ <soap:body use="encoded" namespace="urn:example-org-calculator"
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </output>
+ </operation>
+</binding>
+
+<service name="CalculatorService">
+ <port name="CalculatorPort" binding="CalculatorBinding">
+ <soap:address location="http://localhost/PHP%20Playground/SoapExtension/ComplexCalculator/calculator_server.php"/>
+ </port>
+</service>
+</definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2a.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2a.wsdl
new file mode 100644
index 0000000000..eb17b03db7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/calculator2a.wsdl
@@ -0,0 +1,69 @@
+<?xml version ="1.0" encoding ="UTF-8" ?>
+<definitions name="Calculator"
+ targetNamespace="http://example.org/Calculator"
+ xmlns:calc="http://example.org/CalculatorTypes"
+ xmlns:tns="http://example.org/Calculator"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns="http://schemas.xmlsoap.org/wsdl/">
+
+<!-- This is how it's done with an import
+<types>
+ <xsd:schema targetNamespace="http://example.org/Calculator">
+ <import namespace="http://example.org/CalculatorTypes" schemaLocation="calculator.xsd"/>
+ </xsd:schema>
+</types>
+-->
+
+<!-- This is how it's done without an import -->
+<types>
+ <xsd:schema attributeFormDefault="qualified" elementFormDefault="qualified"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://example.org/Calculator">
+ <xsd:complexType name="AddArguments">
+ <xsd:sequence>
+ <xsd:element name="a" type="xsd:float"/>
+ <xsd:element name="b" type="xsd:float"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:schema>
+</types>
+
+<message name="getCalculatorRequest">
+ <part name="arguments" type="calc:AddArguments"/>
+</message>
+<message name="getCalculatorResponse">
+ <part name="result" type="xsd:float"/>
+</message>
+
+<portType name="CalculatorPortType">
+ <operation name="add2">
+ <input message="tns:getCalculatorRequest"/>
+ <output message="tns:getCalculatorResponse"/>
+ </operation>
+</portType>
+
+<binding name="CalculatorBinding" type="tns:CalculatorPortType">
+ <soap:binding style="rpc"
+ transport="http://schemas.xmlsoap.org/soap/http"/>
+ <operation name="add2">
+ <soap:operation soapAction="urn:example-org-calculator#add2"/>
+ <input>
+ <soap:body use="encoded" namespace="urn:example-org-calculator"
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </input>
+ <output>
+ <soap:body use="encoded" namespace="urn:example-org-calculator"
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </output>
+ </operation>
+</binding>
+
+<service name="CalculatorService">
+ <port name="CalculatorPort" binding="CalculatorBinding">
+ <soap:address location="http://localhost/PHP%20Playground/SoapExtension/ComplexCalculator/calculator_server.php"/>
+ </port>
+</service>
+</definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/carotest3.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/carotest3.txt
new file mode 100644
index 0000000000..cb5e4ed9b3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/carotest3.txt
@@ -0,0 +1,36 @@
+======================================
+======================================
+======================================
+I am Item 1 of string
+======================================
+======================================
+I am Item 1 of string
+I am the first free text
+======================================
+======================================
+I am Item 1 of string
+I am the first free text
+I am Item 2 of string
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+department1
+======================================
+Element zero, length 1: 1
+Element one, length 2: 2
+Element two, length 3: 3
+Element three,length 4: 4
+Element four, length 5: 5
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company.xsd
new file mode 100644
index 0000000000..2c7769167a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company.xsd
@@ -0,0 +1,46 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xml
new file mode 100644
index 0000000000..16a32223ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <!-- This XML has an employee with an SN of nil, which should appear in the SDO as NULL
+ -->
+ <company xmlns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="#/departments.0/employees.1">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees>
+<name>Jane Doe</name>
+<SN xsi:nil="true" />
+</employees>
+</departments>
+</company> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xsd
new file mode 100644
index 0000000000..808e075a2d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/company_with_nillable_SN.xsd
@@ -0,0 +1,45 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!-- This XSD recasts the properties of employee to elements in order to allow the SN property to be nillable -->
+<xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF"
+sdoxml:propertyType="company:EmployeeType"/> </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="SN" type="xsd:ID" nillable="true"/>
+ <xsd:element name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyabs.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyabs.xsd
new file mode 100644
index 0000000000..f8a1577daf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyabs.xsd
@@ -0,0 +1,60 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ <xsd:element name="Publication" type="company:PublicationType" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ <xsd:complexType name="BookType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="author" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="MagazineType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="editor" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="PublicationType" abstract="true" >
+ <xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:element name="Book" type="company:BookType" substitutionGroup="Publication" />
+ <xsd:element name="Magazine" type="company:MagazineType" substitutionGroup="company:Publication" />
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyref.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyref.xsd
new file mode 100644
index 0000000000..614dca1752
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companyref.xsd
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ elementFormDefault="qualified">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ <xsd:element name="my.Publication" ref="publication" sdo:name="MyPublication" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ <xsd:complexType name="BookType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="author" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="MagazineType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="editor" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="PublicationType">
+ <xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:element name="my.book" sdo:name="MyBook" type="company:BookType" substitutionGroup="Publication" />
+ <xsd:element name="my.magazine" sdo:name="MyMagazine" type="company:MagazineType" substitutionGroup="company:Publication" />
+ <xsd:element name="my.publication" sdo:name="MyPublication" type="company:PublicationType"/>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companysubs.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companysubs.xsd
new file mode 100644
index 0000000000..f71e07dbee
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/companysubs.xsd
@@ -0,0 +1,60 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ <xsd:element name="Publication" type="company:PublicationType" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ <xsd:complexType name="BookType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="author" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="MagazineType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="editor" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="PublicationType">
+ <xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:element name="Book" type="company:BookType" substitutionGroup="Publication" />
+ <xsd:element name="Magazine" type="company:MagazineType" substitutionGroup="company:Publication" />
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.txt
new file mode 100644
index 0000000000..b4c0b2d911
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0004"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><create>#/departments.0/employees.2</create><delete>#/departments.0/employees.1</delete><create>#/departments.0/employees.3</create><create>#/departments.0/employees.4</create><company sdo:ref="#/" employeeOfTheMonth="" name="ACME" employeeOfTheMonth="#/departments.0/employees.1"/><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees sdo:ref="#/departments.0/employees.1"/></departments></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Jane Doe" SN="E0003"/><employees name="Al Smith" SN="E0004" manager="true"/><employees name="Bill Withers" SN="E0005"/><employees name="Mary Smith" SN="E0002" manager="true"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.xml
new file mode 100644
index 0000000000..b4c0b2d911
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0004"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><create>#/departments.0/employees.2</create><delete>#/departments.0/employees.1</delete><create>#/departments.0/employees.3</create><create>#/departments.0/employees.4</create><company sdo:ref="#/" employeeOfTheMonth="" name="ACME" employeeOfTheMonth="#/departments.0/employees.1"/><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees sdo:ref="#/departments.0/employees.1"/></departments></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Jane Doe" SN="E0003"/><employees name="Al Smith" SN="E0004" manager="true"/><employees name="Bill Withers" SN="E0005"/><employees name="Mary Smith" SN="E0002" manager="true"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.txt
new file mode 100644
index 0000000000..82175d4d13
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0005"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.1/employees.4</delete><delete>#/departments.1/employees.3</delete><delete>#/departments.1/employees.2</delete><delete>#/departments.1/employees.1</delete><delete>#/departments.1/employees.0</delete><delete>#/departments.1</delete><create>#/departments.0/employees.2</create><company sdo:ref="#/" employeeOfTheMonth="" name="Eastleigh Borough Council"><departments sdo:ref="#/departments.0"/><departments name="Tax Collection" location="Winchester" number="666"><employees name="Arch Meanie" SN="D0001" manager="false"/><employees name="Boris the Spider" SN="D0002" manager="true"/><employees name="Cash Hoarder" SN="D0003" manager="false"/><employees name="Dean Giyatoss" SN="D0004" manager="false"/><employees name="Ebenezer Scrooge" SN="D0005" manager="false"/></departments></company><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Bridget Jones" SN="E0002" manager="true"/><employees name="Colin Thorne" SN="E0003" manager="false"/><employees name="Donald Trump" SN="E0004" manager="false"/><employees sdo:ref="#/departments.0/employees.1"/></departments></sdo:changeSummary><departments name="Waste Disposal" location="Botley" number="123"><employees name="Alphonse Dodet" SN="E0001"/><employees name="Eddy the eagle" SN="E0005"/><employees name="Colin Thorne" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.xml
new file mode 100644
index 0000000000..82175d4d13
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload2-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0005"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.1/employees.4</delete><delete>#/departments.1/employees.3</delete><delete>#/departments.1/employees.2</delete><delete>#/departments.1/employees.1</delete><delete>#/departments.1/employees.0</delete><delete>#/departments.1</delete><create>#/departments.0/employees.2</create><company sdo:ref="#/" employeeOfTheMonth="" name="Eastleigh Borough Council"><departments sdo:ref="#/departments.0"/><departments name="Tax Collection" location="Winchester" number="666"><employees name="Arch Meanie" SN="D0001" manager="false"/><employees name="Boris the Spider" SN="D0002" manager="true"/><employees name="Cash Hoarder" SN="D0003" manager="false"/><employees name="Dean Giyatoss" SN="D0004" manager="false"/><employees name="Ebenezer Scrooge" SN="D0005" manager="false"/></departments></company><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Bridget Jones" SN="E0002" manager="true"/><employees name="Colin Thorne" SN="E0003" manager="false"/><employees name="Donald Trump" SN="E0004" manager="false"/><employees sdo:ref="#/departments.0/employees.1"/></departments></sdo:changeSummary><departments name="Waste Disposal" location="Botley" number="123"><employees name="Alphonse Dodet" SN="E0001"/><employees name="Eddy the eagle" SN="E0005"/><employees name="Colin Thorne" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.txt
new file mode 100644
index 0000000000..82175d4d13
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0005"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.1/employees.4</delete><delete>#/departments.1/employees.3</delete><delete>#/departments.1/employees.2</delete><delete>#/departments.1/employees.1</delete><delete>#/departments.1/employees.0</delete><delete>#/departments.1</delete><create>#/departments.0/employees.2</create><company sdo:ref="#/" employeeOfTheMonth="" name="Eastleigh Borough Council"><departments sdo:ref="#/departments.0"/><departments name="Tax Collection" location="Winchester" number="666"><employees name="Arch Meanie" SN="D0001" manager="false"/><employees name="Boris the Spider" SN="D0002" manager="true"/><employees name="Cash Hoarder" SN="D0003" manager="false"/><employees name="Dean Giyatoss" SN="D0004" manager="false"/><employees name="Ebenezer Scrooge" SN="D0005" manager="false"/></departments></company><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Bridget Jones" SN="E0002" manager="true"/><employees name="Colin Thorne" SN="E0003" manager="false"/><employees name="Donald Trump" SN="E0004" manager="false"/><employees sdo:ref="#/departments.0/employees.1"/></departments></sdo:changeSummary><departments name="Waste Disposal" location="Botley" number="123"><employees name="Alphonse Dodet" SN="E0001"/><employees name="Eddy the eagle" SN="E0005"/><employees name="Colin Thorne" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.xml
new file mode 100644
index 0000000000..82175d4d13
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/csload3-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0005"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.1/employees.4</delete><delete>#/departments.1/employees.3</delete><delete>#/departments.1/employees.2</delete><delete>#/departments.1/employees.1</delete><delete>#/departments.1/employees.0</delete><delete>#/departments.1</delete><create>#/departments.0/employees.2</create><company sdo:ref="#/" employeeOfTheMonth="" name="Eastleigh Borough Council"><departments sdo:ref="#/departments.0"/><departments name="Tax Collection" location="Winchester" number="666"><employees name="Arch Meanie" SN="D0001" manager="false"/><employees name="Boris the Spider" SN="D0002" manager="true"/><employees name="Cash Hoarder" SN="D0003" manager="false"/><employees name="Dean Giyatoss" SN="D0004" manager="false"/><employees name="Ebenezer Scrooge" SN="D0005" manager="false"/></departments></company><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Bridget Jones" SN="E0002" manager="true"/><employees name="Colin Thorne" SN="E0003" manager="false"/><employees name="Donald Trump" SN="E0004" manager="false"/><employees sdo:ref="#/departments.0/employees.1"/></departments></sdo:changeSummary><departments name="Waste Disposal" location="Botley" number="123"><employees name="Alphonse Dodet" SN="E0001"/><employees name="Eddy the eagle" SN="E0005"/><employees name="Colin Thorne" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.txt
new file mode 100644
index 0000000000..9490166774
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0004"><sdo:changeSummary xmlns:sdo="commonj.sdo"><create>#/departments.0/employees.2</create><delete>#/departments.0/employees.1</delete><create>#/departments.0/employees.3</create><create>#/departments.0/employees.4</create><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees sdo:ref="#/departments.0/employees.1"/></departments><company sdo:ref="#/" name="ACME" employeeOfTheMonth="#/departments.0/employees.1"/></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Jane Doe" SN="E0003"/><employees name="Al Smith" SN="E0004" manager="true"/><employees name="Bill Withers" SN="E0005"/><employees name="Mary Smith" SN="E0002" manager="true"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.xml
new file mode 100644
index 0000000000..9490166774
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0004"><sdo:changeSummary xmlns:sdo="commonj.sdo"><create>#/departments.0/employees.2</create><delete>#/departments.0/employees.1</delete><create>#/departments.0/employees.3</create><create>#/departments.0/employees.4</create><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees sdo:ref="#/departments.0/employees.1"/></departments><company sdo:ref="#/" name="ACME" employeeOfTheMonth="#/departments.0/employees.1"/></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Jane Doe" SN="E0003"/><employees name="Al Smith" SN="E0004" manager="true"/><employees name="Bill Withers" SN="E0005"/><employees name="Mary Smith" SN="E0002" manager="true"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.txt
new file mode 100644
index 0000000000..cce98c2591
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0005"><sdo:changeSummary xmlns:sdo="commonj.sdo"><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.1/employees.4</delete><delete>#/departments.1/employees.3</delete><delete>#/departments.1/employees.2</delete><delete>#/departments.1/employees.1</delete><delete>#/departments.1/employees.0</delete><delete>#/departments.1</delete><create>#/departments.0/employees.2</create><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Bridget Jones" SN="E0002" manager="true"/><employees name="Colin Thorne" SN="E0003" manager="false"/><employees name="Donald Trump" SN="E0004" manager="false"/><employees sdo:ref="#/departments.0/employees.1"/></departments><company sdo:ref="#/" name="Eastleigh Borough Council" employeeOfTheMonth=""><departments sdo:ref="#/departments.0"/><departments name="Tax Collection" location="Winchester" number="666"><employees name="Arch Meanie" SN="D0001" manager="false"/><employees name="Boris the Spider" SN="D0002" manager="true"/><employees name="Cash Hoarder" SN="D0003" manager="false"/><employees name="Dean Giyatoss" SN="D0004" manager="false"/><employees name="Ebenezer Scrooge" SN="D0005" manager="false"/></departments></company></sdo:changeSummary><departments name="Waste Disposal" location="Botley" number="123"><employees name="Alphonse Dodet" SN="E0001"/><employees name="Eddy the eagle" SN="E0005"/><employees name="Colin Thorne" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.xml
new file mode 100644
index 0000000000..cce98c2591
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/cssave2-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="E0005"><sdo:changeSummary xmlns:sdo="commonj.sdo"><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.0/employees.1</delete><delete>#/departments.1/employees.4</delete><delete>#/departments.1/employees.3</delete><delete>#/departments.1/employees.2</delete><delete>#/departments.1/employees.1</delete><delete>#/departments.1/employees.0</delete><delete>#/departments.1</delete><create>#/departments.0/employees.2</create><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees name="Bridget Jones" SN="E0002" manager="true"/><employees name="Colin Thorne" SN="E0003" manager="false"/><employees name="Donald Trump" SN="E0004" manager="false"/><employees sdo:ref="#/departments.0/employees.1"/></departments><company sdo:ref="#/" name="Eastleigh Borough Council" employeeOfTheMonth=""><departments sdo:ref="#/departments.0"/><departments name="Tax Collection" location="Winchester" number="666"><employees name="Arch Meanie" SN="D0001" manager="false"/><employees name="Boris the Spider" SN="D0002" manager="true"/><employees name="Cash Hoarder" SN="D0003" manager="false"/><employees name="Dean Giyatoss" SN="D0004" manager="false"/><employees name="Ebenezer Scrooge" SN="D0005" manager="false"/></departments></company></sdo:changeSummary><departments name="Waste Disposal" location="Botley" number="123"><employees name="Alphonse Dodet" SN="E0001"/><employees name="Eddy the eagle" SN="E0005"/><employees name="Colin Thorne" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/datetest.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/datetest.txt
new file mode 100644
index 0000000000..3da923ea55
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/datetest.txt
@@ -0,0 +1,4 @@
+Name of the company is DateTest
+Set start of the company is 1000
+Review number:0 was:2000
+Review number:1 was:4000
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/defaults.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/defaults.txt
new file mode 100644
index 0000000000..1cdba8ea05
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/defaults.txt
@@ -0,0 +1,10 @@
+Boolean default is true: 1
+Byte default is d: 100
+Character default is e: 101
+Short default is 300: 300
+Long default is 400: 400
+Expected index out of range OK
+Float default is 600: 600.000
+LongDouble default is 700: 700.000
+String default is HELP: HELP
+Bytes default is HELP: HELP
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.txt
new file mode 100644
index 0000000000..b08b52a605
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.txt
@@ -0,0 +1,2 @@
+RootURI=companyNS
+RootName=company
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xml
new file mode 100644
index 0000000000..9a865fc160
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<company targetNameSpace="hghgh" xmlns="companyNS" name="MegaCorp" employeeOfTheMonth="#/departments.0/employees.1">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="John Jones" SN="E0001" />
+<employees name="Jane Doe" SN="E0003" />
+<employees name="Al Smith" SN="E0004" manager="true" />
+</departments>
+</company> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xsd
new file mode 100644
index 0000000000..a507785277
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/doctest.xsd
@@ -0,0 +1,44 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF"
+sdoxml:propertyType="company:EmployeeType"/> </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/employee.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/employee.xsd
new file mode 100644
index 0000000000..d219afc522
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/employee.xsd
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+<xs:element name="employee" type="fullpersoninfo"/>
+
+<xs:complexType name="personinfo">
+ <xs:sequence>
+ <xs:element name="firstname" type="xs:string"/>
+ <xs:element name="lastname" type="xs:string"/>
+ </xs:sequence>
+</xs:complexType>
+
+<xs:complexType name="fullpersoninfo">
+ <xs:complexContent>
+ <xs:extension base="personinfo">
+ <xs:sequence>
+ <xs:element name="address" type="xs:string"/>
+ <xs:element name="city" type="xs:string"/>
+ <xs:element name="country" type="xs:string"/>
+ </xs:sequence>
+ </xs:extension>
+ </xs:complexContent>
+</xs:complexType>
+
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.txt
new file mode 100644
index 0000000000..30b469181d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME" employeeOfTheMonth="E0002"><sdo:changeSummary xmlns:sdo="commonj.sdo"/><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees name="Jane Doe" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.xml
new file mode 100644
index 0000000000..30b469181d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs1.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME" employeeOfTheMonth="E0002"><sdo:changeSummary xmlns:sdo="commonj.sdo"/><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees name="Jane Doe" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.txt
new file mode 100644
index 0000000000..596c51091d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME" employeeOfTheMonth="E0002"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"/><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees name="Jane Doe" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.xml
new file mode 100644
index 0000000000..596c51091d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs2.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME" employeeOfTheMonth="E0002"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"/><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees name="Jane Doe" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.txt
new file mode 100644
index 0000000000..14e33b7c55
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME" employeeOfTheMonth="E0002"><sdo:changeSummary xmlns:sdo="commonj.sdo"><create>#/departments.0/employees.3</create><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees sdo:ref="#/departments.0/employees.1"/><employees sdo:ref="#/departments.0/employees.2"/></departments></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees name="Jane Doe" SN="E0003"/><employees name="Al Smith" SN="E0004" manager="true"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.xml
new file mode 100644
index 0000000000..14e33b7c55
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/emptycs3.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME" employeeOfTheMonth="E0002"><sdo:changeSummary xmlns:sdo="commonj.sdo"><create>#/departments.0/employees.3</create><departments sdo:ref="#/departments.0"><employees sdo:ref="#/departments.0/employees.0"/><employees sdo:ref="#/departments.0/employees.1"/><employees sdo:ref="#/departments.0/employees.2"/></departments></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="John Jones" SN="E0001"/><employees name="Mary Smith" SN="E0002" manager="true"/><employees name="Jane Doe" SN="E0003"/><employees name="Al Smith" SN="E0004" manager="true"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xml
new file mode 100644
index 0000000000..16a32223ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <!-- This XML has an employee with an SN of nil, which should appear in the SDO as NULL
+ -->
+ <company xmlns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="#/departments.0/employees.1">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees>
+<name>Jane Doe</name>
+<SN xsi:nil="true" />
+</employees>
+</departments>
+</company> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xsd
new file mode 100644
index 0000000000..ae8130189c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/error1.xsd
@@ -0,0 +1,45 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!-- This XSD recasts the properties of employee to elements in order to allow the SN property to be nillable -->
+<xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF"
+sdoxml:propertyType="company:EmployeeType"/> </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="SN" type="xsd:ID" nillable="true"/>
+ <xsd:element name="manager" type="xsd:boolean"/>
+
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/extension.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/extension.xsd
new file mode 100644
index 0000000000..247380ceba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/extension.xsd
@@ -0,0 +1,54 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!--
+ This example simplified version of W3C XML schema primer
+ with added UK postcode
+ http://www.w3.org/TR/xmlschema-0/#DerivExt
+ -->
+
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="" >
+
+ <complexType name="Address">
+ <sequence>
+ <element name="name" type="string"/>
+ <element name="street" type="string"/>
+ <element name="city" type="string"/>
+ </sequence>
+ </complexType>
+
+ <complexType name="USAddress">
+ <complexContent>
+ <extension base="Address">
+ <sequence>
+ <element name="zip" type="positiveInteger"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <complexType name="UKAddress">
+ <complexContent>
+ <extension base="Address">
+ <sequence>
+ <element name="postcode" type="string"/>
+ </sequence>
+ </extension>
+ </complexContent>
+ </complexType>
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gCustomer.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gCustomer.xsd
new file mode 100644
index 0000000000..1671c987bf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gCustomer.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:cust="customerNS" targetNamespace="customerNS">
+ <element name="customer" type="cust:CustomerType">
+ <complexType name="CustomerType">
+ <sequence>
+ <element name="customerId" type="ID"/>
+ <element name="name" type="string"/>
+ <element name="shipping" type="cust:AddressType">
+ <complexType name="AddressType">
+ <element name="street" type="string"/>
+ <element name="city" type="string"/>
+ <element name="state" type="string"/>
+ <element name="zip" type="string"/>
+ </complexType>
+ </element>
+ <element name="payment" ref="cust:payment"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="payment" type="cust:PaymentType">
+ <complexType name="PaymentType">
+ <element name="paymentId" type="ID"/>
+ <element name="accountNo" type="string"/>
+ <element name="bank" type="string"/>
+ <element name="securityCode" type="string"/>
+ <element name="amount" type="float"/>
+ </complexType>
+ </element>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xml
new file mode 100644
index 0000000000..7beea167d3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<order xmlns="orderNS" xsi:type="OrderType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><orderId>1132323800</orderId><status>NONE</status><item><itemId>12</itemId><description>Drummers drumming</description><price>12.99</price><quantity>1</quantity><warehouseId>1</warehouseId></item><item><itemId>3</itemId><description>French Hens</description><price>3.99</price><quantity>2</quantity><warehouseId>1</warehouseId></item><customer xmlns="customerNS"><customerId>1</customerId><name>Graham Charters</name><shipping><street>24 Big Street</street><city>Big City</city><state>Big State</state><zip>Up Your Coat</zip></shipping><payment><accountNo>234234234243</accountNo><bank>Big</bank><securityCode>234</securityCode><amount>2.097e+001</amount></payment></customer></order>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xsd
new file mode 100644
index 0000000000..d4e0ff832e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g/gOrder.xsd
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+xmlns:ord="orderNS" xmlns:cust="customerNS" targetNamespace="orderNS">
+
+ <include schemaLocation="./Customer.xsd"/>
+
+ <element name="order" type="ord:OrderType">
+ <complexType name="OrderType">
+ <sequence>
+ <element name="orderId" type="ID"/>
+ <element name="status" type="ord:OrderStatus"/>
+ <element name="item" maxOccurs="unbounded" ref="ord:item"/>
+ <element ref="cust:customer"/>
+ </sequence>
+ </complexType>
+ </element>
+
+ <element name="item">
+ <complexType>
+ <element name="itemId" type="integer"/>
+ <element name="description" type="string"/>
+ <element name="price" type="string"/>
+ <element name="quantity" type="integer"/>
+ <element name="warehouseId" type="integer"/>
+ </complexType>
+ </element>
+
+ <simpleType name="OrderStatus">
+ <restriction base="string">
+ <enumeration value="NONE"/>
+ <enumeration value="RECEIVED"/>
+ <enumeration value="INVOICED"/>
+ <enumeration value="DISPATCHED"/>
+ <enumeration value="COMPLETED"/>
+ <enumeration value="CANCELLED"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g3.xsd
new file mode 100644
index 0000000000..c70d00aa43
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/g3.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ <xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="quote"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="quote">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="phrase"/>
+ <xs:element ref="author"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/getproptest.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/getproptest.txt
new file mode 100644
index 0000000000..f6bea1325d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/getproptest.txt
@@ -0,0 +1,8 @@
+Companys name property is: name
+Companys dept property is:departments
+Departments empl property is:employees
+Departments empl property is:employees
+Employees name property is:name
+Normal exception caught
+Normal exception caught
+Normal exception caught
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham1.xsd
new file mode 100644
index 0000000000..dbab303cd7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham1.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+ <xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="quote"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="quote">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="phrase"/>
+ <xs:element ref="author"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+</xs:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham2.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham2.xsd
new file mode 100644
index 0000000000..6c8f68beb7
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham2.xsd
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+xmlns:quotes="quotesNS" targetNamespace="quotesNS">
+<xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="quote"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="quote" >
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+</xs:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham3.xsd
new file mode 100644
index 0000000000..9123233b43
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/graham3.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
+>
+<!--
+xmlns:quotes="quotesNS" targetNamespace="quotesNS"
+-->
+<xs:element name="quotes">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="quote" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="phrase" type="xs:string"/>
+ <xs:element name="author" type="xs:string"/>
+ </xs:sequence>
+ <xs:attribute name="year" use="required" type="xs:integer"/>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+</xs:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup.xsd
new file mode 100644
index 0000000000..dd13042e8a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <group name="NameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ <group name="NameGroup2">
+ <sequence>
+ <element name="first2" type="string"/>
+ <element name="middle2" type="string"/>
+ <element name="last2" type="string"/>
+ </sequence>
+ </group>
+ </sequence>
+ </group>
+ <element name="name">
+ <complexType>
+ <group ref="NameGroup"/>
+ <group ref="NameGroup2"/>
+ <attribute name="title" type="string"/>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup_xsd.txt
new file mode 100644
index 0000000000..7eba22a274
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupingroup_xsd.txt
@@ -0,0 +1,25 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup.xsd
new file mode 100644
index 0000000000..d10195a4fd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup.xsd
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <group name="NameGroup2">
+ <sequence>
+ <element name="first2" type="string"/>
+ <element name="middle2" type="string"/>
+ <element name="last2" type="string"/>
+ </sequence>
+ </group>
+ <group name="NameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ <group ref="target:NameGroup2"/>
+ </sequence>
+ </group>
+ <element name="name">
+ <complexType>
+ <group ref="target:NameGroup"/>
+ <attribute name="title" type="string"/>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup_xsd.txt
new file mode 100644
index 0000000000..f879c8adb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouprefingroup_xsd.txt
@@ -0,0 +1,29 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:first2 of type String
+Property:middle2 of type String
+Property:last2 of type String
+Property:title of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate.xsd
new file mode 100644
index 0000000000..3274282966
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate.xsd
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <element name="name">
+ <complexType>
+ <group ref="target:NameGroup"/>
+ <attribute name="title" type="string"/>
+ </complexType>
+ </element>
+ <group name="NameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ </sequence>
+ </group>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate_xsd.txt
new file mode 100644
index 0000000000..81ccaee474
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/grouptoolate_xsd.txt
@@ -0,0 +1,26 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix.xsd
new file mode 100644
index 0000000000..a2f5c5fd49
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix.xsd
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <group name="NameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ </sequence>
+ </group>
+ <element name="name">
+ <complexType>
+ <group ref="target:NameGroup"/>
+ <attribute name="title" type="string"/>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix_xsd.txt
new file mode 100644
index 0000000000..81ccaee474
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwithprefix_xsd.txt
@@ -0,0 +1,26 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:name of type name
+Type:http://www.wrox.com/name#name
+Property:first of type String
+Property:middle of type String
+Property:last of type String
+Property:title of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwrongname.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwrongname.xsd
new file mode 100644
index 0000000000..c30bc45421
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/groupwrongname.xsd
@@ -0,0 +1,34 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.wrox.com/name"
+xmlns:target="http://www.wrox.com/name" elementFormDefault="qualified">
+ <group name="NoNameGroup">
+ <sequence>
+ <element name="first" type="string"/>
+ <element name="middle" type="string"/>
+ <element name="last" type="string"/>
+ </sequence>
+ </group>
+ <element name="name">
+ <complexType>
+ <group ref="target:NameGroup"/>
+ <attribute name="title" type="string"/>
+ </complexType>
+ </element>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc1.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc1.txt
new file mode 100644
index 0000000000..bf517ec394
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc1.txt
@@ -0,0 +1,22 @@
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://example.org/Calculator#RootType
+Type:http://example.org/CalculatorTypes#AddArguments
+Property:a
+Property:b
+Type:http://example.org/CalculatorTypes#RootType
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc2.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc2.txt
new file mode 100644
index 0000000000..ac4a97479f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/inc2.txt
@@ -0,0 +1,21 @@
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://example.org/Calculator#AddArguments
+Property:a
+Property:b
+Type:http://example.org/Calculator#RootType
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include.xsd
new file mode 100644
index 0000000000..8e89ef40ec
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include.xsd
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:include schemaLocation = "include1.xsd"/>
+ <xsd:include schemaLocation = "./include2.xsd"/>
+ <xsd:include schemaLocation = "../test/test/include3.xsd"/>
+
+
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include1.xsd
new file mode 100644
index 0000000000..65f71c48a6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include1.xsd
@@ -0,0 +1,34 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include2.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include2.xsd
new file mode 100644
index 0000000000..329fd17761
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/include2.xsd
@@ -0,0 +1,33 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/includeother3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/includeother3.xsd
new file mode 100644
index 0000000000..b6ec93f0ba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/includeother3.xsd
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xml
new file mode 100644
index 0000000000..449a9e8b8b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<listtest
+ xmlns="http://www.wrox.com/name"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance"
+ xsi:schemaLocation="http://www.wrox.com/name name.xsd">
+ <integers>1 2 3 4 5 6 7 8 9</integers>
+ <strings>
+ This
+is a strange
+ set of strings
+ </strings>
+</listtest>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xsd
new file mode 100644
index 0000000000..c702cb47c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1.xsd
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.wrox.com/name"
+ xmlns:tns="http://www.wrox.com/name">
+
+<xs:element name="listtest" type="listTestType"/>
+<xs:complexType name="listTestType">
+ <xs:element name="integers" type="intListType"/>
+ <xs:element name="strings" type="stringListType"/>
+</xs:complexType>
+
+<xs:simpleType name="intListType">
+ <xs:list itemType="xs:integer"/>
+</xs:simpleType>
+
+<xs:simpleType name="stringListType">
+ <xs:list itemType="xs:string"/>
+</xs:simpleType>
+
+</xs:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xml.txt
new file mode 100644
index 0000000000..ddf8e8ac22
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xml.txt
@@ -0,0 +1,70 @@
+***** TYPES AFTER RESOLVE*********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:listtest of type listTestType
+Type:http://www.wrox.com/name#intListType
+Property:values (many) of type Integer
+Type:http://www.wrox.com/name#listTestType
+Property:integers (many) of type intListType
+Property:strings (many) of type stringListType
+Type:http://www.wrox.com/name#stringListType
+Property:values (many) of type String
+*******************************END TYPES******************
+===== DataObject contents =====
+integers: list dataObject[0]=
+===== DataObject contents =====
+values: list integer[0]=1
+
+integer[1]=2
+
+integer[2]=3
+
+integer[3]=4
+
+integer[4]=5
+
+integer[5]=6
+
+integer[6]=7
+
+integer[7]=8
+
+integer[8]=9
+
+===== End DataObject =====
+
+strings: list dataObject[0]=
+===== DataObject contents =====
+values: list string[0]=This
+
+string[1]=is
+
+string[2]=a
+
+string[3]=strange
+
+string[4]=set
+
+string[5]=of
+
+string[6]=strings
+
+===== End DataObject =====
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xsd.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xsd.txt
new file mode 100644
index 0000000000..2adeaf3a7c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/list1_xsd.txt
@@ -0,0 +1,28 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://www.wrox.com/name#RootType
+Property:listtest of type listTestType
+Type:http://www.wrox.com/name#intListType
+Property:values (many) of type Integer
+Type:http://www.wrox.com/name#listTestType
+Property:integers (many) of type intListType
+Property:strings (many) of type stringListType
+Type:http://www.wrox.com/name#stringListType
+Property:values (many) of type String
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.txt
new file mode 100644
index 0000000000..a6df48b1be
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><create>#/departments.0/employees.0/opendataobjectlist.0</create><create>#/departments.0/employees.0/opendataobject</create><create>#/departments.0/employees.0</create></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true"><openintlist>45</openintlist><opendataobjectlist xsi:type="OpenType" name="MyOpenName"/><opendataobject xsi:type="OpenType" name="MyOpenName"/></employees><employees name="Boris" SN="E0002" manager="true"/><employees name="Carl" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.xml
new file mode 100644
index 0000000000..a6df48b1be
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/loadload-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><create>#/departments.0/employees.0/opendataobjectlist.0</create><create>#/departments.0/employees.0/opendataobject</create><create>#/departments.0/employees.0</create></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true"><openintlist>45</openintlist><opendataobjectlist xsi:type="OpenType" name="MyOpenName"/><opendataobject xsi:type="OpenType" name="MyOpenName"/></employees><employees name="Boris" SN="E0002" manager="true"/><employees name="Carl" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/main.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/main.cpp
new file mode 100644
index 0000000000..b95587b7f3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/main.cpp
@@ -0,0 +1,175 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: main.cpp,v 1.1 2006/03/16 10:54:16 slattery Exp $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+using namespace std;
+
+#include "sdotest.h"
+
+extern "C"{
+
+#define TEST(testname)\
+ value = testname;\
+ if (value == 0) {\
+ cout << "Test Failed:" << totaltests << endl;\
+ }\
+ testspassed += value;\
+ totaltests++;
+
+int main (int argc, char** argv)
+{
+ //Logger::setLogging(20);
+
+ int testspassed=0;
+ int totaltests=0;
+ int value = 0;
+
+ /* TEST ( sdotest::xhtml1() ); */
+ TEST ( sdotest::scopetest() );
+ TEST ( sdotest::xsdtosdo() );
+
+ /* groups now supported*/
+ TEST ( sdotest::testany("list1.xsd",0,"list1.xml", 0) );
+ TEST ( sdotest::testany("b48636.xsd",0,"b48636.xml", 0) );
+ TEST ( sdotest::testany("groupwithprefix.xsd", 0, 0, 0) );
+ TEST ( sdotest::testany("groupwrongname.xsd","Use of undefined group NameGroup", 0, 0) );
+
+ // late definition of group now supported
+ TEST ( sdotest::testany("grouptoolate.xsd",0 , 0, 0) );
+
+ // group definition within group now ignored
+
+ TEST ( sdotest::testany("groupingroup.xsd","Use of undefined group NameGroup2",0, 0) );
+ TEST ( sdotest::testany("grouprefingroup.xsd",0,0, 0) );
+ TEST ( sdotest::testany("bothgroups.xsd",0,0, 0) );
+ TEST ( sdotest::testany("bothgroupssamename.xsd",0,0, 0) );
+
+ /* general tests */
+ TEST ( sdotest::pete() );
+ TEST ( sdotest::stocktest() );
+ TEST ( sdotest::definetest() );
+ TEST ( sdotest::emptycs() );
+ TEST ( sdotest::openseq() );
+ TEST ( sdotest::testanytwo("b48633b.xsd","b48633.xsd","b48633.xml") );
+ TEST ( sdotest::testany("b48686.xsd",0, "b48686.xml", 0) );
+ TEST ( sdotest::testany("b48636.xsd","Use of undefined group NameGroup","b48636.xml", 0) );
+ TEST ( sdotest::b48602() );
+ TEST ( sdotest::compatiblefactory() );
+ TEST ( sdotest::simple() );
+ TEST ( sdotest::testOrder("employee.xsd","extension.xsd","order1.dat","order1.txt") );
+ TEST ( sdotest::testOrder("extension.xsd","employee.xsd","order2.dat","order2.txt") );
+ TEST ( sdotest::testOpen() );
+ TEST ( sdotest::testinc2("calculator2.wsdl","inc1.dat","inc1.txt") );
+ TEST ( sdotest::testinc2("calculator2a.wsdl","inc2.dat","inc2.txt") );
+ TEST ( sdotest::teststyles() );
+ TEST ( sdotest::badelement() );
+ TEST ( sdotest::oddchars() );
+ TEST ( sdotest::notns() );
+ TEST ( sdotest::unsetlist() );
+ TEST ( sdotest::travel() );
+ /*TEST ( sdotest::testwsdl() );*/
+ TEST ( sdotest::bunique() );
+ TEST ( sdotest::buniqueread() );
+ TEST ( sdotest::propdefaulttest() );
+ TEST ( sdotest::graham5() );
+ TEST ( sdotest::graham4() );
+ TEST ( sdotest::detachtest() );
+ TEST ( sdotest::includetest() );
+ TEST ( sdotest::testLoad() );
+ TEST ( sdotest::leak() );
+ TEST ( sdotest::twolists() );
+ TEST ( sdotest::testUtil() );
+ TEST ( sdotest::clonetest() );
+ TEST ( sdotest::notfound() );
+ TEST ( sdotest::testErrors() );
+ TEST ( sdotest::loadManyOpen() );
+ TEST ( sdotest::doctest() );
+ TEST ( sdotest::graham3() );
+ TEST ( sdotest::graham1() );
+ TEST ( sdotest::graham2() );
+ TEST ( sdotest::merle1() );
+ TEST ( sdotest::loadOpenNS() );
+ TEST ( sdotest::saveOpen() );
+ TEST ( sdotest::loadOpen() );
+ TEST ( sdotest::testui() );
+ TEST ( sdotest::testSCA() );
+ TEST ( sdotest::testabstract() );
+ TEST ( sdotest::testsubsload() );
+ TEST ( sdotest::testsubs() );
+ TEST ( sdotest::setnull() );
+ TEST ( sdotest::bug2() );
+ TEST ( sdotest::cssave2() );
+ TEST ( sdotest::csload2() );
+ TEST ( sdotest::cssave() );
+ TEST ( sdotest::csload() );
+ TEST ( sdotest::bug1() );
+ TEST ( sdotest::eqhelpertest() );
+ TEST ( sdotest::cohelpertest() );
+ TEST ( sdotest::datetest() );
+ TEST ( sdotest::carotest3() );
+ TEST ( sdotest::matttest1() );
+ TEST ( sdotest::adddeletetest() );
+ TEST ( sdotest::carotest2() );
+ TEST ( sdotest::carotest() );
+ TEST ( sdotest::setmany() );
+ TEST ( sdotest::noncontest() );
+ TEST ( sdotest::versiontest() );
+ TEST ( sdotest::defaulttest() );
+ TEST ( sdotest::defaulttest_strobj() );
+ TEST ( sdotest::nulltest() );
+ TEST ( sdotest::usertest() );
+ TEST ( sdotest::querytest() );
+ TEST ( sdotest::getproptest() );
+ TEST ( sdotest::rcptest() );
+ TEST ( sdotest::seqtest() );
+ TEST ( sdotest::changesummarytest() );
+ TEST ( sdotest::conversiontest() );
+ TEST ( sdotest::boolbug() );
+ TEST ( sdotest::scope1() );
+ TEST ( sdotest::scope2() );
+ TEST ( sdotest::scope3() );
+ TEST ( sdotest::maintest() );
+
+ /* regression tests */
+ TEST ( sdotest::b48736() );
+ /*TEST ( sdotest::b48601() );*/
+ TEST ( sdotest::b47293() );
+ TEST ( sdotest::b48300() );
+ TEST ( sdotest::b47663() );
+ TEST ( sdotest::b47802() );
+ TEST ( sdotest::b47137() );
+ TEST ( sdotest::b47137b() );
+ TEST ( sdotest::b46633() );
+ TEST ( sdotest::b46693() );
+ /* TEST ( sdotest::b46734() ); */
+ TEST ( sdotest::b46634() );
+ TEST ( sdotest::b46617b() );
+ TEST ( sdotest::b46617() );
+ TEST ( sdotest::b46613() );
+ TEST ( sdotest::b45933() );
+
+ cout << "Total tests:" << totaltests << " Tests passed:" << testspassed << endl;
+
+return 0;
+}
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/maintest.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/maintest.txt
new file mode 100644
index 0000000000..860a763eb5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/maintest.txt
@@ -0,0 +1,188 @@
+Test Program starting to create types ...
+Manager is sequenced?1
+Manager is sequenced?1
+Manager is sequenced?1
+Manager is sequenced?1
+Manager is sequenced?1
+Manager is sequenced?1
+Manager is sequenced?1
+Should be Company :Company
+Should be 3: 3
+Alias: TheFirm
+Alias: TheBigFirm
+Alias: TheLittleFirm
+Manager is sequenced?1
+BEFORE RESOLUTION
+Printing Types
+Type BigDecimal
+Type BigInteger
+Type Boolean
+Type Byte
+Type Bytes
+Type ChangeSummary
+Type Character
+Type DataObject
+Type Date
+Type Double
+Type Float
+Type Integer
+Type Long
+Type OpenDataObject
+Type Short
+Type String
+Type URI
+Type Company
+Has Property name of type String
+Has Property address of type String
+Has Property departments of type Department
+Has Property employee of the month of type Employee
+Has Property floatlist of type Float
+Has Property pdg of type Manager
+Has Property shareholder of type Person
+Has Property substring of type DerivedString
+Has Property subdepartments of type SubDepartment
+Type Department
+Has Property name of type String
+Has Property id of type Integer
+Has Property manager of type Manager
+Has Property employees of type Employee
+Type DerivedString
+Type Employee
+Has Property name of type String
+Has Property cubelocation of type String
+Type Manager
+Has Property name of type String
+Has Property officeid of type String
+Has Property string of type String
+Has Property boolean of type Boolean
+Has Property byte of type Byte
+Has Property character of type Character
+Has Property short of type Short
+Has Property long of type Integer
+Has Property longlong of type Long
+Has Property float of type Float
+Has Property longdouble of type Double
+Has Property date of type Date
+Has Property string of type String
+Has Property bytes of type Bytes
+Type Person
+Has Property haircolour of type String
+Has Property name of type String
+Type SubDepartment
+Has Property subname of type String
+AFTER RESOLUTION
+Printing Types
+Type BigDecimal
+Type BigInteger
+Type Boolean
+Type Byte
+Type Bytes
+Type ChangeSummary
+Type Character
+Type DataObject
+Type Date
+Type Double
+Type Float
+Type Integer
+Type Long
+Type OpenDataObject
+Type Short
+Type String
+Type URI
+Type Company
+Has Property name of type String
+Has Property address of type String
+Has Property departments of type Department
+Has Property employee of the month of type Employee
+Has Property floatlist of type Float
+Has Property pdg of type Manager
+Has Property shareholder of type Person
+Has Property substring of type DerivedString
+Has Property subdepartments of type SubDepartment
+Type Department
+Has Property name of type String
+Has Property id of type Integer
+Has Property manager of type Manager
+Has Property employees of type Employee
+Type DerivedString
+Type Employee
+Has Property haircolour of type String
+Has Property name of type String
+Has Property name of type String
+Has Property cubelocation of type String
+Type Manager
+Has Property haircolour of type String
+Has Property name of type String
+Has Property name of type String
+Has Property officeid of type String
+Has Property string of type String
+Has Property boolean of type Boolean
+Has Property byte of type Byte
+Has Property character of type Character
+Has Property short of type Short
+Has Property long of type Integer
+Has Property longlong of type Long
+Has Property float of type Float
+Has Property longdouble of type Double
+Has Property date of type Date
+Has Property string of type String
+Has Property bytes of type Bytes
+Type Person
+Has Property haircolour of type String
+Has Property name of type String
+Type SubDepartment
+Has Property name of type String
+Has Property id of type Integer
+Has Property manager of type Manager
+Has Property employees of type Employee
+Has Property subname of type String
+Manager is sequenced?1
+This is the sub string - its primitive, but not a string
+acmecorp
+acmecorp
+Expected default boolean (false) : false
+Expected boolean (true) : true
+Expected default string (0) : Now able to set
+ - should say now able to set
+
+ Name from deleted item: Now able to set
+0xffffffffffffffff = : -1
+0x7fffffffffffffff = 9223372036854775807
+0x7fffffff = 2147483647
+0x80000000 = 2147483648
+ Expected Wide - got : Wide
+ Expected Thin - got : Thin
+Expecting string, got Wide
+Expected bool true, got 1
+Expected char 23, got 23
+expected wchar 45, got 45Expected short 34, got 34
+Expected long 56 , got 56
+Expected long long 78, got 78
+Expected long double 89, got 89.000
+Expected float 90, got 90.000
+Expected time_t 200, got 200
+Wide[0]=87
+Wide[1]=105
+Wide[2]=100
+Wide[3]=101
+Thin[0]=84
+Thin[1]=104
+Thin[2]=105
+Thin[3]=110
+1.400567.700Should be Bill:Bill
+Should be Bill:Bill
+The employee of the month is Bill
+Now able to set
+pdg correctly identified
+Now able to set
+size of list 5
+Research And Development
+Research And Development
+Department: Research And Development
+Department: Marketing
+Department: Architecture
+Department: Pyrotechnics
+Department: Accounts
+Normal expected exception
+Normal Invalid path exception
+Normal SDOPropertyNotFound exception
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xml
new file mode 100644
index 0000000000..15be354bf3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" >
+<openlist>Three member</openlist>
+<openlist>Open bytes</openlist>
+<openlist>List is complete</openlist>
+</employees><employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xsd
new file mode 100644
index 0000000000..40243b7b8d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/many.xsd
@@ -0,0 +1,17 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="companyNS" targetNamespace="companyNS"><xsd:element name="companyType" type="tns:CompanyType"/><xsd:complexType name="CompanyType" sdo:aliasName="TheFirm TheBigFirm"><xsd:sequence><xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded" sdo:aliasName="TheDepartments MYDepartments"/></xsd:sequence><xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:anyURI"/></xsd:complexType><xsd:element name="departmentType" type="tns:DepartmentType"/><xsd:complexType name="DepartmentType"><xsd:sequence><xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="location" type="xsd:String"/><xsd:attribute name="number" type="xsd:String"/></xsd:complexType><xsd:element name="employeeType" type="tns:EmployeeType"/><xsd:complexType name="EmployeeType"><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="SN" type="xsd:String"/><xsd:attribute name="manager" type="xsd:boolean"/><xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/><xsd:anyAttribute namespace="##any" processContents="lax"/></xsd:complexType><xsd:element name="openType" type="tns:OpenType"/><xsd:complexType name="OpenType"><xsd:attribute name="name" type="xsd:String"/></xsd:complexType></xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/matttest1.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/matttest1.txt
new file mode 100644
index 0000000000..5c5200ff22
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/matttest1.txt
@@ -0,0 +1,2 @@
+Container of Billy should be dept1, and is :Shoe
+Container of Billy should be dept2, and is :IT
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/merle1.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/merle1.txt
new file mode 100644
index 0000000000..f0eae645b6
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/merle1.txt
@@ -0,0 +1,10 @@
+<SubscriptionId>I am the subscription ID string</SubscriptionId>
+<AssociateTag>I am the associate Tag string</AssociateTag>
+<XMLEscaping>I am the XML escaping string</XMLEscaping>
+<Validate>I am the Validate string</Validate>
+DataObject "Shared" as XML:
+<Shared xmlns="axis" xsi:type="ItemSearchRequest" xmlns:tns="axis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Keywords>SharedKeywordsString</Keywords><SearchIndex>SearchIndexString</SearchIndex></Shared>
+
+DataObject "Request" as XML:
+<Request xmlns="axis" xsi:type="ItemSearchRequest" xmlns:tns="axis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Keywords>RequestKeywords</Keywords><SearchIndex>RequestSearchIndex</SearchIndex></Request>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-core.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-core.xsd
new file mode 100644
index 0000000000..9bc25a10fb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-core.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+
+
+ <complexType name="Component">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:implementation"/>
+ </sequence>
+ </complexType>
+
+ <element name="implementation" type="sca:Implementation"/>
+ <complexType name="Implementation"/>
+
+
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-implementation-local-java.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-implementation-local-java.xsd
new file mode 100644
index 0000000000..a31c3f6593
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my-implementation-local-java.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="my-core.xsd"/>
+
+ <element name="implementation.local.java" type="sca:LocalJavaImplementation" substitutionGroup="sca:implementation" sdo:name="implementationLocalJava"/>
+ <complexType name="LocalJavaImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <attribute name="scope" type="sca:Scope" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my.xsd
new file mode 100644
index 0000000000..9d39e03f47
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/my.xsd
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/">
+
+ <include schemaLocation="my-core.xsd"/>
+
+ <include schemaLocation="my-implementation-local-java.xsd"/>
+
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.txt
new file mode 100644
index 0000000000..a6f2bc0411
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xsi:type="Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><list/><list/><list/></root>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.xml
new file mode 100644
index 0000000000..a6f2bc0411
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/notns.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root xsi:type="Root" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><list/><list/><list/></root>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/nulltest.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/nulltest.txt
new file mode 100644
index 0000000000..01442ec949
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/nulltest.txt
@@ -0,0 +1,91 @@
+Initially - all properties unset, and default values...
+boolean set:0 value false
+byte set:0 value 0
+character set:0 value 0
+short set:0 value 0
+long set:0 value 0
+longlong set:0 value
+float set:0 value
+longdouble set:0 value
+date set:0 value
+string set:0 value
+bytes set:0 value
+object set: 0 value: is empty
+Should now have all properties set, and zero values...
+boolean set:1 value:false
+byte set:1 value:0
+character set:1 value:0
+short set:1 value:0
+long set:1 value:0
+longlong set:1 value:0
+float set:1 value:0.000e+000
+longdouble set:1 value:0.000e+000
+date set:1 value:0
+string set:1 value:
+bytes set:1 value:
+object set:1 dataobject
+Should be back to having properties unset, and default values...
+boolean set:0 value:false
+byte set:0 value:0
+character set:0 value:0
+short set:0 value:0
+long set:0 value:0
+longlong set:0 value:
+float set:0 value:
+longdouble set:0 value:
+date set:0 value:
+string set:0 value:
+bytes set:0 value:
+object set: 0 dataobject is empty
+boolean set:1 value:false
+byte set:1 value:0
+character set:1 value:0
+short set:1 value:0
+long set:1 value:0
+longlong set:1 value:0
+float set:1 value:0.000e+000
+longdouble set:1 value:0.000e+000
+date set:0 value:
+string set:1 value:
+bytes set:1 value:
+object set:1 dataobject is empty
+Modified dataobject
+Should all be null, and default values...
+boolean isNull:1 set:1 value:
+byte isNull:1 set:1 value:
+character isNull:1 set:1 value:
+short isNull:1 set:1 value:
+long isNull:1 set:1 value:
+longlong isNull:1 set:1 value:
+float isNull:1 set:1 value:
+longdouble isNull:1 set:1 value:
+date isNull:1 set:1 value:
+string isNull:1 set:1 value:
+bytes isNull:1 set:1 value:
+object isNull:1 set:1 value empty
+Should all have values, and not be null..
+boolean isNull:0 set:1 value:true
+byte isNull:0 set:1 value:1
+character isNull:0 set:1 value:1
+short isNull:0 set:1 value:1
+long isNull:0 set:1 value:1
+longlong isNull:0 set:1 value:1
+float isNull:0 set:1 value:1.000e+000
+longdouble isNull:0 set:1 value:1.000e+000
+date isNull:1 set:1 value:
+string isNull:0 set:1 value:hello
+bytes isNull:0 set:1 value:hello
+object isNull0 set:1 value: dataobject
+Should all be null, and default values...
+boolean isNull:1 set:1 value:
+byte isNull:1 set:1 value:
+character isNull:1 set:1 value:
+short isNull:1 set:1 value:
+long isNull:1 set:1 value:
+longlong isNull:1 set:1 value:
+float isNull:1 set:1 value:
+longdouble isNull:1 set:1 value:
+date isNull:1 set:1 value:
+string isNull:1 set:1 value:
+bytes isNull:1 set:1 value:
+object isNull;1 set:1 value: empty
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/oddchars.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/oddchars.txt
new file mode 100644
index 0000000000..b9ed9643b3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/oddchars.txt
@@ -0,0 +1,22 @@
+===== DataObject contents =====
+Flight: list dataObject[0]=
+===== DataObject contents =====
+Departure:string:ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø׃áíóúñѪº¿®¬½¼¡«»░▒▓│┤ÃÂÀ©╣║╗â•Â¢Â¥â”└┴┬├─┼ãÃ╚╔╔╩╦╠â•â•¬Â¤Ã°ÃÊËÈıÃÃŽÃŽÃ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýï´­±‗¾¶§÷¸°¨·¹³²■ 
+
+Arrival:string:Pound:£ Dollar:$ Euro:Ç or █
+
+flightNo:string:BA243
+
+===== End DataObject =====
+
+Hotel: list (empty)
+Excursion:dataObject
+ - null or unset
+
+Client:dataObject
+ - null or unset
+
+Party:dataObject
+ - null or unset
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xml
new file mode 100644
index 0000000000..b0b7bc638f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tp="teapot" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" tp:openstring="Value Of Open String" tp:openboolean="true">
+<tp:openintlist>45</tp:openintlist>
+</employees>
+<employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xsd
new file mode 100644
index 0000000000..5d39e6488d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS.xsd
@@ -0,0 +1,49 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
+xmlns:tns="companyNS" targetNamespace="companyNS">
+<xsd:element name="companyType" type="tns:CompanyType"/>
+<xsd:complexType name="CompanyType" sdo:aliasName="TheFirm TheBigFirm">
+<xsd:sequence>
+<xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded" sdo:aliasName="TheDepartments MYDepartments"/>
+</xsd:sequence>
+<xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/>
+<xsd:attribute name="name" type="xsd:String"/>
+<xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:anyURI"/>
+</xsd:complexType><xsd:element name="departmentType" type="tns:DepartmentType"/>
+<xsd:complexType name="DepartmentType">
+<xsd:sequence>
+<xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/>
+</xsd:sequence>
+<xsd:attribute name="name" type="xsd:String"/>
+<xsd:attribute name="location" type="xsd:String"/>
+<xsd:attribute name="number" type="xsd:String"/>
+</xsd:complexType>
+<xsd:element name="employeeType" type="tns:EmployeeType"/>
+<xsd:complexType name="EmployeeType">
+<xsd:attribute name="name" type="xsd:String"/>
+<xsd:attribute name="SN" type="xsd:String"/>
+<xsd:attribute name="manager" type="xsd:boolean"/>
+<xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:anyAttribute namespace="##any" processContents="lax"/>
+</xsd:complexType>
+<xsd:element name="openType" type="tns:OpenType"/>
+<xsd:complexType name="OpenType">
+<xsd:attribute name="name" type="xsd:String"/>
+</xsd:complexType>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xml
new file mode 100644
index 0000000000..16670a8b65
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tp="twilbur" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" tp:openstring="Value Of Open String" tp:openboolean="true">
+<tp:openintlist>45</tp:openintlist>
+</employees>
+<employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xsd
new file mode 100644
index 0000000000..34f5fd05ff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNS2.xsd
@@ -0,0 +1,24 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml"
+xmlns:tns="teapot" targetNamespace="teapot">
+<xsd:attribute name="openboolean" type="xsd:boolean"/>
+<xsd:element name="openintlist" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/>
+<xsd:attribute name="openstring" type="xsd:hexBinary"/>
+</xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.txt
new file mode 100644
index 0000000000..742842bd3e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><create>#/departments.0/employees.0</create></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true"><openintlist>45</openintlist></employees><employees name="Boris" SN="E0002" manager="true"/><employees name="Carl" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.xml
new file mode 100644
index 0000000000..742842bd3e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openloadNSout.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME"><sdo:changeSummary xmlns:sdo="commonj.sdo" logging="true"><create>#/departments.0/employees.0</create></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true"><openintlist>45</openintlist></employees><employees name="Boris" SN="E0002" manager="true"/><employees name="Carl" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openseq.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openseq.txt
new file mode 100644
index 0000000000..44091f2608
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/openseq.txt
@@ -0,0 +1,3 @@
+Open Type string value: Value Of Open String
+Open Sequenced string value: Value of sequenced string
+Open Sequenced string value from seq: Value of sequenced string
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order1.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order1.txt
new file mode 100644
index 0000000000..4f46cbfecf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order1.txt
@@ -0,0 +1,19 @@
+Type:#Address
+Property:name
+Property:street
+Property:city
+Type:#RootType
+Property:employee
+Type:#UKAddress
+Property:value
+Property:postcode
+Type:#USAddress
+Property:value
+Property:zip
+Type:#fullpersoninfo
+Property:address
+Property:city
+Property:country
+Type:#personinfo
+Property:firstname
+Property:lastname
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order2.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order2.txt
new file mode 100644
index 0000000000..ec01027ebb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/order2.txt
@@ -0,0 +1,20 @@
+Type:#Address
+Property:name
+Property:street
+Property:city
+Type:#RootType
+Property:employee
+Type:#UKAddress
+Property:value
+Property:postcode
+Type:#USAddress
+Property:value
+Property:zip
+Type:#fullpersoninfo
+Property:value
+Property:address
+Property:city
+Property:country
+Type:#personinfo
+Property:firstname
+Property:lastname
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/partial.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/partial.xml
new file mode 100644
index 0000000000..e6f51e20f0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/partial.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME">
+<sdo:changeSummary xmlns:sdo="commonj.sdo">
+<create>#/departments.0/employees.0</create>
+</sdo:changeSummary>
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true">
+<openintlist>45</openintlist>
+<opendataobjectlist xmlns="companyNS" xsi:type="OpenType" name="MyOpenName"/>
+<opendataobject xsi:type="OpenType" name="MyOpenName"/>
+</employees><employees name="Boris" SN="E0002" manager="true"/>
+<employees name="Carl" SN="E0003"/>
+</departments>
+</company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xml
new file mode 100644
index 0000000000..1ed7514d5c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xml
@@ -0,0 +1,36 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<StockQuotes>
+<Stock>
+<Symbol>IBM</Symbol>
+<Last>79.78</Last>
+<Date>5/24/2006</Date>
+<Time>4:01pm</Time>
+<Change>0.00</Change>
+<Open>N/A</Open>
+<High>N/A</High>
+<Low>N/A</Low>
+<Volume>900</Volume>
+<MktCap>123.7B</MktCap>
+<PreviousClose>79.78</PreviousClose>
+<PercentageChange>0.00</PercentageChange>
+<AnnRange>73.45 - 89.94</AnnRange>
+<Earns>5.121</Earns>
+<P-E>15.58</P-E>
+<Name>INTL BUSINESS MAC</Name>
+</Stock>
+</StockQuotes>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xsd
new file mode 100644
index 0000000000..5f4c0e1ac9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/pete.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="StockQuotes">
+ <xs:complexType >
+ <xs:sequence>
+ <xs:element name="Stock" minOccurs="0" maxOccurs="unbounded">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="1" name="Symbol" type="xs:string"/>
+ <xs:element minOccurs="0" maxOccurs="1" name="Last" type="xs:float"/>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+</xs:element>
+ <xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ <xs:anyAttribute namespace="##any" processContents="lax"/>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/querytest.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/querytest.txt
new file mode 100644
index 0000000000..9b895282a0
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/querytest.txt
@@ -0,0 +1,17 @@
+Expected employee3: got Employee3
+Expected employee1: got Employee1
+Expected employee2: got Employee2
+Expected employee1: got Employee1
+Expected employee1: got Employee1
+Expected employee1: got Employee1
+Expected employee1: got Employee1
+Expected employee3: got Employee3
+Expected employee2: got Employee2
+Expected employee2: got Employee2
+Expected employee2: got Employee2
+Expected employee2: got Employee2
+Normal exception caught
+Normal exception caught
+Normal exception caught
+Normal exception caught
+Normal exception caught
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.txt
new file mode 100644
index 0000000000..fa36e7113c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME"><sdo:changeSummary xmlns:sdo="commonj.sdo"><create>#/departments.0/employees.0</create><create>#/departments.0/employees.1</create><create>#/departments.0/employees.2</create><create>#/departments.0/employees.0/opendataobjectlist.0</create><departments sdo:ref="#/departments.0" name="" location="" number=""/></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true"><openintlist>45</openintlist><opendataobjectlist xsi:type="OpenType" name="MyOpenName"/><opendataobject xsi:type="OpenType" name="MyOpenName"/></employees><employees name="Boris" SN="E0002" manager="true"/><employees name="Carl" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xml
new file mode 100644
index 0000000000..fa36e7113c
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<company xmlns="companyNS" xsi:type="CompanyType" xmlns:tns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="ACME"><sdo:changeSummary xmlns:sdo="commonj.sdo"><create>#/departments.0/employees.0</create><create>#/departments.0/employees.1</create><create>#/departments.0/employees.2</create><create>#/departments.0/employees.0/opendataobjectlist.0</create><departments sdo:ref="#/departments.0" name="" location="" number=""/></sdo:changeSummary><departments name="Advanced Technologies" location="NY" number="123"><employees name="Albert" SN="E0001" openstring="Value Of Open String" openboolean="true"><openintlist>45</openintlist><opendataobjectlist xsi:type="OpenType" name="MyOpenName"/><opendataobject xsi:type="OpenType" name="MyOpenName"/></employees><employees name="Boris" SN="E0002" manager="true"/><employees name="Carl" SN="E0003"/></departments></company>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xsd
new file mode 100644
index 0000000000..f5066094fd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/saveopen-output.xsd
@@ -0,0 +1 @@
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="companyNS" targetNamespace="companyNS"><xsd:element name="companyType" type="CompanyType"/><xsd:complexType name="CompanyType" sdo:aliasName="TheFirm TheBigFirm"><xsd:sequence><xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded" sdo:aliasName="TheDepartments MYDepartments"/></xsd:sequence><xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:IDREF"/></xsd:complexType><xsd:element name="departmentType" type="DepartmentType"/><xsd:complexType name="DepartmentType"><xsd:sequence><xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="location" type="xsd:String"/><xsd:attribute name="number" type="xsd:String"/></xsd:complexType><xsd:element name="employeeType" type="EmployeeType"/><xsd:complexType name="EmployeeType"><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="SN" type="xsd:String"/><xsd:attribute name="manager" type="xsd:boolean"/><xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/><xsd:anyAttribute namespace="##any" processContents="lax"/></xsd:complexType><xsd:element name="openType" type="OpenType"/><xsd:complexType name="OpenType"><xsd:attribute name="name" type="xsd:String"/></xsd:complexType><xsd:attribute name="openboolean" type="xsd:boolean"/><xsd:element name="opendataobject" type="tns:OpenType" minOccurs="0"/><xsd:element name="opendataobjectlist" type="tns:OpenType" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="openintlist" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/><xsd:attribute name="openstring" type="xsd:hexBinary"/></xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-sca.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-sca.xsd
new file mode 100644
index 0000000000..dee53020ab
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-sca.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.sca" type="sca:SCARemoteBinding" substitutionGroup="sca:binding" sdo:name="bindingSca"/>
+ <complexType name="SCARemoteBinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="target" type="anyURI" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-webservice.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-webservice.xsd
new file mode 100644
index 0000000000..c73bffe1e8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-webservice.xsd
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.ws" type="sca:WebServiceBinding" substitutionGroup="sca:binding"/>
+ <complexType name="WebServiceBinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="port" type="anyURI" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-ws.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-ws.xsd
new file mode 100644
index 0000000000..84de1db758
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-binding-ws.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="binding.ws" type="sca:WebServiceBinding" substitutionGroup="sca:binding" sdo:name="bindingWs"/>
+ <complexType name="WebServiceBinding">
+ <complexContent>
+ <extension base="sca:Binding">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="port" type="anyURI" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-core.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-core.xsd
new file mode 100644
index 0000000000..7b5c4199bf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-core.xsd
@@ -0,0 +1,230 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-policy.xsd" />
+
+ <element name="componentType" type="sca:ComponentType"/>
+ <complexType name="ComponentType">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="service" type="sca:Service"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="reference" type="sca:Reference"/>
+ <element minOccurs="0" maxOccurs="unbounded" ref="sca:property"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="Service">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="interface" type="sca:Interface"/>
+ <complexType name="Interface"/>
+
+ <complexType name="Reference">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="multiplicity" type="sca:Multiplicity" use="optional" default="1..1"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="property" type="sca:Property"/>
+ <complexType name="Property" abstract="true">
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="many" type="boolean" default="false" use="optional"/>
+ <attribute name="default" type="string" use="optional"/>
+ </complexType>
+
+
+ <element name="moduleFragment" type="sca:ModuleFragment"/>
+ <complexType name="ModuleFragment">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="entryPoint" type="sca:EntryPoint"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="component" type="sca:Component"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="externalService" type="sca:ExternalService"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="wire" type="sca:ModuleWire"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="module" type="sca:ModuleFragment"/>
+
+
+ <complexType name="EntryPoint">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:binding"/>
+ <element minOccurs="1" maxOccurs="1" name="reference" type="anyType"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="overridable" type="boolean" default="true" use="optional"/>
+ <attribute name="multiplicity" type="sca:Multiplicity" use="optional" default="1..1"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+ <!-- a multiplicity 1..1 sample
+ <reference>StockQuoteComponent</reference> - type must be URI
+ a multiplicity 0..n sample
+ <reference>
+ <value>StockQuoteComponent1</value> - type must be URI
+ <value>StockQuoteComponent2</value>
+ </reference>
+ -->
+
+ <element name="binding" type="sca:Binding"/>
+ <complexType name="Binding"/>
+
+
+ <complexType name="Component">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:implementation"/>
+ <element minOccurs="0" maxOccurs="1" name="properties" type="sca:PropertyValues"/>
+ <element minOccurs="0" maxOccurs="1" name="references" type="sca:ReferenceValues"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+ <!-- a multiplicity 1..1 sample
+ <references>
+ <v:stockQuote>StockQuoteComponent</v:stockquote> - type must be URI
+ </references>
+ a multiplicity 0..n sample
+ <references>
+ <v:stockQuote>
+ <value>StockQuoteComponent1</value> - type must be URI
+ <value>StockQuoteComponent2</value>
+ </v:stockquote>
+ </references>
+ -->
+
+ <element name="implementation" type="sca:Implementation"/>
+ <complexType name="Implementation"/>
+
+ <complexType name="PropertyValues">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+ <complexType name="ReferenceValues">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+
+ <complexType name="ExternalService">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:interface"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:binding"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="overridable" type="boolean" default="true" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+
+ <complexType name="ModuleWire">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:source.uri" sdo:name="sourceUri"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:target.uri" sdo:name="targetUri"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <element name="source.uri" type="anyURI" substitutionGroup="sca:source" sdo:name="sourceUri"/>
+ <element name="target.uri" type="anyURI" substitutionGroup="sca:target" sdo:name="targetUri"/>
+
+
+ <element name="subsystem" type="sca:Subsystem"/>
+ <complexType name="Subsystem">
+ <sequence>
+ <element minOccurs="0" maxOccurs="unbounded" name="entryPoint" type="sca:EntryPoint"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="moduleComponent" type="sca:ModuleComponent"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="externalService" type="sca:ExternalService"/>
+ <element minOccurs="0" maxOccurs="unbounded" name="wire" type="sca:SystemWire"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+
+ <complexType name="ModuleComponent">
+ <sequence>
+ <element minOccurs="0" maxOccurs="1" name="references" type="sca:ReferenceValues"/>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="name" type="NCName" use="required"/>
+ <attribute name="module" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </complexType>
+
+ <complexType name="SystemWire">
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" ref="sca:source.uri" sdo:name="sourceUri"/>
+ <element minOccurs="1" maxOccurs="1" ref="sca:target.uri" sdo:name="targetUri" />
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ </complexType>
+
+ <element name="source" type="anyType"/>
+ <element name="source.epr" type="anyType" substitutionGroup="sca:source" sdo:name="sourceEpr"/>
+
+ <element name="target" type="anyType"/>
+ <element name="target.epr" type="anyType" substitutionGroup="sca:target" sdo:name="targetEpr"/>
+
+
+ <simpleType name="Multiplicity">
+ <restriction base="string">
+ <enumeration value="0..1"/>
+ <enumeration value="1..1"/>
+ <enumeration value="0..n"/>
+ <enumeration value="1..n"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="Scope">
+ <restriction base="string">
+ <enumeration value="instance"/>
+ <enumeration value="request"/>
+ <enumeration value="session"/>
+ <enumeration value="module"/>
+ </restriction>
+ </simpleType>
+
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-dll.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-dll.xsd
new file mode 100644
index 0000000000..a9ef738420
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-dll.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.dll" type="sca:DLLImplementation" substitutionGroup="sca:implementation" sdo:name="implementationDll"/>
+ <complexType name="DLLImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="dll" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-java.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-java.xsd
new file mode 100644
index 0000000000..b5f20f2ff4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-java.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.java" type="sca:JavaImplementation" substitutionGroup="sca:implementation" sdo:name="implementationJava"/>
+ <complexType name="JavaImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-local-java.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-local-java.xsd
new file mode 100644
index 0000000000..5c7c87ffdd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-implementation-local-java.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="implementation.local.java" type="sca:LocalJavaImplementation" substitutionGroup="sca:implementation" sdo:name="implementationLocalJava"/>
+ <complexType name="LocalJavaImplementation">
+ <complexContent>
+ <extension base="sca:Implementation">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <attribute name="scope" type="sca:Scope" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-cpp.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-cpp.xsd
new file mode 100644
index 0000000000..81ff6bbcf5
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-cpp.xsd
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.cpp" type="sca:CPPInterface" substitutionGroup="sca:interface"
+ sdo:name="interfaceCpp"/>
+ <complexType name="CPPInterface">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <element minOccurs="1" name="operation" type="sca:Operation"/>
+ </sequence>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+
+ <!-- C++ operation declaration -->
+ <complexType name="Operation">
+ <complexContent>
+ <sequence>
+ <element minOccurs="1" maxOccurs="1" name="return" type="sca:ReturnType"/>
+ <element minOccurs="0" name="parameter" type="sca:ParameterType"/>
+ </sequence>
+ <attribute name="name" type="string" use="required"/>
+ </complexContent>
+ </complexType>
+
+ <simpleType name="ReturnType">
+ <restriction base="string">
+ <enumeration value="float"/>
+ <enumeration value="void"/>
+ </restriction>
+ </simpleType>
+
+ <simpleType name="ParameterType">
+ <restriction base="string">
+ <enumeration value="float"/>
+ <enumeration value="const char *"/>
+ </restriction>
+ </simpleType>
+
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-java.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-java.xsd
new file mode 100644
index 0000000000..fa132ff69a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-java.xsd
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.java" type="sca:JavaInterface" substitutionGroup="sca:interface" sdo:name="interfaceJava"/>
+ <complexType name="JavaInterface">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="interface" type="NCName" use="required"/>
+ <attribute name="callbackInterface" type="NCName" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-wsdl.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-wsdl.xsd
new file mode 100644
index 0000000000..0cfcfeaebd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-interface-wsdl.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="interface.wsdl" type="sca:WSDLPortType" substitutionGroup="sca:interface" sdo:name="interfaceWsdl"/>
+ <complexType name="WSDLPortType">
+ <complexContent>
+ <extension base="sca:Interface">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="interface" type="anyURI" use="required"/>
+ <attribute name="callbackInterface" type="anyURI" use="optional"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-java.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-java.xsd
new file mode 100644
index 0000000000..4507752312
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-java.xsd
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="property.java" type="sca:JavaProperty" substitutionGroup="sca:property" sdo:name="propertyJava"/>
+ <complexType name="JavaProperty">
+ <complexContent>
+ <extension base="sca:Property">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="class" type="NCName" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-xsd.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-xsd.xsd
new file mode 100644
index 0000000000..7fcbd45a6a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca-property-xsd.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sdo="commonj.sdo/XML"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ elementFormDefault="qualified">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <element name="property.xsd" type="sca:XSDProperty" substitutionGroup="sca:property" sdo:name="propertyXsd"/>
+ <complexType name="XSDProperty">
+ <complexContent>
+ <extension base="sca:Property">
+ <sequence>
+ <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="type" type="anyURI" use="required"/>
+ <anyAttribute namespace="##any" processContents="lax"/>
+ </extension>
+ </complexContent>
+ </complexType>
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca.xsd
new file mode 100644
index 0000000000..39a39bab36
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sca.xsd
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.commonj.org/xmlns/sca/v0.0.1/"
+ xmlns:sca="http://www.commonj.org/xmlns/sca/v0.0.1/">
+
+ <include schemaLocation="sca-core.xsd"/>
+
+ <include schemaLocation="sca-interface-wsdl.xsd"/>
+ <include schemaLocation="sca-interface-cpp.xsd"/>
+ <include schemaLocation="sca-interface-java.xsd"/>
+
+ <include schemaLocation="sca-property-xsd.xsd"/>
+
+ <include schemaLocation="sca-implementation-dll.xsd"/>
+
+ <include schemaLocation="sca-implementation-java.xsd"/>
+ <include schemaLocation="sca-implementation-local-java.xsd"/>
+
+ <include schemaLocation="sca-binding-ws.xsd"/>
+
+
+</schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario1.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario1.txt
new file mode 100644
index 0000000000..a0a3c7a203
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario1.txt
@@ -0,0 +1,10 @@
+Created object in changed list
+The object is myspace#Company
+===== Modified Object Starts
+Xpath:#/
+The modified objects type is myspace#Root
+===== Old Property Values Begin
+Property companies[0](UNSET) of type DataObject - object null or unset
+
+===== Old Property Values End
+=====Modified Object Ends
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario2.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario2.txt
new file mode 100644
index 0000000000..9728bd6f0a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario2.txt
@@ -0,0 +1,8 @@
+===== Modified Object Starts
+Xpath:#/companies.0
+The modified objects type is myspace#Company
+===== Old Property Values Begin
+Property name of type String:acme
+
+===== Old Property Values End
+=====Modified Object Ends
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario3.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario3.txt
new file mode 100644
index 0000000000..e174f62538
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario3.txt
@@ -0,0 +1,22 @@
+=====Deleted Object Starts
+===== Old Property Values Begin
+Property name of type String:acme
+
+Property id of type String:123
+
+===== Old Property Values End
+=====Deleted Object Ends
+===== Modified Object Starts
+Xpath:#/
+The modified objects type is myspace#Root
+===== Old Property Values Begin
+Property companies[0] of type DataObject - object deleted
+===== Old Property Values Begin
+Property name of type String:acme
+
+Property id of type String:123
+
+===== Old Property Values End
+
+===== Old Property Values End
+=====Modified Object Ends
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario4.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario4.txt
new file mode 100644
index 0000000000..f678499e15
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario4.txt
@@ -0,0 +1,108 @@
+Created object in changed list
+The object is myspace#Employee
+===== Modified Object Starts
+Xpath:#/companies.0/departments.0
+The modified objects type is myspace#Department
+===== Old Property Values Begin
+Property employees[0] of type DataObject object still exists
+
+Property employees[1] of type DataObject object still exists
+
+===== Old Property Values End
+=====Modified Object Ends
+===== Modified Object Starts
+Xpath:#/companies.0/departments.1
+The modified objects type is myspace#Department
+===== Old Property Values Begin
+Property employees[0] of type DataObject - object deleted
+===== Old Property Values Begin
+Property name of type String:Ed Memoire
+
+Property id of type String:1
+
+===== Old Property Values End
+
+Property employees[1] of type DataObject object still exists
+
+===== Old Property Values End
+=====Modified Object Ends
+=====Deleted Object Starts
+===== Old Property Values Begin
+Property name of type String:Ed Memoire
+
+Property id of type String:1
+
+===== Old Property Values End
+=====Deleted Object Ends
+=====Deleted Object Starts
+===== Old Property Values Begin
+Property name of type String:Ivor Payne
+
+Property id of type String:1
+
+===== Old Property Values End
+=====Deleted Object Ends
+=====Deleted Object Starts
+===== Old Property Values Begin
+Property name of type String:Colin Poisson
+
+Property id of type String:2
+
+===== Old Property Values End
+=====Deleted Object Ends
+=====Deleted Object Starts
+===== Old Property Values Begin
+Property name of type String:windows
+
+Property id of type String:1
+
+Property employees[1] of type DataObject - object deleted
+===== Old Property Values Begin
+Property name of type String:Colin Poisson
+
+Property id of type String:2
+
+===== Old Property Values End
+
+Property employees[0] of type DataObject - object deleted
+===== Old Property Values Begin
+Property name of type String:Ivor Payne
+
+Property id of type String:1
+
+===== Old Property Values End
+
+===== Old Property Values End
+=====Deleted Object Ends
+===== Modified Object Starts
+Xpath:#/companies.1
+The modified objects type is myspace#Company
+===== Old Property Values Begin
+Property departments[0] of type DataObject - object deleted
+===== Old Property Values Begin
+Property name of type String:windows
+
+Property id of type String:1
+
+Property employees[1] of type DataObject - object deleted
+===== Old Property Values Begin
+Property name of type String:Colin Poisson
+
+Property id of type String:2
+
+===== Old Property Values End
+
+Property employees[0] of type DataObject - object deleted
+===== Old Property Values Begin
+Property name of type String:Ivor Payne
+
+Property id of type String:1
+
+===== Old Property Values End
+
+===== Old Property Values End
+
+Property departments[1] of type DataObject object still exists
+
+===== Old Property Values End
+=====Modified Object Ends
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario5.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario5.txt
new file mode 100644
index 0000000000..af5bf47102
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/scenario5.txt
@@ -0,0 +1,8 @@
+===== Modified Object Starts
+Xpath:#/companies.0
+The modified objects type is myspace#Company
+===== Old Property Values Begin
+Property eotm of type DataObject object still exists
+
+===== Old Property Values End
+=====Modified Object Ends
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.cpp
new file mode 100644
index 0000000000..adcdf36a0e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.cpp
@@ -0,0 +1,8835 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: sdotest.cpp,v 1.22 2006/03/16 12:53:57 slattery Exp $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+#include <fstream>
+using namespace std;
+
+
+
+#include "sdotest.h"
+
+
+
+
+
+using namespace commonj::sdo;
+
+
+
+/* USED IN RCPTEST */
+
+typedef struct {
+ //zend_object zo; /* The standard zend_object */
+ DataObjectPtr dop; /* The Hydra DataObject */
+ //zend_object *df; /* The Data Factory */
+} sdo_doimpl_object;
+
+
+int sdotest::rcptest()
+{
+
+ try {
+ DataFactoryPtr mdg;
+ sdo_doimpl_object* ptr;
+
+ mdg = DataFactory::getDataFactory();
+ mdg = 0;
+ mdg = DataFactory::getDataFactory();
+ mdg = NULL;
+ mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+
+ ptr = new sdo_doimpl_object;
+
+ ptr->dop = mdg->create((Type&)tcc);
+
+ ptr->dop = 0; // null ;
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << "RefCountingPointer test failed" << endl;
+ return 0;
+ }
+}
+
+
+
+int sdotest::changesummarytest()
+{
+ if (scenario5() == 0) return 0;
+ if (scenario1() == 0) return 0;
+ if (scenario2() == 0) return 0;
+ if (scenario3() == 0) return 0;
+ if (scenario4() == 0) return 0;
+ return 1;
+}
+
+
+int sdotest::scenario1()
+{
+ // scenario 1
+ // create root type - root has cs
+ // create a company type. and containment ref from root, many valued.
+ // props on comp id, name both strings single v.
+ // create root object
+ // begin logging
+ // create a company obj. name=acme id=123
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ FILE *f = fopen("scenario1.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open secnario1.dat" << endl;
+ return 0;
+ }
+
+ dumpchangesummary(f, cs);
+
+ fclose(f);
+
+ cs->endLogging();
+
+ //expect cdo:
+ //root - isChanged
+ //comp - isCreated
+
+ return comparefiles("scenario1.dat","scenario1.txt");
+}
+
+
+int sdotest::testui()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","MainType");
+
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tmain = mdg->getType("companyNS","MainType");
+ const Type& tshort = mdg->getType("commonj.sdo","Short");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+
+
+ mdg->addPropertyToType(tmain,"short",tshort,true);
+ mdg->addPropertyToType(tmain,"int",tint, true);
+
+ DataObjectPtr main = mdg->create((Type&)tmain);
+
+ DataObjectList& dol1 = main->getList("short");
+ DataObjectList& dol2 = main->getList("int");
+ DataObjectList& dol3 = main->getList((unsigned int)0);
+ DataObjectList& dol4 = main->getList(1);
+
+ return 1;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << "Unsigned integer test failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+
+
+int sdotest::scenario5()
+{
+ // scenario 5
+ // create root type - root has cs
+ // create a company type. and containment ref from root, many valued.
+ // props on comp id, name both strings single v.
+ // create root object
+ // begin logging
+ // create a company obj. name=acme id=123
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Employee");
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","eotm",
+ "myspace","Employee", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Root","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ const Type& te = mdg->getType("myspace","Employee");
+
+ DataObjectPtr emp = mdg->create(te);
+ emp->setCString("name", "Mr Expendible");
+
+ DataObjectList& emps = com->getList("employees");
+
+ emps.append(emp);
+
+ com->setDataObject("eotm",emp);
+
+ cs->beginLogging();
+
+ com->unset("eotm");
+
+ FILE *f = fopen("scenario5.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open scenario5.dat" << endl;
+ return 0;
+ }
+
+ dumpchangesummary(f, cs);
+
+ fclose(f);
+
+ cs->endLogging();
+
+ return comparefiles("scenario5.dat","scenario5.txt");
+
+ //expect com to have change record, nothing for eotm:
+
+}
+
+int sdotest::scenario2()
+{
+ // create root type - root has cs
+ // create a company type. and containment ref from root, many valued.
+ // 2 props on comp id, name both strings single v.
+ // create root object
+ // create a company obj. name=acme id=123
+ // begin logging()
+ // name="megacorp"
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ com->setCString("name","megacorp");
+
+ FILE *f = fopen("scenario2.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open scenario2.dat" << endl;
+ return 0;
+ }
+
+ dumpchangesummary(f, cs);
+
+ fclose(f);
+
+ cs->endLogging();
+
+ //expect cdo:
+ //root- nothing
+ // company- isChanged
+ //setting prop=name, value="acme"
+
+ return comparefiles("scenario2.dat","scenario2.txt");
+
+}
+
+int sdotest::scenario3()
+{
+
+ //create root type - root has cs
+ //create a company type. and containment ref from root, many valued.
+ //2 props on comp id, name both strings single v.
+ //create root object
+ //create a company obj. name=acme id=123
+ //begin logging()
+ //delete company
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","companies",
+ "myspace","Company", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ com->detach();
+
+ FILE *f = fopen("scenario3.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open scenario3.dat" << endl;
+ return 0;
+ }
+
+ dumpchangesummary(f, cs);
+
+ cs->endLogging();
+
+ fclose(f);
+
+ // expect cdo
+ // root - changed
+ // company - deleted
+
+ return comparefiles("scenario3.dat","scenario3.txt");
+
+}
+
+int sdotest::scenario4()
+{
+ //create root type - root has cs
+ //create a company type. and containment ref from root, many valued.
+ //create a dept type. and containment ref from comp, many valued.
+ //create a emp type. and containment ref from dept, many valued.
+ // give name and id properties to comp,dept, emp
+
+ //create root object
+ //create a company obj. name=acme id=123
+ //create a company obj. name=megacorp id=124
+ // give each company 2 depts
+ // give each dept 2 employees
+
+ // begin logging()
+ // add new employee to first dept of acme
+ // delete employee from second dept of acme
+
+ // change name of first employee of first dept megacorp.
+ // delete first dept of megacorp.
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","whatever",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addType("myspace","Department");
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addType("myspace","Employee");
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","companies",
+ "myspace","Company", true, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("companies");
+ com->setCString("name","acme");
+ com->setCString("id","123");
+
+ DataObjectPtr dep = com->createDataObject("departments");
+ dep->setCString("name","widgets");
+ dep->setCString("id","1");
+
+ DataObjectPtr emp = dep->createDataObject("employees");
+ emp->setCString("name","John O'Watt");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Ida Know");
+ emp->setCString("id","2");
+
+
+ dep = com->createDataObject("departments");
+ dep->setCString("name","gadgets");
+ dep->setCString("id","2");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Ed Memoire");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Phyllis Tyne");
+ emp->setCString("id","2");
+
+
+ DataObjectPtr com2 = dor->createDataObject("companies");
+ com2->setCString("name","megacorp");
+ com2->setCString("id","124");
+
+ dep = com2->createDataObject("departments");
+ dep->setCString("name","windows");
+ dep->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Ivor Payne");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Colin Poisson");
+ emp->setCString("id","2");
+
+ dep = com2->createDataObject("departments");
+ dep->setCString("name","portholes");
+ dep->setCString("id","2");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Graham Angreeneggs");
+ emp->setCString("id","1");
+
+ emp = dep->createDataObject("employees");
+ emp->setCString("name","Helen Highwater");
+ emp->setCString("id","2");
+
+ DataObjectList& deps = com->getList("departments");
+ DataObjectList& emps = deps[0]->getList("employees");
+ DataObjectList& emps2 = deps[1]->getList("employees");
+ DataObjectList& deps2 = com2->getList("departments");
+ DataObjectList& emps3 = deps2[0]->getList("employees");
+ DataObjectList& emps4 = deps2[1]->getList("employees");
+
+ // should be able to get the change summary property, but it
+ // should be zero.
+ // should be able to find out if the type is a change summary type
+
+ if (! dor->getType().isChangeSummaryType())
+ {
+ if (!silent) cout << "The root object DOESNT HAVE a change summary !!!" << endl;
+ return 0;
+ }
+
+ try {
+ DataObjectPtr csptr = dor->getDataObject("whatever");
+
+ if (!csptr) {
+ if (!silent) cout << "CS property was zero - should be invisible!!!!" << endl;
+ return 0;
+ }
+ else {
+ if (!silent) cout << "CS property was NOT zero !!" << endl;
+ return 0;
+ }
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ // cout << "No property shows - this is correct" << endl;
+ }
+
+
+ if (com->getType().isChangeSummaryType())
+ {
+ if (!silent) cout << "The company object has a change summary !!!!" << endl;
+ return 0;
+ }
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ DataObjectList& depsout = com->getList("departments");
+
+ emp = depsout[0]->createDataObject("employees");
+ emp->setCString("name","Irma Newby");
+ emp->setCString("id","3");
+
+ DataObjectList& empsout = depsout[1]->getList("employees");
+ empsout.remove(0);
+
+ DataObjectList& depsout2 = com2->getList("departments");
+ DataObjectList& empsout2 = depsout2[0]->getList("employees");
+ empsout2[0]->setCString("name","Ive had my name changed");
+
+ depsout2[0]->detach();
+
+ FILE *f = fopen("scenario4.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open secnario4.dat" << endl;
+ return 0;
+ }
+
+ dumpchangesummary(f, cs);
+
+ cs->endLogging();
+
+ fclose(f);
+
+ // expect:
+ // company acme, department widgets changed.
+ // employee 3 of dept widgets of acme (Irma Newby) created.
+ // employee 1 of dept gadgets or acme deleted
+ // no change record for employee 1 of company megacorp, dept windows
+ // deletion for dept windows of megacorp
+ // deletion for emp 1 of windows - showing original value for name (Ivor Payne)
+ // deletion for emp 2 of windows.
+
+ return comparefiles("scenario4.dat","scenario4.txt");
+
+
+}
+
+int sdotest::seqtest()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ // company is sequenced.
+ mdg->addType("myspace","Company",true,false);
+
+ mdg->addType("myspace","Department",true,false);
+ // string is many
+
+ mdg->addPropertyToType("myspace","Company","string","commonj.sdo","String",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","departments","myspace","Department",
+ true);
+
+ mdg->addPropertyToType("myspace","Department","name","commonj.sdo","String");
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr dor = mdg->create(tcc);
+ const Property& sprop = dor->getType().getProperty("string");
+ SequencePtr sptr = dor->getSequence();
+
+ FILE *f = fopen("sequence.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Cannot open sequence.dat" << endl;
+ return 0;
+ }
+
+ printseq(f, sptr);
+
+ sptr->addCString(sprop,"I am Item 1 of string");
+
+ printseq(f, sptr);
+
+ sptr->addText("I am the first free text");
+
+ printseq(f, sptr);
+
+ sptr->addCString(sprop,"I am Item 2 of string");
+
+ printseq(f, sptr);
+
+ sptr->setCStringValue(1,"I am free text which has been modified");
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+
+ printseq(f, sptr);
+
+ dep1->setCString("name","department1");
+
+ printseq(f, sptr);
+
+ DataObjectList& dol = dor->getList("departments");
+
+ const Type& tcd = mdg->getType("myspace","Department");
+ DataObjectPtr dep2 = mdg->create(tcd);
+
+ printseq(f, sptr);
+
+ dep2->setCString("name","department2");
+
+ printseq(f, sptr);
+
+ dol.append(dep2);
+
+ printseq(f, sptr);
+
+ fclose(f);
+
+ return comparefiles("sequence.dat","sequence.txt");
+
+
+}
+
+
+int sdotest::boolbug()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Company");
+ mdg->addPropertyToType("myspace","Company","bool","commonj.sdo","Boolean");
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+ try {
+ bool b = dor->getBoolean("bool");
+ return 1;
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent) cout << "WRONG not set exception" << endl;
+ return 0;
+ }
+}
+
+int sdotest::scope1()
+{
+ try
+ {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ return 1;
+ }
+ catch(SDORuntimeException e)
+ {
+ return 0;
+ }
+}
+
+int sdotest::scope2()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Company");
+ mdg->addPropertyToType("myspace","Company","csumm","commonj.sdo","ChangeSummary");
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ return 0;
+ }
+}
+
+int sdotest::scope3()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Main");
+ mdg->addType("myspace","Subs");
+ mdg->addPropertyToType("myspace","Main","name","commonj.sdo","String");
+ mdg->addPropertyToType("myspace","Main","subs","myspace","Subs", true);
+ mdg->addPropertyToType("myspace","Subs","name","commonj.sdo","String");
+
+ const Type& tcc = mdg->getType("myspace","Main");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr sub = dor->createDataObject("subs");
+ sub->setCString("name", "sub1");
+
+ sub = dor->createDataObject("subs");
+ sub->setCString("name", "sub2");
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ return 0;
+ }
+
+}
+
+int sdotest::testGetters(DataObjectPtr dor)
+{
+ if (!testGetter(dor,"boolean")) return 0;
+ if (!testGetter(dor,"byte")) return 0;
+ if (!testGetter(dor,"character")) return 0;
+ if (!testGetter(dor,"short")) return 0;
+ if (!testGetter(dor,"integer")) return 0;
+ if (!testGetter(dor,"long")) return 0;
+ if (!testGetter(dor,"double")) return 0;
+ if (!testGetter(dor,"float")) return 0;
+ if (!testGetter(dor,"date")) return 0;
+ if (!testGetter(dor,"string")) return 0;
+ if (!testGetter(dor,"bytes")) return 0;
+ if (!testGetter(dor,"dataobject")) return 0;
+ return 1;
+}
+
+int sdotest::testGetter(DataObjectPtr dor, char* str)
+{
+
+ try {
+ bool b = dor->getBoolean(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ char by = dor->getByte(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ wchar_t cy = dor->getCharacter(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ short s = dor->getShort(str);
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ if (!strcmp(str,"bytes")) return 1;
+ return 0;
+
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ int i = dor->getInteger(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ long l = dor->getLong(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ int64_t ll = dor->getLong(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ float f = dor->getFloat(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ long double d = dor->getDouble(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ unsigned int len;
+
+ try {
+ len = dor->getLength(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ if (len > 0) {
+ try {
+ wchar_t * buf = new wchar_t[len];
+ unsigned int gotlen = dor->getString(str,buf,len);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+ try {
+ char * cbuf = new char[len];
+ unsigned int gotlen = dor->getBytes(str,cbuf,len);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+ }
+
+ try {
+ SDODate t = dor->getDate(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << " WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"boolean")) return 1;
+ if (!strcmp(str,"boolean")) return 1;
+ if (!strcmp(str,"string")) return 1;
+ if (!strcmp(str,"dataobject")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ const char * string = dor->getCString(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG - unset and undefaulted" << endl;
+ return 0;
+ }
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 1;
+ if (!strcmp(str,"date")) return 1;
+ return 0;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+
+ try {
+ DataObjectPtr dob = dor->getDataObject(str);
+ }
+ catch (SDOPropertyNotSetException pe)
+ {
+ if (!silent) cout << "WRONG unset and undefaulted" << endl;
+ return 0;
+ }
+
+ catch (SDOInvalidConversionException ec)
+ {
+ if (!strcmp(str,"dataobject")) return 0;
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << endl;
+ return 0;
+ }
+ return 1;
+
+}
+
+int sdotest::conversiontest()
+{
+ //cout << "Conversion tests" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ mdg->addType("myspace","Container");
+ mdg->addType("myspace","Contained");
+ mdg->addPropertyToType("myspace","Container","boolean","commonj.sdo","Boolean");
+ mdg->addPropertyToType("myspace","Container","byte","commonj.sdo","Byte");
+ mdg->addPropertyToType("myspace","Container","character","commonj.sdo","Character");
+ mdg->addPropertyToType("myspace","Container","short","commonj.sdo","Short");
+ mdg->addPropertyToType("myspace","Container","integer","commonj.sdo","Integer");
+ mdg->addPropertyToType("myspace","Container","long","commonj.sdo","Long");
+ mdg->addPropertyToType("myspace","Container","float","commonj.sdo","Float");
+ mdg->addPropertyToType("myspace","Container","double","commonj.sdo","Double");
+ mdg->addPropertyToType("myspace","Container","string","commonj.sdo","String");
+ mdg->addPropertyToType("myspace","Container","bytes","commonj.sdo","Bytes");
+ mdg->addPropertyToType("myspace","Container","dataobject","myspace","Contained");
+ mdg->addPropertyToType("myspace","Container","date","commonj.sdo","Date");
+ mdg->addPropertyToType("myspace","Container","bigint","commonj.sdo","BigInteger");
+ mdg->addPropertyToType("myspace","Container","bigdec","commonj.sdo","BigDecimal");
+
+
+ const Type& tcc = mdg->getType("myspace","Container");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ // phase 1 - all unset.......
+
+ // cout << "+++++++++++++++PROPERTY VALUES UNSET ++++++++++++++++++" << endl;
+
+ if (!testGetters(dor)) return 0;
+
+ // cout << "+++++++++++++++PROPERTY VALUES SET ++++++++++++++++++++" << endl;
+
+ // RHEL 4 has problems processing 64 bit integer constants, so we'll do it the hard way
+ // This is overkill but gives the option to vary the value a bit.
+
+ int64_t largeInt = 0xFFFF;
+ for (int j = 0; j < 2; j++)
+ {
+ largeInt <<= 16;
+ largeInt += 0xFFFF;
+ }
+
+ DataObjectPtr sub = dor->createDataObject("dataobject");
+ dor->setBoolean("boolean", true);
+ dor->setByte("byte",20);
+ dor->setCharacter("character", 1000);
+ dor->setShort("short", (short)12345678);
+ dor->setInteger("integer", 87654321);
+ dor->setLong("long", largeInt);
+ dor->setFloat("float", (float)12345.678);
+ dor->setDouble("double", 1234567.891);
+ dor->setDate("date", 37575);
+ wchar_t* chars = new wchar_t[50];
+ for (int i=0;i<50;i++) {chars[i] = 0x7F20 + i ;}
+ dor->setString("string",chars, 50);
+
+ char* tchars = new char[50];
+ for (int ii=0;ii<50;ii++) {tchars[ii] = ii + 32;}
+ dor->setBytes("bytes",tchars, 50);
+
+
+ if (!testGetters(dor)) return 0;
+
+ // cout << "+++++++++++++++END OF TEST ++++++++++++++++++++++++++++" << endl;
+
+ return 1;
+}
+
+
+int sdotest::usertest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addType("myspace","UserTest");
+ mdg->addType("myspace","AnObject");
+
+ const Type& tr = mdg->getType("myspace", "Root");
+ const Type& tm = mdg->getType("myspace", "UserTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"unsetboolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"object", "myspace","AnObject");
+ mdg->addPropertyToType(tm,"unsetobject","myspace","AnObject");
+
+ // many valued...
+ mdg->addPropertyToType(tm,"longs", "commonj.sdo","Integer", true);
+ mdg->addPropertyToType(tm,"objects", "myspace","AnObject", true);
+
+ mdg->addPropertyToType(tr,"usertest", "myspace","UserTest");
+
+ DataObjectPtr root = mdg->create((Type&)tr);
+ DataObjectPtr test = root->createDataObject("usertest");
+ DataObjectPtr do1 = test->createDataObject("object");
+ DataObjectPtr do2 = test->createDataObject("objects");
+ DataObjectPtr do3 = test->createDataObject("objects");
+
+ test->setBoolean("boolean", true);
+
+
+ void* value = (void*)0xF1F1F1F1;
+
+ test->setUserData(value);
+
+ if (test->getUserData() != (void*)0xf1f1f1f1) return 0;
+
+ root->setUserData("usertest",value);
+
+ if (root->getUserData("usertest") != (void*)0xf1f1f1f1) return 0;
+
+ root->setUserData((unsigned int)0,(void*)0x20);
+
+ if (root->getUserData((unsigned int)0) != (void*)0x20) return 0;
+
+ const Property& prop = root->getType().getProperty("usertest");
+
+ root->setUserData(prop,(void*)0x40020);
+
+ if (root->getUserData(prop) != (void*)0x40020) return 0;;
+
+ test->setUserData("boolean", (void*)0x120);
+
+
+ if (test->getUserData("boolean") != (void*)0) return 0;
+
+ test->setUserData("unsetboolean", (void*)0x340);
+
+ if (test->getUserData("unsetboolean") != (void*)0) return 0;
+
+ test->setUserData("object", (void*)0x120);
+
+ if (test->getUserData("object") != (void*)0x120) return 0;
+
+ test->setUserData("unsetobject", (void*)0x540);
+
+ if (test->getUserData("unsetobject") != (void*)0) return 0;
+
+ test->setUserData("objects", (void*)0x640);
+
+ if (test->getUserData("objects") != (void*)0x640) return 0;
+
+ test->setUserData("objects[1]", (void*)0x740);
+
+ if (test->getUserData("objects[1]") != (void*)0x740) return 0;
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << "Exception in user test - unexpected" << endl;
+ return 0;
+ }
+}
+
+int sdotest::versiontest()
+{
+ if (!silent) cout << "The SDO version is :" << SdoRuntime::getVersion() << endl;
+ if (!silent) cout << "The Major version is: " << SdoRuntime::getMajor() << endl;
+ if (!silent) cout << "The Minor version is: " << SdoRuntime::getMinor() << endl;
+ if (!silent) cout << "The Fix level is: " << SdoRuntime::getFix() << endl;
+ return 1;
+}
+
+int sdotest::noncontest()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Employee");
+
+ const Type& tr = mdg->getType("myspace", "Company");
+ const Type& tm = mdg->getType("myspace", "Department");
+ const Type& to = mdg->getType("myspace", "Employee");
+
+ // many...
+ mdg->addPropertyToType(tr,"departments","myspace", "Department",
+ true);
+
+ //mdg->addPropertyToType(to,"name","commonj.sdo", "String");
+
+ mdg->addPropertyToType(tm,"employees","myspace", "Employee", true);
+
+ // single, non containment
+ mdg->addPropertyToType(tr,"eom", "myspace","Employee", false
+ , false, false);
+
+ DataObjectPtr comp = mdg->create((Type&)tr);
+
+ {
+ DataObjectPtr dept = comp->createDataObject("departments");
+ DataObjectPtr emp1 = dept->createDataObject("employees");
+ //emp1->setCString("name", "Will");
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ //emp1->setCString("name", "Bill");
+ DataObjectPtr emp3 = dept->createDataObject("employees");
+ //emp1->setCString("name", "Gill");
+ comp->setDataObject("eom", emp3);
+ }
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << "Failed in containment" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::defaulttest()
+{
+ try{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","DefaultTest");
+ mdg->addType("myspace","AnObject");
+
+ const Type& tm = mdg->getType("myspace", "DefaultTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+
+ mdg->setDefault("myspace","DefaultTest","boolean", true);
+
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+
+ mdg->setDefault("myspace","DefaultTest","byte", (char)'d');
+
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+
+ mdg->setDefault("myspace","DefaultTest","character", (wchar_t)'e');
+
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+
+ mdg->setDefault("myspace","DefaultTest","short", (short)300);
+
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+
+ mdg->setDefault("myspace","DefaultTest","long", (long)400);
+
+ mdg->addPropertyToType(tm,"longs", "commonj.sdo","Integer", true);
+
+ mdg->setDefault("myspace","DefaultTest","longs", (long)800);
+
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+
+ mdg->setDefault("myspace","DefaultTest","longlong", (int64_t)500);
+
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+
+ mdg->setDefault("myspace","DefaultTest","float", (float)600.0);
+
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+
+ mdg->setDefault("myspace","DefaultTest","longdouble", (long double)700.0);
+
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+
+ mdg->setDefault("myspace","DefaultTest","date", (long)900);
+
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+
+ wchar_t* help = new wchar_t[4];
+ help[0] = 'H';
+ help[1] = 'E';
+ help[2] = 'L';
+ help[3] = 'P';
+
+ mdg->setDefault("myspace","DefaultTest","string", help, 4);
+
+ delete help;
+
+ char* help2 = new char[4];
+ help2[0] = 'H';
+ help2[1] = 'E';
+ help2[2] = 'L';
+ help2[3] = 'P';
+
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+
+ mdg->setDefault("myspace","DefaultTest","bytes", help2, 4);
+
+ delete help2;
+
+ mdg->addPropertyToType(tm,"object", "myspace","AnObject");
+
+ DataObjectPtr test = mdg->create((Type&)tm);
+
+ FILE *f = fopen("defaults.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open file defaults.dat" << endl;
+ return 0;
+ }
+
+
+ fprintf(f, "Boolean default is true: %d\n",test->getBoolean("boolean"));
+
+ fprintf(f, "Byte default is d: %d\n",test->getByte("byte"));
+
+ fprintf(f, "Character default is e: %d\n",test->getCharacter("character"));
+
+ fprintf(f, "Short default is 300: %d\n",test->getShort("short"));
+
+ fprintf(f, "Long default is 400: %d\n",test->getInteger("long"));
+
+ try {
+ fprintf(f, "Longs default is 800: %d\n" ,test->getInteger("longs[1]"));
+ }
+ catch (SDOIndexOutOfRangeException ex)
+ {
+ fprintf(f,"Expected index out of range OK\n");
+ }
+
+ fprintf(f,"Float default is 600: %.3f\n",test->getFloat("float"));
+
+ fprintf(f, "LongDouble default is 700: %.3f\n",(float)test->getDouble("longdouble"));
+
+ fprintf(f, "String default is HELP: ");
+ unsigned int lenw = test->getLength("string");
+ if (lenw > 0) {
+ char* tw = new char[lenw];
+ test->getBytes("string",tw,lenw);
+ for (int i=0;i<lenw;i++)
+ {
+ fprintf(f,"%c",tw[i]);
+ }
+ fprintf(f,"\n");
+ }
+
+ fprintf(f,"Bytes default is HELP: ");
+ unsigned int len = test->getLength("bytes");
+ if (len > 0) {
+ char* tc = new char[len];
+ test->getBytes("bytes",tc,len);
+ for (int i=0;i<len;i++)
+ {
+ fprintf(f,"%c", tc[i]);
+ }
+ fprintf(f,"\n");
+ }
+ fclose (f);
+ return comparefiles("defaults.dat","defaults.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << e.getEClassName() << " in ";
+ if (!silent)cout << e.getFileName() << " at line ";
+ if (!silent)cout << e.getLineNumber() << endl;
+ if (!silent)cout << e.getFunctionName() << " ";
+ if (!silent)cout << e.getMessageText() << endl;
+ return 0;
+ }
+}
+
+// Re-write of defaulttest to use methods taking SDOString parameters
+int sdotest::defaulttest_strobj()
+{
+
+ SDOString ns1("myspace");
+ SDOString testName("DefaultTest");
+ SDOString objectName("AnObject");
+ SDOString propName("commonj.sdo");
+
+ try{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType(ns1, testName);
+ mdg->addType(ns1, objectName);
+
+ const Type& tm = mdg->getType(ns1, testName);
+ const Type& to = mdg->getType(ns1, objectName);
+
+ mdg->addPropertyToType(tm, "boolean", propName, "Boolean");
+
+ mdg->setDefault(ns1, testName, "boolean", true);
+
+ mdg->addPropertyToType(tm, "byte", propName, "Byte");
+
+ mdg->setDefault(ns1, testName, "byte", (char)'d');
+
+ mdg->addPropertyToType(tm, "character", propName, "Character");
+
+ mdg->setDefault(ns1, testName, "character", (wchar_t)'e');
+
+ mdg->addPropertyToType(tm, "short", propName, "Short");
+
+ mdg->setDefault(ns1, testName, "short", (short)300);
+
+ mdg->addPropertyToType(tm, "long", propName, "Integer");
+
+ mdg->setDefault(ns1, testName, "long", (long)400);
+
+ mdg->addPropertyToType(tm, "longs", propName, "Integer", true);
+
+ mdg->setDefault(ns1, testName, "longs", (long)800);
+
+ mdg->addPropertyToType(tm, "longlong", propName, "Long");
+
+ mdg->setDefault(ns1, testName, "longlong", (int64_t)500);
+
+ mdg->addPropertyToType(tm, "float", propName, "Float");
+
+ mdg->setDefault(ns1, testName, "float", (float)600.0);
+
+ mdg->addPropertyToType(tm, "longdouble", propName, "Double");
+
+ mdg->setDefault(ns1, testName, "longdouble", (long double)700.0);
+
+ mdg->addPropertyToType(tm, "date", propName, "Date");
+
+ mdg->setDefault(ns1, testName, "date", (long)900);
+
+ mdg->addPropertyToType(tm, "string", propName, "String");
+
+ wchar_t* help = new wchar_t[4];
+ help[0] = 'H';
+ help[1] = 'E';
+ help[2] = 'L';
+ help[3] = 'P';
+
+ mdg->setDefault(ns1, testName, "string", help, 4);
+
+ delete help;
+
+ char* help2 = new char[4];
+ help2[0] = 'H';
+ help2[1] = 'E';
+ help2[2] = 'L';
+ help2[3] = 'P';
+
+ mdg->addPropertyToType(tm, "bytes", propName, "Bytes");
+
+ mdg->setDefault(ns1, testName, "bytes", help2, 4);
+
+ delete help2;
+
+ mdg->addPropertyToType(tm, "object", ns1, objectName);
+
+ DataObjectPtr test = mdg->create((Type&)tm);
+
+ FILE *f = fopen("defaults.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open file defaults.dat" << endl;
+ return 0;
+ }
+
+
+ fprintf(f, "Boolean default is true: %d\n",test->getBoolean("boolean"));
+
+ fprintf(f, "Byte default is d: %d\n",test->getByte("byte"));
+
+ fprintf(f, "Character default is e: %d\n",test->getCharacter("character"));
+
+ fprintf(f, "Short default is 300: %d\n",test->getShort("short"));
+
+ fprintf(f, "Long default is 400: %d\n",test->getInteger("long"));
+
+ try {
+ fprintf(f, "Longs default is 800: %d\n" ,test->getInteger("longs[1]"));
+ }
+ catch (SDOIndexOutOfRangeException ex)
+ {
+ fprintf(f,"Expected index out of range OK\n");
+ }
+
+ fprintf(f,"Float default is 600: %.3f\n",test->getFloat("float"));
+
+ fprintf(f, "LongDouble default is 700: %.3f\n",(float)test->getDouble("longdouble"));
+
+ fprintf(f, "String default is HELP: ");
+ unsigned int lenw = test->getLength("string");
+ if (lenw > 0) {
+ char* tw = new char[lenw];
+ test->getBytes("string",tw,lenw);
+ for (int i=0;i<lenw;i++)
+ {
+ fprintf(f,"%c",tw[i]);
+ }
+ fprintf(f,"\n");
+ }
+
+ fprintf(f,"Bytes default is HELP: ");
+ unsigned int len = test->getLength("bytes");
+ if (len > 0) {
+ char* tc = new char[len];
+ test->getBytes("bytes",tc,len);
+ for (int i=0;i<len;i++)
+ {
+ fprintf(f,"%c", tc[i]);
+ }
+ fprintf(f,"\n");
+ }
+ fclose (f);
+ return comparefiles("defaults.dat","defaults.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << e.getEClassName() << " in ";
+ if (!silent)cout << e.getFileName() << " at line ";
+ if (!silent)cout << e.getLineNumber() << endl;
+ if (!silent)cout << e.getFunctionName() << " ";
+ if (!silent)cout << e.getMessageText() << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::showdefault(FILE *f, const Type& tm)
+{
+ const Property& pboolean = tm.getProperty("boolean");
+ const Property& pbyte = tm.getProperty("byte");
+ const Property& pcharacter = tm.getProperty("character");
+ const Property& pshort = tm.getProperty("short");
+ const Property& plong = tm.getProperty("long");
+ const Property& plongs = tm.getProperty("longs");
+ const Property& plonglong = tm.getProperty("longlong");
+ const Property& pfloat = tm.getProperty("float");
+ const Property& plongdouble = tm.getProperty("longdouble");
+ const Property& pdate = tm.getProperty("date");
+ const Property& pstring = tm.getProperty("string");
+ const Property& pbytes = tm.getProperty("bytes");
+ const Property& pobject = tm.getProperty("object");
+
+ // first see what we get for the default when there is none
+
+ bool bb = pboolean.getBooleanDefault();
+ const char* bs = pboolean.getCStringDefault();
+
+ fprintf(f, "Boolean default is : %d\n",bb);
+ fprintf(f, "Boolean default as a string is %s\n",bs);
+
+ char cc = pbyte.getByteDefault();
+ const char* cs = pbyte.getCStringDefault();
+ fprintf(f, "Byte default is : %d\n",cc);
+ fprintf(f, "Byte default as a string is %s\n",cs);
+
+ wchar_t wc = pcharacter.getCharacterDefault();
+ const char* ws = pcharacter.getCStringDefault();
+ fprintf(f, "Character default is : %d\n",wc);
+ fprintf(f, "Character default as a string is %s\n",ws);
+
+ short ss = pshort.getShortDefault();
+ fprintf(f, "Short default is : %d\n",ss);
+
+ long ll = plong.getIntegerDefault();
+ fprintf(f, "Integer default is : %d\n",ll);
+ long ll2 = plongs.getLongDefault();
+ fprintf(f, "Integer many default is : %d\n",ll2);
+
+ int64_t llll = plonglong.getLongDefault();
+ fprintf(f, "Long default is : %ld\n",(long)llll);
+
+ float ff = pfloat.getFloatDefault();
+ fprintf(f, "Float default is : %.3f\n",ff);
+
+ long double dd = plongdouble.getDoubleDefault();
+ fprintf(f, "Double default is : %.3f\n",(float)dd);
+
+ const SDODate& sd = pdate.getDateDefault();
+ fprintf(f, "Date default is : %d\n",sd.getTime());
+
+ unsigned int l = pstring.getDefaultLength();
+ if (l > 0)
+ {
+ wchar_t * buf = new wchar_t[l+1];
+ l = pstring.getStringDefault(buf,l);
+ fprintf(f, "String default length is %d\n", l);
+ for (int i=0;i<l;i++)
+ {
+ fprintf(f, "%c",buf[i]);
+ }
+ fprintf(f, "\n");
+ delete buf;
+ const char* wws = pstring.getCStringDefault();
+ fprintf(f, "String default as a string is %s\n", wws);
+
+ }
+ else
+ {
+ fprintf(f, "String default is zero length\n");
+ }
+
+ l = pbytes.getDefaultLength();
+ if (l > 0)
+ {
+ char * buf = new char[l+1];
+ l = pbytes.getBytesDefault(buf,l);
+ fprintf(f, "Bytes default length is %d\n",l);
+ for (int i=0;i<l;i++)
+ {
+ fprintf(f, "%c", buf[i]);
+ }
+ fprintf(f, "\n");
+ delete buf;
+ }
+ else
+ {
+ fprintf(f, "Bytes default is zero length\n");
+ }
+ return 1;
+}
+
+
+int sdotest::propdefaulttest()
+{
+ try{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","DefaultTest");
+ mdg->addType("myspace","AnObject");
+
+ const Type& tm = mdg->getType("myspace", "DefaultTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+ mdg->addPropertyToType(tm,"longs", "commonj.sdo","Integer", true);
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+ mdg->addPropertyToType(tm,"object" , "myspace","AnObject");
+
+ //cout << "Testing unset defaults....." << endl;
+
+ FILE *f;
+
+ f = fopen("showdefault1.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open showdefault1.dat" << endl;
+ return 0;
+ }
+ showdefault(f, tm);
+
+ fclose (f);
+ if (!comparefiles("showdefault1.dat","showdefault1.txt"))
+ {
+ return 0;
+ }
+
+ //now set all the defaults....
+
+ mdg->setDefault("myspace","DefaultTest","boolean", true);
+ mdg->setDefault("myspace","DefaultTest","byte", (char)'d');
+ mdg->setDefault("myspace","DefaultTest","character", (wchar_t)'e');
+ mdg->setDefault("myspace","DefaultTest","short", (short)300);
+ mdg->setDefault("myspace","DefaultTest","long", (long)400);
+ mdg->setDefault("myspace","DefaultTest","longs", (long)800);
+ mdg->setDefault("myspace","DefaultTest","longlong", (int64_t)500);
+ mdg->setDefault("myspace","DefaultTest","float", (float)600.0);
+ mdg->setDefault("myspace","DefaultTest","longdouble", (long double)700.0);
+ mdg->setDefault("myspace","DefaultTest","date", (long)900);
+
+
+ wchar_t* help = new wchar_t[4];
+ help[0] = 'H';
+ help[1] = 'E';
+ help[2] = 'L';
+ help[3] = 'P';
+
+ mdg->setDefault("myspace","DefaultTest","string", help, 4);
+
+ delete help;
+
+ char* help2 = new char[4];
+ help2[0] = 'H';
+ help2[1] = 'E';
+ help2[2] = 'L';
+ help2[3] = 'P';
+
+
+ mdg->setDefault("myspace","DefaultTest","bytes", help2, 4);
+
+ delete help2;
+
+ // and have another go at getting them....
+
+ f = fopen("showdefault2.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open showdefault2.dat" << endl;
+ return 0;
+ }
+ showdefault(f, tm);
+
+ fclose (f);
+ if (!comparefiles("showdefault2.dat","showdefault2.txt"))
+ {
+ return 0;
+ }
+
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << e.getEClassName() << " in ";
+ if (!silent)cout << e.getFileName() << " at line ";
+ if (!silent)cout << e.getLineNumber() << endl;
+ if (!silent)cout << e.getFunctionName() << " ";
+ if (!silent)cout << e.getMessageText() << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::nulltest()
+{
+
+ FILE *f = 0;
+
+ try {
+
+ int i;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","NullTest",true, false); // sequenced
+ mdg->addType("myspace","AnObject");
+
+ const Type& tm = mdg->getType("myspace", "NullTest");
+ const Type& to = mdg->getType("myspace", "AnObject");
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+ mdg->addPropertyToType(tm,"object", "myspace","AnObject");
+
+
+ mdg->addPropertyToType(tm,"cs", "commonj.sdo","ChangeSummary");
+
+ DataObjectPtr test = mdg->create((Type&)tm);
+ DataObjectPtr ob = mdg->create((Type&)to);
+ DataObjectPtr ob2 = mdg->create((Type&)to);
+ DataObjectPtr ob3 = mdg->create((Type&)to);
+
+
+ f = fopen("nulltest.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open file nulltest.dat" << endl;
+ return 0;
+ }
+
+ // first check all props are unset
+
+ ChangeSummaryPtr cs = test->getChangeSummary();
+
+ cs->beginLogging();
+
+ PropertyList pl = test->getInstanceProperties();
+
+ fprintf(f, "Initially - all properties unset, and default values...\n");
+ for (i=0;i<pl.size(); i++)
+ {
+ if (pl[i].isMany())continue;
+ try {
+ if (pl[i].getType().isDataType()) {
+ fprintf(f, "%s set:%d value ",pl[i].getName(),test->isSet(pl[i]));
+ const char *xx = test->getCString(pl[i]);
+ if (xx != 0)
+ {
+ fprintf(f, "%s\n",xx);
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ else {
+ fprintf(f,"%s set: %d value:", pl[i].getName(),test->isSet(pl[i]));
+ DataObjectPtr xy = test->getDataObject(pl[i]);
+ if (xy != 0)
+ {
+ fprintf(f, " is not empty\n");
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent) cout << " WRONG - got not set exception" << endl;
+ return 0;
+ }
+ }
+ test->setBoolean("boolean", false);
+ test->setByte("byte",0);
+ test->setCharacter("character",0);
+ test->setShort("short",0);
+ test->setInteger("long",0);
+ test->setLong("longlong",0 );
+ test->setFloat("float",0);
+ test->setDouble("longdouble",0 );
+ test->setDate("date",0 );
+ test->setString("string",0,0);
+ test->setBytes("bytes","",0) ;
+ test->setDataObject("object",0) ;
+
+
+
+ fprintf(f, "Should now have all properties set, and zero values...\n");
+ for (i=0;i<pl.size(); i++)
+ {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ fprintf(f, "%s set:%d value:%s\n", pl[i].getName(),test->isSet(pl[i]),test->getCString(pl[i]));
+ }
+ else {
+ fprintf(f,"%s set:%d dataobject\n", pl[i].getName(),test->isSet(pl[i]));
+ }
+
+ }
+
+ for (i=0;i<pl.size(); i++)
+ {
+ test->unset(pl[i]);
+ }
+ fprintf(f, "Should be back to having properties unset, and default values...\n");
+ for (i=0;i<pl.size(); i++)
+ {
+
+ try {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ fprintf(f, "%s set:%d value:",pl[i].getName(),test->isSet(pl[i]));
+ const char *xx = test->getCString(pl[i]);
+ if (xx != 0)
+ {
+ fprintf(f, "%s\n", xx);
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ else {
+ fprintf(f, "%s set: %d dataobject", pl[i].getName(),test->isSet(pl[i]));
+ DataObjectPtr dp = test->getDataObject(pl[i]);
+ if (dp != 0)
+ {
+ fprintf(f, " is not empty\n");
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent) cout << "WRONG - not set exception" << endl;
+ return 0;
+ }
+ }
+
+ SequencePtr s = test->getSequence();
+
+ s->addBoolean(test->getType().getProperty("boolean")/*"boolean"*/, false);
+ s->addByte(1/*"byte"*/,0);
+ s->addCharacter(2/*"character"*/,0);
+ s->addShort(3/*"short"*/,0);
+ s->addInteger(4/*"long"*/,0);
+ s->addLong(5/*"longlong"*/,0 );
+ s->addFloat(6/*"float"*/,0);
+ s->addDouble(7/*"longdouble"*/,0 );
+ // bug ...s->setDate(8/*"date"*/,0 );
+ s->addString(9/*"string"*/,0,0);
+ s->addBytes(10/*"bytes"*/,"",0) ;
+ s->addDataObject(11/*"object"*/,0) ;
+
+ for (i=0;i<pl.size(); i++)
+ {
+ try {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ fprintf(f, "%s set:%d value:", pl[i].getName(),test->isSet(pl[i]));
+ const char* xx = test->getCString(pl[i]);
+ if ( xx != 0)
+ {
+ fprintf(f, "%s\n", xx);
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ else {
+ fprintf(f, "%s set:%d dataobject", pl[i].getName(),test->isSet(pl[i]));
+ DataObjectPtr db = test->getDataObject(pl[i]);
+ if (db != 0)
+ {
+ fprintf(f, "\n");
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent) cout << "WRONG - not set exception " << endl;
+ return 0;
+ }
+ }
+ ChangedDataObjectList& cl = cs->getChangedDataObjects();
+ for ( i =0; i< cl.size() ; i++)
+ {
+ if (cs->isCreated(cl[i])) {
+ fprintf(f, "Created dataobject\n");
+ }
+ if (cs->isDeleted(cl[i])) {
+ fprintf(f, "Deleted dataobject\n");
+ }
+ if (cs->isModified(cl[i])) {
+ fprintf(f, "Modified dataobject\n");
+ }
+ }
+
+ // now unset all the properties...
+ for (i=0;i<pl.size(); i++)
+ {
+ test->unset(pl[i]);
+ }
+
+ for (i=0;i<pl.size(); i++)
+ {
+ if (!pl[i].isMany() )
+ {
+ test->setNull(i);
+ }
+ }
+
+ fprintf(f, "Should all be null, and default values...\n");
+ for (i=0;i<pl.size(); i++)
+ {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ // check for a null first!!
+ fprintf(f, "%s isNull:%d set:%d value:",pl[i].getName(),
+ test->isNull(i),test->isSet(pl[i]));
+ if (test->getCString(pl[i]) == 0) fprintf(f, "\n");
+ else fprintf(f, "%s\n", test->getCString(pl[i]));
+ }
+ else {
+ fprintf(f, "%s isNull:%d set:%d value",pl[i].getName(),
+ test->isNull(i),test->isSet(pl[i]));
+ if (test->getDataObject(pl[i]) == 0) fprintf(f, " empty\n");
+ else fprintf(f, " dataobject\n");
+ }
+ }
+
+ s->addBoolean(test->getType().getProperty("boolean")/*"boolean"*/, true);
+ s->addByte(1/*"byte"*/,1);
+ s->addCharacter(2/*"character"*/,1);
+ s->addShort(3/*"short"*/,1);
+ s->addInteger(4/*"long"*/,1);
+ s->addLong(5/*"longlong"*/,1 );
+ s->addFloat(6/*"float"*/,1.0);
+ s->addDouble(7/*"longdouble"*/,1.0 );
+ // bug ...s->setDate(8/*"date"*/,0 );
+ wchar_t* chs = new wchar_t[5];
+ chs[0] = 'h';
+ chs[1] = 'e';
+ chs[2] = 'l';
+ chs[3] = 'l';
+ chs[4] = 'o';
+ s->addString(9/*"string"*/,chs,5);
+ delete chs;
+ s->addBytes(10/*"bytes"*/,"hello",5) ;
+ s->addDataObject(11/*"object"*/,ob) ;
+
+ fprintf(f, "Should all have values, and not be null..\n");
+ for (i=0;i<pl.size(); i++)
+ {
+
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ fprintf(f, "%s isNull:%d set:%d value:",pl[i].getName(),
+ test->isNull(i),test->isSet(pl[i]));
+ if (test->getCString(pl[i]) == 0) fprintf(f, "\n");
+ else fprintf(f, "%s\n", test->getCString(pl[i]));
+
+ }
+ else {
+ fprintf(f, "%s isNull%d set:%d value:", pl[i].getName(),
+ test->isNull(i),test->isSet(pl[i]));
+ if (test->getDataObject(pl[i]) == 0) fprintf(f, " empty\n");
+ else fprintf(f, " dataobject\n");
+ }
+ }
+
+ for (i=0;i<pl.size(); i++)
+ {
+ if (!pl[i].isMany() )
+ {
+ test->setNull(pl[i]);
+ }
+ }
+
+ fprintf(f, "Should all be null, and default values...\n");
+ for (i=0;i<pl.size(); i++)
+ {
+
+ try {
+ if (pl[i].isMany())continue;
+ if (pl[i].getType().isDataType()) {
+ fprintf(f, "%s isNull:%d set:%d value:",pl[i].getName(),
+ test->isNull(i),test->isSet(pl[i]));
+ if (test->getCString(pl[i]) == 0) fprintf(f, "\n");
+ else fprintf(f, "%s\n",test->getCString(pl[i]));
+
+ }
+ else {
+ fprintf(f, "%s isNull;%d set:%d value:", pl[i].getName(),
+ test->isNull(i),test->isSet(pl[i]));
+ if (test->getDataObject(pl[i]) == 0) fprintf(f," empty\n");
+ else fprintf(f, " dataobject\n");
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent) cout << " WRONG - not set exception" << endl;
+ return 0;
+ }
+ }
+
+ cs->endLogging();
+ fclose(f);
+
+ int rr = comparefiles("nulltest.dat","nulltest.txt");
+
+ if (rr == 0)
+ {
+ if (!silent) cout << "Nulltest compare failed - probably because of differences is formats for doubles/floats" << endl;
+ // accept the test.
+ return 1;
+
+ }
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << "Nulltest failed " << e << endl;
+ if (f) fclose(f);
+ return 0;
+ }
+}
+
+int sdotest::maintest()
+{
+
+ int i;
+
+ FILE *f;
+
+ try{
+
+ f = fopen("maintest.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Failed to open maintest.dat" << endl;
+ }
+
+ fprintf(f,"Test Program starting to create types ...\n");
+
+ /* First create a DataFactory , then add some types and props...*/
+
+ /* This is dms creation of metadata */
+
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ // manager is a sequenced type...
+ mdg->addType("myspace","Manager", true, false);
+
+ mdg->addType("myspace","Employee");
+
+ // tests of base types
+
+ // note - base type of a seq type must be seq...
+ mdg->addType("myspace","Person", true, false);
+
+ mdg->addType("myspace","DerivedString");
+ mdg->addType("myspace","SubDepartment");
+
+ /* Now add the properties to the types...*/
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& ts = mdg->getType("commonj.sdo","String");
+ const Type& ti = mdg->getType("commonj.sdo","Integer");
+ const Type& tf = mdg->getType("commonj.sdo","Float");
+ const Type& tm = mdg->getType("myspace","Manager");
+
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+ const Type& tp = mdg->getType("myspace","Person");
+ const Type& tds= mdg->getType("myspace","DerivedString");
+ const Type& tsd= mdg->getType("myspace","SubDepartment");
+
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+
+
+
+
+
+ /* By type, with a type */
+ mdg->addPropertyToType(tc,"name",ts);
+
+ /* by name/uri with a type */
+ mdg->addPropertyToType("myspace","Company","address",ts);
+
+ /* by type with name/uri */
+ mdg->addPropertyToType(tc,"departments", "myspace","Department",
+ true);
+
+
+ // add a reference to employee of the month
+ mdg->addPropertyToType(tc,"employee of the month", "myspace","Employee",
+ false, false, false);
+
+
+
+ /* A list of floats */
+
+ mdg->addPropertyToType(tc,"floatlist", tf,true);
+
+ mdg->addPropertyToType(tc,"pdg", tm);
+
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+
+ mdg->addPropertyToType(td,"name", ts);
+
+ mdg->addPropertyToType(td,"id", ti);
+
+ mdg->addPropertyToType(td,"manager", tm);
+
+ mdg->addPropertyToType(tm,"name", ts);
+
+
+ mdg->addPropertyToType(te,"name",ts);
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+
+
+ // emps and managers are both people (in theory).
+ mdg->setBaseType(te,tp);
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+ mdg->setBaseType(tm,tp);
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+ mdg->addPropertyToType(tp,"haircolour", ts);
+ mdg->addPropertyToType(tp,"name", ts);
+ mdg->addPropertyToType(tm,"officeid", ts);
+ mdg->addPropertyToType(te,"cubelocation", ts);
+
+ mdg->addPropertyToType(tc,"shareholder", tp);
+
+ //derived string - derived from string - cannot have properties!!!
+ mdg->setBaseType(tds,ts);
+
+ // subdept derived from dept
+ mdg->setBaseType(tsd,td);
+ mdg->addPropertyToType(tsd,"subname",ts);
+
+ mdg->addPropertyToType(tc, "substring",tds);
+
+ /* by type with name/uri */
+ mdg->addPropertyToType(tc,"subdepartments", "myspace","SubDepartment",
+ true);
+
+ /* This is the data structure */
+
+
+
+ /* company
+ ----shareholder (Person)
+ ----substring (DerivedString)
+ * ----name (String)
+ * ----pdg (Manager)
+ (inherits haircolour from person,
+ has name as duplicate property - should use person.name
+ has officeid)
+ * ----name(String)
+ ----haircolour(String)
+ ----officeid(String)
+ *
+ * ----depts[] (Department)
+ * ----name (String)
+ * ----id (Integer)
+ * ----manager (Manager).
+ * ----name(String)
+ ----haircolour(String) from Person
+ * ----employees[] (Employee)
+ * ----name(String)
+ ----haircolour(String) - from Person
+ ----cubelocation(String)
+ --subdepartments[] (SubDepartment)
+ ----name (String) from Department
+ ----id (String) from Department
+ ----manager (Manager) from Department
+ ----employees (from department)
+ */
+
+ /* Now add a primitive type test to the manager */
+ mdg->addPropertyToType(tm,"string",ts);
+
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+
+ mdg->addPropertyToType(tm,"boolean", "commonj.sdo","Boolean");
+ mdg->addPropertyToType(tm,"byte", "commonj.sdo","Byte");
+ mdg->addPropertyToType(tm,"character", "commonj.sdo","Character");
+ mdg->addPropertyToType(tm,"short", "commonj.sdo","Short");
+ mdg->addPropertyToType(tm,"long", "commonj.sdo","Integer");
+ mdg->addPropertyToType(tm,"longlong", "commonj.sdo","Long");
+ mdg->addPropertyToType(tm,"float", "commonj.sdo","Float");
+ mdg->addPropertyToType(tm,"longdouble", "commonj.sdo","Double");
+ mdg->addPropertyToType(tm,"date", "commonj.sdo","Date");
+ // dead mdg->addPropertyToType(tm,"charptr", "commonj.sdo","Bytes");
+ mdg->addPropertyToType(tm,"string", "commonj.sdo","String");
+ mdg->addPropertyToType(tm,"bytes", "commonj.sdo","Bytes");
+
+
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+
+ // create a few aliases
+
+ mdg->setAlias("myspace","Company","TheFirm");
+ mdg->setAlias("myspace","Company","departments","TheDepartments");
+ mdg->setAlias("myspace","Company","TheBigFirm");
+ mdg->setAlias("myspace","Company","TheLittleFirm");
+
+ const Type& tlf = mdg->getType("myspace","TheBigFirm");
+
+ fprintf(f, "Should be Company :%s\n", tlf.getName());
+
+ fprintf(f, "Should be 3: %d\n", tlf.getAliasCount());
+
+ for (int ai = 0; ai < tlf.getAliasCount(); ai++)
+ {
+ fprintf(f, "Alias: %s\n",tlf.getAlias(ai));
+ }
+
+
+ // Change summary test begins
+ mdg->addPropertyToType(tc,"csumm","commonj.sdo","ChangeSummary");
+ // should log an error - but not fail
+ mdg->addPropertyToType(td,"csumm","commonj.sdo","ChangeSummary");
+
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+
+ fprintf(f, "BEFORE RESOLUTION\n");
+ printDataStructure(f, mdg);
+
+ /* Now create some objects in the dg */
+
+// DataObjectPtr dor;
+
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ fprintf(f, "AFTER RESOLUTION\n");
+ printDataStructure(f, mdg);
+
+ fprintf(f, "Manager is sequenced?%d\n",tm.isSequencedType());
+
+ dor->setCString("substring","This is the sub string - its primitive, but not a string");
+
+ const char* subby = dor->getCString("substring");
+
+ fprintf(f, "%s\n", subby);
+
+ dor->setCString("name","acmecorp");
+ const char* chnam = dor->getCString("name");
+ fprintf(f, "%s\n", chnam);
+
+ dor->unset("name");
+
+ dor->setCString("name","acmecorp");
+
+ // Set up the two departments before logging starts
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+ dep1->setCString("name","Developement");
+
+ DataObjectPtr dep2= dor->createDataObject("departments");
+ dep2->setCString("name","Marketing");
+
+ // add a couple of floats to the floatlist
+ DataObjectList& dolist = dor->getList("floatlist");
+ dolist.append((float)1.4);
+ dolist.append((float)1.5);
+
+ //TODO - change summaries should live on the DataObject
+ // interface - can this be done?
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+ cs->beginLogging();
+
+ const char* sname = dor->getCString("name");
+
+ fprintf(f, "%s\n", sname);
+
+ // This should put a created entry in the cs.
+
+ // This should be equivalent to the alternative below.........
+ const Type& tcd = mdg->getType("myspace","Manager");
+ DataObjectPtr pdg = mdg->create((Type&)tcd);
+
+ // This set should put the entry into the change summary.
+ // both in the creations and in the changes.
+ dor->setDataObject("pdg",pdg);
+
+
+ // try getting the boolean as a string - should be defaulted to false:
+ const char *bol;
+ try{
+ bol = pdg->getCString("boolean");
+ if (bol != 0)
+ {
+ fprintf(f, "Expected default boolean (false) : %s\n",bol);
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent)cout << "WRONG handled notset exception " << endl;
+ fclose(f);
+ return 0;
+ }
+
+ pdg->setBoolean("boolean", true);
+ bol = pdg->getCString("boolean");
+ fprintf(f, "Expected boolean (true) : %s\n",bol);
+
+ // and the widechars?
+ const char* wdc;
+ try {
+ wdc = pdg->getCString("string");
+ if (wdc != 0)
+ {
+ fprintf(f, "Expected default string (0) : ",wdc);
+ }
+ else
+ {
+ fprintf(f, " is empty \n");
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent) cout << "WRONG handled notset exception" <<endl;
+ fclose (f);
+ return 0;
+ }
+
+
+ // this should get a valid sequence..
+
+ SequencePtr sq = pdg->getSequence();
+
+
+ // The alternative.............................................
+ // Here the create should put the entry into the change summary
+ //DataObject* pdg = dor->createDataObject("pdg");
+
+ // This should do nothing to the cs, as its in a created object
+ pdg->setCString("name","Jacques LePlace");
+
+ // This should modify the property, and add an item to the sequence.
+ sq->addCString("name", "Jacques LePlagne");
+
+
+ // The creation entry should be removed from the change summary
+ // The entry should no longer exist and the pointer is invalid
+ pdg->detach();
+
+ pdg = dor->getDataObject("pdg");
+
+ if (pdg != 0)
+ {
+ fprintf(f, " A deleted data object should be zero and was not\n");
+ }
+
+ pdg = mdg->create((Type&)tcd);
+
+ // A new creation in the change summary
+ dor->setDataObject("pdg",pdg);
+
+ // No modification as the object is created
+ pdg->setCString("name", "Mr Horace Walker");
+
+ sq = pdg->getSequence();
+
+ try {
+ // element 0 is the first setting - which we just deleted!
+ sq->setCStringValue(0,"Unable to set");
+ }
+ catch (SDOIndexOutOfRangeException)
+ {
+ // thats OK
+ sq->addCString("name","Now able to set");
+ }
+
+
+ sq->addText(" - should say now able to set\n");
+
+ for (int ii=0;ii<sq->size();ii++)
+ {
+ fprintf(f, "%s\n", sq->getCStringValue(ii));
+ }
+
+ try {
+ const char* n = pdg->getCString("name");
+ fprintf(f, " Name from deleted item: %s\n",n);
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ // thats ok
+ fprintf(f, "Correctly caught prop not found\n");
+ }
+
+
+ // This should put a change in the cs.
+ dor->setCString("name","mega-new-acmecorp");
+
+
+ // At this point, we should know that pdg was empty and is now
+ // a created object. And that the old string for company name
+ // was "acmecorp"
+
+ // cs->DebugPrint();
+
+
+ /* Now set up the primitive type test on PDG */
+
+ pdg->setCString("string","Hello I am a string");
+ pdg->setBoolean("boolean",true);
+ pdg->setByte("byte",23);
+ pdg->setCharacter("character",45);
+ pdg->setShort("short",34);
+ pdg->setLong("long", 56);
+ pdg->setDouble("longdouble",89.0);
+ pdg->setFloat("float",90.0);
+ pdg->setDate("date",(time_t)200);
+
+ // RHEL 4 has problems processing 64 bit integer constants, so we'll do it the hard way
+ // This is overkill but gives the option to vary the value a bit.
+
+ int64_t largeInt1 = 0xFFFF;
+ int64_t largeInt2 = 0x7FFF;
+ for (int j = 0; j < 3; j++)
+ {
+ largeInt1 <<= 16;
+ largeInt1 += 0xFFFF;
+ largeInt2 <<= 16;
+ largeInt2 += 0xFFFF;
+ }
+
+ pdg->setLong("longlong", largeInt1);
+
+ // try reading the longlong as a string
+ const char *lls = pdg->getCString("longlong");
+ fprintf(f, "0xffffffffffffffff = : %s\n", lls);
+
+ pdg->setLong("longlong", largeInt2);
+
+ lls = pdg->getCString("longlong");
+ fprintf(f, "0x7fffffffffffffff = %s\n",lls);
+
+ pdg->setLong("longlong",0x7FFFFFFF);
+ lls = pdg->getCString("longlong");
+ fprintf(f, "0x7fffffff = %s\n",lls);
+
+ pdg->setLong("longlong",0x80000000);
+ lls = pdg->getCString("longlong");
+ fprintf(f, "0x80000000 = %s\n",lls);
+
+ pdg->setLong("longlong",78);
+
+
+ wchar_t* wide = new wchar_t[4];
+ wide[0] = 'W';
+ wide[1] = 'i';
+ wide[2] = 'd';
+ wide[3] = 'e';
+
+ pdg->setString("string",wide,4);
+
+ // and as a string?
+ wdc = pdg->getCString("string");
+ fprintf(f, " Expected Wide - got : %s\n",wdc);
+
+ delete wide;
+
+ char* thin = new char[4];
+ thin[0] = 'T';
+ thin[1] = 'h';
+ thin[2] = 'i';
+ thin[3] = 'n';
+
+ pdg->setBytes("bytes",thin,4);
+
+ const char* dc = pdg->getCString("bytes");
+ fprintf(f, " Expected Thin - got : %s\n",dc);
+
+ delete thin;
+
+ const char* ps = pdg->getCString("string");
+ fprintf(f, "Expecting string, got %s\n", ps);
+
+ bool pb = pdg->getBoolean("boolean");
+ fprintf(f, "Expected bool true, got %d\n",pb);
+
+ char pc = pdg->getByte("byte");
+ fprintf(f, "Expected char 23, got %d\n",pc);
+
+ wchar_t pw = pdg->getCharacter("character");
+ fprintf(f, "expected wchar 45, got %d",pw);
+
+ short pss = pdg->getShort("short");
+ fprintf(f, "Expected short 34, got %d\n",pss);
+
+ long pl = pdg->getLong("long");
+ fprintf(f, "Expected long 56 , got %ld\n",pl);
+
+ int64_t pi = pdg->getLong("longlong");
+ fprintf(f, "Expected long long 78, got %ld\n",(long)pi);
+
+ long double ld = pdg->getDouble("longdouble");
+ fprintf(f, "Expected long double 89, got %.3f\n",(float)ld);
+
+ float pf = pdg->getFloat("float");
+ fprintf(f, "Expected float 90, got %.3f\n",pf);
+
+ SDODate pt = pdg->getDate("date");
+ fprintf(f, "Expected time_t 200, got %d\n",pt.getTime());
+
+
+ wchar_t* result;
+ // get the length to allocate:
+ unsigned int widelen = pdg->getString("string",0,0);
+ if (widelen > 0) {
+ result = new wchar_t[widelen];
+ widelen = pdg->getString("string",result,widelen);
+ for ( i=0;i<widelen;i++)
+ {
+ fprintf(f, "Wide[%d]=%d\n",i,result[i]);
+ }
+ delete result;
+ }
+
+
+ char* thinresult;
+
+ unsigned int thinlen = pdg->getBytes("bytes",0,0);
+ if (thinlen > 0) {
+ thinresult = new char[thinlen];
+ thinlen = pdg->getBytes("bytes",thinresult,thinlen);
+ for ( i=0;i<thinlen;i++)
+ {
+ fprintf(f, "Thin[%d]=%d\n",i,thinresult[i]);
+ }
+ delete thinresult;
+ }
+
+
+ // add two more departments - the first should provoke the
+ // saving of a list in a change summary
+
+ DataObjectPtr dep3 = dor->createDataObject("departments");
+ dep3->setCString("name","Architecture");
+
+ // The second should do no logging in the change summary
+
+ DataObjectPtr dep4= dor->createDataObject("departments");
+ dep4->setCString("name","Pyrotechnics");
+
+
+ // create another one using tha alias
+ DataObjectPtr dep5= dor->createDataObject("TheDepartments");
+ dep5->setCString("name","Accounts");
+
+ DataObjectPtr emp1 = dep1->createDataObject("employees");
+ emp1->setCString("name","Eric");
+
+
+ DataObjectPtr emp2 = dep1->createDataObject("employees");
+ emp2->setCString("name","Bill");
+
+ // now lets make eric employee of the month
+ dor->setDataObject("employee of the month",emp1);
+
+ // no - actually it was bill
+ dor->setDataObject("employee of the month",emp2);
+
+
+
+ // Now add to the list of floats, hopefully the two old
+ // values will get change summarised.
+
+ dolist = dor->getList("floatlist");
+ float f1 = dolist.getFloat(0);
+
+ fprintf(f, "%.3f",f1);
+
+ dolist.setFloat(0,(float)567.7);
+
+ f1 = dolist.getFloat(0);
+
+ fprintf(f, "%.3f",f1);
+
+ dolist.insert(0,(float)34.56);
+
+
+ DataObjectPtr ddd = dor->getDataObject("departments[1]/employees[2]");
+
+ const char* ch = ddd->getCString("name");
+
+ fprintf(f, "Should be Bill:%s\n",ch);
+
+
+ DataObjectPtr ddd2 = dor->getDataObject("TheDepartments[1]/employees[2]");
+
+ const char* ch2 = ddd2->getCString("name");
+
+ fprintf(f, "Should be Bill:%s\n",ch2);
+
+
+ DataObjectPtr dempofm = dor->getDataObject("employee of the month");
+
+ const char* chh = dempofm->getCString("name");
+
+ fprintf(f, "The employee of the month is %s\n",chh);
+
+ // Suppose we delete bill
+
+ DataObjectList& dlo = dor->getList("departments[1]/employees");
+ DataObjectPtr fred = dlo.remove(1);
+
+ const char* chh2 = fred->getCString("name");
+
+ dempofm = dor->getDataObject("employee of the month");
+
+ // uncertain bahaviour - should the reference be zeroed
+ // becuase the item is removed from a list or not?
+ // Right now it doesnt get done, as the assumption is that
+ // the object will be put somewhere else, or dropped.
+ // fprintf(f, "Emp of month is now zero : %p",dempofm);
+
+
+ /* "The client would create a data mediator and get graph which
+ would return the root data object " */
+
+ const char* boss = dor->getCString("pdg/name");
+
+ fprintf(f, "%s\n", boss);
+
+ DataObjectPtr mypdg = dor->getDataObject("pdg");
+
+ Type::Types t = mypdg->getTypeEnum();
+
+ if (t != Type::OtherTypes) {
+ fprintf(f, "pdg correctly identified\n");
+ }
+
+ const char* boss2 = mypdg->getCString("name");
+
+ fprintf(f, "%s\n", boss2);
+
+ /* getPrimitiveArrayListVectorThingy() */
+
+ DataObjectList& deps = dor->getList("departments");
+
+ fprintf(f, "size of list %d\n",deps.size());
+
+ DataObjectPtr dout = deps[0];
+
+ dout->setCString("name","Research And Development");
+
+ const char* snew = dout->getCString("name");
+
+ fprintf(f, "%s\n", snew);
+
+ string snew2 = dor->getCString("departments[1 ] /name");
+
+ fprintf(f, "%s\n", snew2.c_str());
+
+ for (int lx = 0; lx < deps.size(); lx++)
+ {
+ fprintf(f, "Department: %s\n",deps[lx]->getCString("name"));
+ }
+
+ cs->endLogging();
+
+
+ try {
+ // should fail - if localtype not set
+ dor->setCString("departments","department label");
+ const char* slabel = dor->getCString("departments");
+ fprintf(f, "String in list type:%s\n", slabel);
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f, "Normal expected exception\n");
+ }
+
+ try
+ {
+ const char* snew3 = dor->getCString(" ]awep50wi4,0qw9q]45]# q2345 -t -v3lt6o -56o 56=-o7nl ewv/;sdl f[vxddglh]px dfju/ g#k./jh#.k./");
+ fprintf(f, "%s\n", snew3);
+ return 0;
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ fprintf(f, "Normal Invalid path exception\n");
+ }
+
+ try
+ {
+
+ // catch a and a property not found
+ const Property& pp = dor->getType().getProperty("notaproperty");
+ return 0;
+ }
+ catch (SDOPropertyNotFoundException e)
+ {
+ fprintf(f, "Normal SDOPropertyNotFound exception\n");
+ }
+ fclose(f);
+ return comparefiles("maintest.dat","maintest.txt");
+
+ }
+
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << " in ";
+ if (!silent) cout << e.getFileName() << " at line ";
+ if (!silent) cout << e.getLineNumber() << endl;
+ if (!silent) cout << e.getFunctionName() << " ";
+ if (!silent) cout << e.getSeverity() << " ";
+ if (!silent) cout << e.getMessageText() << endl;
+ return 0;
+ }
+}
+
+int sdotest::getproptest()
+{
+ // should be able to get a property by xpath...
+
+ FILE *f;
+
+ f = fopen("getproptest.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open getproptest.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ // manager is a sequenced type...
+ mdg->addType("myspace","Manager", true, false);
+ mdg->addType("myspace","Employee");
+
+
+ /* Now add the properties to the types...*/
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& ts = mdg->getType("commonj.sdo","String");
+ const Type& ti = mdg->getType("commonj.sdo","Integer");
+ const Type& tf = mdg->getType("commonj.sdo","Float");
+ const Type& tm = mdg->getType("myspace","Manager");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+
+ mdg->addPropertyToType(tc,"name",ts);
+
+ mdg->addPropertyToType(tc,"address",ts);
+
+ mdg->addPropertyToType(tc,"departments", td,true);
+
+ // add a reference to employee of the month
+ mdg->addPropertyToType(tc,"employee of the month", te, false, false, false);
+
+ /* A list of floats */
+ mdg->addPropertyToType(tc,"floatlist", tf,true);
+ mdg->addPropertyToType(tc,"director", tm);
+
+ mdg->addPropertyToType(td,"name", ts);
+ mdg->addPropertyToType(td,"id", ti);
+
+ mdg->addPropertyToType(td,"manager", tm);
+ mdg->addPropertyToType(tm,"name", ts);
+
+ mdg->addPropertyToType(te,"name",ts);
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+ //company/departments/employees.
+ // company - name, address, floatlist
+ // department name, id, manager
+ // employee name
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+
+ const Property& p = dor->getType().getProperty("name");
+ fprintf(f, "Companys name property is: %s\n",p.getName());
+
+ const Property& p1 = dor->getType().getProperty("departments");
+ fprintf(f, "Companys dept property is:%s\n",p1.getName());
+
+ // now try some xpaths...
+
+ try {
+
+ const Property& p2 = dor->getType().getProperty("departments/employees");
+ fprintf(f,"Departments empl property is:%s\n",p2.getName());
+
+ const Property& p3 = dor->getType().getProperty("departments[456]/employees[123]");
+ fprintf(f,"Departments empl property is:%s\n", p3.getName());
+
+ const Property& p4 = dor->getType().getProperty("departments.34/employees.123/name");
+ fprintf(f,"Employees name property is:%s\n", p4.getName());
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout <<"Exceptions - xpath didnt work" << endl;
+ return 0;
+ }
+ try {
+ const Property& p5 = dor->getType().getProperty("departments.34/[]/name");
+ fprintf(f,"Employees name property is:%s\n",p5.getName());
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f,"Normal exception caught\n");
+ }
+
+ try {
+ const Property& p6 = dor->getType().getProperty("deptartments");
+ fprintf(f,"Deptartments property is:%s\n",p6.getName());
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f,"Normal exception caught\n");
+ }
+
+ try {
+ const Property& p7 = dor->getType().getProperty("../company");
+ fprintf(f,"Company property is:%s\n",p7.getName());
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f,"Normal exception caught\n");
+ }
+ fclose (f);
+ return comparefiles("getproptest.dat","getproptest.txt");
+
+}
+
+int sdotest::querytest()
+{
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ FILE *f = fopen("querytest.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open querytest.dat" << endl;
+ return 0;
+ }
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ // manager is a sequenced type...
+ mdg->addType("myspace","Manager", true, false);
+ mdg->addType("myspace","Employee");
+
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool= mdg->getType("commonj.sdo","Boolean");
+ const Type& tbyte= mdg->getType("commonj.sdo","Byte");
+ const Type& tchar= mdg->getType("commonj.sdo","Character");
+ const Type& tint= mdg->getType("commonj.sdo","Integer");
+ const Type& tlong= mdg->getType("commonj.sdo","Long");
+ const Type& tfloat= mdg->getType("commonj.sdo","Float");
+ const Type& tbytes = mdg->getType("commonj.sdo","Bytes");
+ const Type& tdouble= mdg->getType("commonj.sdo","Double");
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& tm = mdg->getType("myspace","Manager");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+
+ mdg->addPropertyToType(tc,"name",tstring);
+
+ mdg->addPropertyToType(tc,"departments", td,true);
+
+ // add a reference to employee of the month
+ mdg->addPropertyToType(tc,"employee of the month", te, false, false, false);
+
+ mdg->addPropertyToType(tc,"director", tm);
+
+ mdg->addPropertyToType(td,"name", tstring);
+
+ mdg->addPropertyToType(td,"manager", tm);
+
+ mdg->addPropertyToType(tm,"name", tstring);
+
+
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+ mdg->addPropertyToType(te,"bool",tbool);
+ mdg->addPropertyToType(te,"byte",tbyte);
+ mdg->addPropertyToType(te,"char",tchar);
+ mdg->addPropertyToType(te,"int",tint);
+ mdg->addPropertyToType(te,"float",tfloat);
+ mdg->addPropertyToType(te,"long",tlong);
+ mdg->addPropertyToType(te,"double",tdouble);
+ mdg->addPropertyToType(te,"bytes",tbytes);
+ mdg->addPropertyToType(te,"string",tstring);
+ mdg->addPropertyToType(te,"name",tstring);
+
+ //company/departments/employees.
+ // company - name, address, floatlist
+ // department name, id, manager
+ // employee name
+
+ const Type& tcc = mdg->getType("myspace","Company");
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr dept = dor->createDataObject("departments");
+
+ DataObjectPtr emp1 = dept->createDataObject("employees");
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ DataObjectPtr emp3 = dept->createDataObject("employees");
+
+ emp1->setCString("name","Employee1");
+ emp2->setCString("name","Employee2");
+ emp3->setCString("name","Employee3");
+
+
+ emp1->setBoolean("bool",true);
+ emp1->setByte("byte",'1');
+ emp1->setCharacter("char",'1');
+ emp1->setInteger("int",1);
+ emp1->setFloat("float",1.0);
+ emp1->setLong("long",1);
+ emp1->setDouble("double",1.0);
+
+ char* bytes = new char[6];
+ bytes[0] = 'h';
+ bytes[1] = 'e';
+ bytes[2] = 'l';
+ bytes[3] = 'l';
+ bytes[4] = 'o';
+
+ emp1->setBytes("bytes",bytes,5);
+
+ wchar_t* mbytes = new wchar_t[6];
+ mbytes[0] = 'h';
+ mbytes[1] = 'e';
+ mbytes[2] = 'l';
+ mbytes[3] = 'l';
+ mbytes[4] = 'o';
+
+ emp1->setString("string",mbytes,5);
+
+
+ emp2->setBoolean("bool",true);
+ emp2->setByte("byte",'2');
+ emp2->setCharacter("char",'2');
+ emp2->setInteger("int",200);
+ emp2->setFloat("float",200.0);
+ emp2->setLong("long",200);
+ emp2->setDouble("double",200.0);
+
+ char* bytes2 = new char[6];
+ bytes2[0] = 'h';
+ bytes2[1] = 'e';
+ bytes2[2] = 'l';
+ bytes2[3] = 'p';
+ bytes2[4] = '!';
+
+ emp2->setBytes("bytes",bytes2,5);
+
+ wchar_t* mbytes2 = new wchar_t[6];
+ mbytes2[0] = 'h';
+ mbytes2[1] = 'e';
+ mbytes2[2] = 'l';
+ mbytes2[3] = 'p';
+ mbytes2[4] = '!';
+
+ emp2->setString("string",mbytes2,5);
+
+ emp3->setBoolean("bool",false);
+ emp3->setByte("byte",'4');
+ emp3->setCharacter("char",'4');
+ emp3->setInteger("int",400);
+ emp3->setFloat("float",400.0);
+ emp3->setLong("long",400);
+ emp3->setDouble("double",400.0);
+
+ char* bytes3 = new char[6];
+ bytes3[0] = 'w';
+ bytes3[1] = 'o';
+ bytes3[2] = 'm';
+ bytes3[3] = 'p';
+ bytes3[4] = '!';
+
+ emp3->setBytes("bytes",bytes3,5);
+
+ wchar_t* mbytes3 = new wchar_t[6];
+ mbytes3[0] = 'w';
+ mbytes3[1] = 'o';
+ mbytes3[2] = 'm';
+ mbytes3[3] = 'p';
+ mbytes3[4] = '!';
+
+ emp3->setString("string",mbytes3,5);
+
+
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[bool=false]");
+ fprintf(f, "Expected employee3: got %s\n",dob1->getCString("name"));
+
+ DataObjectPtr dob2 = dor->getDataObject("departments[1]/employees[bool=true]");
+ fprintf(f, "Expected employee1: got %s\n",dob2->getCString("name"));
+
+ DataObjectPtr dob3 = dor->getDataObject("departments[1]/employees[byte=2]");
+ fprintf(f, "Expected employee2: got %s\n",dob3->getCString("name"));
+
+ DataObjectPtr dob4 = dor->getDataObject("departments[1]/employees[byte=1]");
+ fprintf(f, "Expected employee1: got %s\n",dob4->getCString("name"));
+
+ DataObjectPtr dob5 = dor->getDataObject("departments[1]/employees[bytes=hello]");
+ fprintf(f, "Expected employee1: got %s\n",dob5->getCString("name"));
+
+ DataObjectPtr dob5a = dor->getDataObject("departments[1]/employees[bytes=\"hello\"]");
+ fprintf(f, "Expected employee1: got %s\n",dob5a->getCString("name"));
+
+ DataObjectPtr dob5b = dor->getDataObject("departments[1]/employees[bytes='hello']");
+ fprintf(f, "Expected employee1: got %s\n",dob5b->getCString("name"));
+
+ DataObjectPtr dob6 = dor->getDataObject("departments[1]/employees[bytes=womp!]");
+ fprintf(f, "Expected employee3: got %s\n",dob6->getCString("name"));
+
+ DataObjectPtr dob7 = dor->getDataObject("departments[1]/employees[double=200.0]");
+ fprintf(f, "Expected employee2: got %s\n",dob7->getCString("name"));
+
+ DataObjectPtr dob8 = dor->getDataObject("departments[1]/employees[string=help!]");
+ fprintf(f, "Expected employee2: got %s\n",dob8->getCString("name"));
+
+ DataObjectPtr dob8a = dor->getDataObject("departments[1]/employees[string=\"help!\"]");
+ fprintf(f, "Expected employee2: got %s\n",dob8a->getCString("name"));
+
+ DataObjectPtr dob8b = dor->getDataObject("departments[1]/employees[string= 'help!']");
+ fprintf(f, "Expected employee2: got %s\n",dob8b->getCString("name"));
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << e.getEClassName() << " in ";
+ if (!silent)cout << e.getFileName() << " at line ";
+ if (!silent)cout << e.getLineNumber() << endl;
+ if (!silent)cout << e.getFunctionName() << " ";
+ if (!silent)cout << e.getMessageText() << endl;
+ return 0;
+ }
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[bool=doughnut]");
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f, "Normal exception caught\n");
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[4]/employees[bool=true]");
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f, "Normal exception caught\n");
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[bytes=whoomp!]");
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f, "Normal exception caught\n");
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/blmployees[bool=true]");
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ fprintf(f, "Normal exception caught\n");
+ }
+
+ try {
+ DataObjectPtr dob1 = dor->getDataObject("departments[teapot]/employees[bool=true]");
+ return 0;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ fprintf(f, "Normal exception caught\n");
+ }
+
+ delete bytes;
+ delete bytes2;
+ delete bytes3;
+ delete mbytes;
+ delete mbytes2;
+ delete mbytes3;
+
+ fclose (f);
+ return comparefiles("querytest.dat","querytest.txt");
+}
+
+int sdotest::setmany()
+{
+
+ FILE *f;
+ f = fopen("setmany.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open setmany.dat" << endl;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","School");
+ mdg->addType("myspace","Class");
+ mdg->addType("myspace","Teacher");
+ mdg->addType("myspace","Child");
+ mdg->addType("myspace","Address");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& ts = mdg->getType("myspace","School");
+ const Type& tc = mdg->getType("myspace","Class");
+ const Type& tch = mdg->getType("myspace","Child");
+ const Type& tt = mdg->getType("myspace","Teacher");
+ const Type& ta = mdg->getType("myspace","Address");
+
+ mdg->addPropertyToType(tc,"name",tstring);
+ mdg->addPropertyToType(ts,"name",tstring);
+ mdg->addPropertyToType(tch,"name",tstring);
+ mdg->addPropertyToType(tt,"name",tstring);
+
+ mdg->addPropertyToType(tc,"number",tint);
+ mdg->addPropertyToType(ts,"number",tint);
+ mdg->addPropertyToType(tch,"number",tint);
+ mdg->addPropertyToType(tt,"number",tint);
+
+ mdg->addPropertyToType(ts,"classes", tc,true);
+ mdg->addPropertyToType(tc,"children", tch,true);
+ mdg->addPropertyToType(tc,"teacher", tt);
+
+ mdg->addPropertyToType(tch,"address", ta);
+ mdg->addPropertyToType(ts,"address", ta);
+ mdg->addPropertyToType(tt,"address", ta);
+
+ mdg->addPropertyToType(ta,"lines", tstring, true);
+
+ DataObjectPtr school = mdg->create((Type&)ts);
+
+ DataObjectPtr class1 = school->createDataObject("classes");
+ DataObjectPtr class2 = school->createDataObject("classes");
+
+ DataObjectPtr teach1 = class1->createDataObject("teacher");
+
+ DataObjectPtr kid1 = class1->createDataObject("children");
+ DataObjectPtr kid2 = class1->createDataObject("children");
+ DataObjectPtr kid3 = class1->createDataObject("children");
+
+ DataObjectPtr teach2 = class2->createDataObject("teacher");
+
+ DataObjectPtr kid4 = class2->createDataObject("children");
+ DataObjectPtr kid5 = class2->createDataObject("children");
+ DataObjectPtr kid6 = class2->createDataObject("children");
+
+ school->setCString("name","King Norberts");
+ school->createDataObject("address");
+ school->setCString("address/lines.0","The Place");
+ school->setCString("address/lines.1","1 The Avenue");
+ school->setCString("address/lines.2","Murchester");
+ school->setCString("address/lines.3","England");
+
+ class1->setCString("name","Primary");
+ class2->setCString("name","Secondary");
+
+ class1->setCString("teacher/name","Mr Philbert Chloroform");
+ class2->setCString("teacher/name","Mr Brian Onasis");
+
+ kid1->setCString("name", "Witherspoon Jnr");
+ kid2->setCString("name", "Snape");
+ kid3->setCString("name", "Thannet");
+ kid4->setCString("name", "Grimbling");
+ kid5->setCString("name", "Snagget Minor");
+ kid6->setCString("name", "Van Den Bograt");
+
+ kid1->setInteger("number", 1);
+ kid2->setInteger("number", 2);
+ kid3->setInteger("number", 3);
+ kid4->setInteger("number", 4);
+ kid5->setInteger("number", 5);
+ kid6->setInteger("number", 6);
+
+ fprintf(f," School :%s\n", school->getCString("name"));
+
+ fprintf(f," Address1:%s\n",school->getCString("address/lines.0"));
+ fprintf(f," Address2:%s\n",school->getCString("address/lines.1"));
+ fprintf(f," Address3:%s\n",school->getCString("address/lines.2"));
+ fprintf(f," Address4:%s\n",school->getCString("address/lines.3"));
+
+ fprintf(f," Class :%s\n",class1->getCString("name"));
+ fprintf(f," Teacher :%s\n",class1->getCString("teacher/name"));
+ fprintf(f," Pupil1 :%s\n",class1->getCString("children.0/name"));
+ fprintf(f," Pupil2 :%s\n",class1->getCString("children[number=2]/name"));
+ fprintf(f," Pupil3 :%s\n",class1->getCString("children[3]/name"));
+
+ fprintf(f," Class :%s\n",class2->getCString("name"));
+ fprintf(f," Teacher :%s\n",class2->getCString("teacher/name"));
+ fprintf(f," Pupil1 :%s\n",class2->getCString("children[1]/name"));
+ fprintf(f," Pupil2 :%s\n",class2->getCString("children.1/name"));
+ fprintf(f," Pupil3 :%s\n",class2->getCString("children[number=6]/name"));
+
+ try {
+ fprintf(f," Pupil3 :%s\n",class2->getCString("children[4]/name"));
+ return 0;
+ }
+ catch (SDOPathNotFoundException e)
+ {
+ fprintf(f,"Expected path not found exception caught\n");
+ }
+ if (XpathHelper::isIndexed("abc[2]")) {
+ fprintf(f, "Indexed as expected\n");
+ }
+ else {
+ fprintf(f, "Bad - not indexed\n");
+ }
+
+ if (XpathHelper::isIndexed("wibble/[2]")) {
+ fprintf(f, "Indexed as expected\n");
+ }
+ else {
+ fprintf(f, "Bad - not indexed\n");
+ }
+
+ if (XpathHelper::isIndexed("wibble/wobble[2]")) {
+ fprintf(f, "Indexed as expected\n");
+ }
+ else {
+ fprintf(f, "Bad - not indexed\n");
+ }
+
+ if (XpathHelper::isIndexed("wibble/wobble.2")) {
+ fprintf(f, "Indexed as expected\n");
+ }
+ else {
+ fprintf(f, "Bad - not indexed\n");
+ }
+
+ if (XpathHelper::isIndexed("wibble/wobble.2")) {
+ fprintf(f, "Indexed as expected\n");
+ }
+ else {
+ fprintf(f, "Bad - not indexed\n");
+ }
+
+ try {
+ fprintf(f," Address5 :%s\n",school->getCString("address/lines[5]"));
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ fprintf(f,"Normal index out of range caught\n");
+ }
+
+ try {
+ school->setCString("address/lines[6]","PostCode");
+ fprintf(f, "Debatable behaviour - appended\n");
+ fprintf(f," Address4 :%s\n",school->getCString("address/lines[5]"));
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout <<"Unexpected exception"<< endl;
+ return 0;
+ }
+
+ fclose(f);
+ return comparefiles("setmany.dat","setmany.txt");
+}
+
+int sdotest::carotest2()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ const Type& troot = mdg->getType("myspace","root");
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ return 0;
+ }
+}
+
+int sdotest::adddeletetest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","bill");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","root","bill",
+ "myspace","bill");
+
+ const Type& troot = mdg->getType("myspace","root");
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+
+ ChangeSummaryPtr cs = root->getChangeSummary();
+ cs->beginLogging();
+ DataObjectPtr dob = root->createDataObject("bill");
+ root->unset("bill");
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ return 0;
+ }
+}
+
+int sdotest::carotest()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+ mdg->addType("myspace","department");
+ mdg->addType("myspace","employee");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","employee","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","companies",
+ "myspace","company", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","departments",
+ "myspace","department", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","eotm",
+ "myspace","employee", false, false, false);
+
+ mdg->addPropertyToType("myspace","department","employees",
+ "myspace","employee", true, false, true);
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+ ChangeSummaryPtr cs = root->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr comp = root->createDataObject("companies");
+
+ comp->setCString("name","Acme");
+
+ //cout << "name of the company is " << comp->getCString("name") << endl;
+ try {
+ root->unset("companies[0]");
+ return 1;
+ }
+ catch (SDOUnsupportedOperationException e)
+ {
+ if (!silent)cout << "Abnormal unsupported operation for unset of many valued item" << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::bug2()
+{
+
+ FILE *f;
+
+ f = fopen("bug2.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open bug2.dat" << endl;
+ return 0;
+ }
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","companies",
+ "myspace","company", true, false, true);
+
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+
+ ChangeSummaryPtr cs = root->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr comp = root->createDataObject("companies");
+
+ comp->setCString("name","Acme");
+
+ dumpproperties(f,root);
+
+ DataObjectList& dl = root->getList("companies");
+ dl.remove(0);
+
+ dumpproperties(f,root);
+
+
+ fprintf(f, "Change summary should have no entries...\n");
+
+ dumpchangesummary(f,cs);
+
+ dumpproperties(f,root);
+
+ fprintf(f, "Change summary should have no entries...\n");
+
+ dumpchangesummary(f,cs);
+
+ fclose(f);
+ return comparefiles("bug2.dat","bug2.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent) cout << e.getEClassName() << " in ";
+ if (!silent) cout << e.getFileName() << " at line ";
+ if (!silent) cout << e.getLineNumber() << endl;
+ if (!silent) cout << e.getFunctionName() << " ";
+ if (!silent) cout << e.getMessageText() << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::dumpproperties(FILE *f, DataObjectPtr root)
+{
+ PropertyList pl = root->getInstanceProperties();
+ for (int i=0;i<pl.size();i++)
+ {
+ if (pl[i].isMany())
+ {
+ DataObjectList& dl = root->getList(pl[i]);
+ if (pl[i].getType().isDataType())
+ {
+ char buf[10];
+ for (int j=0;j<dl.size();j++)
+ {
+
+ sprintf(buf,"%02d",j);
+ fprintf(f,"MProperty:%s[%s]:%s\n",
+ pl[i].getName(),buf,dl.getCString(j));
+ }
+ }
+ else
+ {
+ fprintf(f,"MObject Property %s\n",pl[i].getName());
+ for (int j=0;j<dl.size();j++)
+ {
+ if (dl[j] != 0)
+ {
+ dumpproperties(f, dl[j]);
+ }
+ }
+ fprintf(f,"End of MObject Property %s\n",pl[i].getName());
+ }
+ }
+
+ else
+ {
+ if (pl[i].getType().isDataType())
+ {
+ fprintf(f,"Property:%s:%s\n",pl[i].getName(),root->getCString(pl[i]));
+ }
+ else
+ {
+ fprintf(f,"Object Property%s\n:",pl[i].getName());
+ DataObjectPtr d = root->getDataObject(pl[i]);
+ if (d != 0)
+ {
+ dumpproperties(f, d);
+ }
+ else
+ {
+ fprintf(f," Value was not set or null\n");
+ }
+ fprintf(f,"End of Object Property %s\n",pl[i].getName());
+ }
+ }
+ }
+ return 1;
+}
+
+
+int sdotest::datetest()
+{
+
+ try {
+
+ FILE *f = fopen("datetest.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open datetest.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","startupdate",
+ "commonj.sdo","Date", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","reviewdates",
+ "commonj.sdo","Date", true, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","company",
+ "myspace","company", false, false, true);
+
+
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+ ChangeSummaryPtr cs = root->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr comp = root->createDataObject("company");
+
+
+ comp->setCString("name","DateTest");
+
+ fprintf(f,"Name of the company is %s\n",comp->getCString("name"));
+
+ comp->setDate("startupdate",SDODate( 1000 ));
+
+ fprintf(f,"Set start of the company is %d\n",comp->getDate("startupdate").getTime());
+
+ DataObjectList& dol = comp->getList("reviewdates");
+
+ dol.append(SDODate(2000));
+ dol.append(SDODate(4000));
+
+ for (int i=0;i < dol.size(); i++)
+ {
+ fprintf(f,"Review number:%d was:%d\n", i,dol.getDate(i).getTime());
+
+ // ascTime gives different values on windows and linux,
+ // so comparison of the output is not a valid test.
+
+ //fprintf(f,"Formatted:%d was:%s\n",i,dol.getDate(i).ascTime());
+ }
+
+ cs->endLogging();
+
+ fclose(f);
+
+ return comparefiles("datetest.dat","datetest.txt");
+ }
+
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << e.getEClassName() << " in ";
+ if (!silent)cout << e.getFileName() << " at line ";
+ if (!silent)cout << e.getLineNumber() << endl;
+ if (!silent)cout << e.getFunctionName() << " ";
+ if (!silent)cout << e.getMessageText() << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::matttest1()
+{
+
+ try {
+ FILE *f = fopen("matttest1.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open matttest1.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","root");
+ mdg->addType("myspace","company");
+ mdg->addType("myspace","department");
+ mdg->addType("myspace","employee");
+
+ mdg->addPropertyToType("myspace","root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addPropertyToType("myspace","company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","employee","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","root","companies",
+ "myspace","company", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","departments",
+ "myspace","department", true, false, true);
+
+ mdg->addPropertyToType("myspace","company","eotm",
+ "myspace","employee", false, false, false);
+
+ mdg->addPropertyToType("myspace","department","employees",
+ "myspace","employee", true, false, true);
+
+ const Type& troot = mdg->getType("myspace","root");
+
+
+ DataObjectPtr root = mdg->create((Type&)troot);
+
+ DataObjectPtr comp = root->createDataObject("companies");
+
+ comp->setCString("name","Acme");
+
+ DataObjectPtr dept1 = comp->createDataObject("departments");
+
+ dept1->setCString("name","Shoe");
+
+ DataObjectPtr dept2 = comp->createDataObject("departments");
+
+ dept2->setCString("name","IT");
+
+ DataObjectPtr sue = dept1->createDataObject("employees");
+
+ sue->setCString("name","Sue");
+
+ DataObjectPtr billy = dept2->createDataObject("employees");
+
+ billy->setCString("name","Billy");
+
+ // Want to swap Sue and Billy so, while holding them in variables, should be
+ //able to unset from department then reinsert
+
+ // method 1 - clear the lists...
+ dept1->unset("employees");
+ dept2->unset("employees");
+
+ DataObjectPtr cont = billy->getContainer();
+
+ if (cont != 0)
+ {
+ if (!silent)cout << "Container of Billy should be zero, but is :" << cont->getCString("name") << endl;
+ return 0;
+ }
+
+ DataObjectList& li1 = dept1->getList("employees");
+ DataObjectList& li2 = dept2->getList("employees");
+ li1.append(billy);
+ li2.append(sue);
+
+ DataObjectPtr cont2 = billy->getContainer();
+
+ if (cont2 != 0)
+ {
+ fprintf(f,"Container of Billy should be dept1, and is :%s\n", cont2->getCString("name"));
+ }
+ else {
+ if (!silent)cout << "Problem - Billy is not contained." << endl;
+ return 0;
+ }
+
+ li1.remove(0);
+ li2.remove(0);
+
+ DataObjectPtr cont3 = billy->getContainer();
+
+ if (cont3 != 0)
+ {
+ if (!silent)cout << "Container of Billy should be zero, but is :" << cont3->getCString("name") << endl;
+ return 0;
+ }
+
+ li1.append(sue);
+ li2.append(billy);
+
+ DataObjectPtr cont4 = billy->getContainer();
+
+ if (cont4 != 0)
+ {
+ fprintf(f,"Container of Billy should be dept2, and is :%s\n", cont4->getCString("name"));
+ }
+ else {
+ if (!silent)cout << "Problem - Billy is not contained." << endl;
+ return 0;
+ }
+
+ fclose(f);
+
+ return comparefiles("matttest1.dat","matttest1.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << e.getEClassName() << " in ";
+ if (!silent)cout << e.getFileName() << " at line ";
+ if (!silent)cout << e.getLineNumber() << endl;
+ if (!silent)cout << e.getFunctionName() << " ";
+ if (!silent)cout << e.getMessageText() << endl;
+ return 0;
+ }
+}
+
+int sdotest::carotest3()
+{
+ // sequence new APIs
+ // data object list, new getLength(unsigned int)
+
+
+ FILE *f = fopen("carotest3.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open carotest3.dat" << endl;
+ return 0;
+ }
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ // company is sequenced.
+ mdg->addType("myspace","Company",true,false);
+
+ mdg->addType("myspace","Department",true,false);
+ // string is many
+
+ mdg->addPropertyToType("myspace","Company","string","commonj.sdo","String",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","departments","myspace","Department",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","strings","commonj.sdo","String",
+ true);
+
+ mdg->addPropertyToType("myspace","Company","integers","commonj.sdo","Integer",
+ true);
+
+
+ mdg->addPropertyToType("myspace","Department","name","commonj.sdo","String");
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr dor = mdg->create(tcc);
+ const Property& sprop = dor->getType().getProperty("string");
+
+ SequencePtr sptr = dor->getSequence();
+
+ printseq(f,sptr);
+
+ sptr->addCString(sprop,"I am Item 1 of string");
+
+ printseq(f,sptr);
+
+ sptr->addText("I am the first free text");
+
+ printseq(f,sptr);
+
+ sptr->addCString(sprop,"I am Item 2 of string");
+
+ printseq(f,sptr);
+
+ sptr->setText(1,"I am free text which has been modified");
+
+ printseq(f,sptr);
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+
+ printseq(f,sptr);
+
+ dep1->setCString("name","department1");
+
+ printseq(f,sptr);
+
+ DataObjectList& dol = dor->getList("departments");
+
+ unsigned int ii = dol.getLength(0);
+
+ if (ii != 0)
+ {
+ if (!silent)cout << "Length of a data object should be zero:" << ii << endl;
+ return 0;
+ }
+
+ DataObjectList& strl = dor->getList("strings");
+
+ wchar_t * buf = new wchar_t[5];
+ buf[0] = 'a';
+ buf[1] = 'b';
+ buf[2] = 'c';
+ buf[3] = 'd';
+ buf[4] = 'e';
+
+ strl.append(buf,1);
+ strl.append(buf,2);
+ strl.append(buf,3);
+ strl.append(buf,4);
+ strl.append(buf,5);
+
+ fprintf(f,"Element zero, length 1: %d\n",strl.getLength(0));
+ fprintf(f,"Element one, length 2: %d\n",strl.getLength(1));
+ fprintf(f,"Element two, length 3: %d\n",strl.getLength(2));
+ fprintf(f,"Element three,length 4: %d\n",strl.getLength(3));
+ fprintf(f,"Element four, length 5: %d\n",strl.getLength(4));
+
+ try {
+ int xx = strl.getLength(5);
+ if (!silent)cout << "problem - element 5 should not exist" << endl;
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ if (!silent)cout << "Normal out of range exception in test" << endl;
+ }
+
+ DataObjectList& numl = dor->getList("integers");
+
+ try {
+ int xx2 = numl.getLength(0);
+ if (!silent)cout << "problem - element 0 should not exist" << endl;
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ if (!silent)cout << "Normal out of range exception in test" << endl;
+ }
+ fclose(f);
+ return comparefiles("carotest3.dat","carotest3.txt");
+}
+
+
+int sdotest::eqhelpertest()
+{
+
+ // copy and equality helpers
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Assembly");
+ mdg->addType("myspace","SubAssembly");
+ mdg->addType("myspace","Part");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tassy = mdg->getType("myspace","Assembly");
+ const Type& tsubassy = mdg->getType("myspace","SubAssembly");
+ const Type& tpart = mdg->getType("myspace","Part");
+
+
+ mdg->addPropertyToType(tassy,"name",tstring);
+ mdg->addPropertyToType(tsubassy,"name",tstring);
+ mdg->addPropertyToType(tpart,"name",tstring);
+
+ mdg->addPropertyToType(tassy,"number",tint);
+ mdg->addPropertyToType(tsubassy,"number",tint);
+ mdg->addPropertyToType(tpart,"number",tint);
+
+ mdg->addPropertyToType(tassy,"subassemblies", tsubassy,true);
+ mdg->addPropertyToType(tsubassy,"parts", tpart,true);
+
+
+ // assy 1
+
+ DataObjectPtr assy1 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy1 = assy1->createDataObject("subassemblies");
+ DataObjectPtr subassy2 = assy1->createDataObject("subassemblies");
+
+ DataObjectPtr part1 = subassy1->createDataObject("parts");
+ DataObjectPtr part2 = subassy1->createDataObject("parts");
+ DataObjectPtr part3 = subassy1->createDataObject("parts");
+
+ DataObjectPtr part4 = subassy2->createDataObject("parts");
+ DataObjectPtr part5 = subassy2->createDataObject("parts");
+ DataObjectPtr part6 = subassy2->createDataObject("parts");
+
+
+ assy1->setCString("name","MicroFrame");
+ assy1->setInteger("number",32768);
+
+ subassy1->setCString("name","Legs");
+ subassy2->setCString("name","Body");
+ subassy1->setInteger("number",1);
+ subassy2->setInteger("number",2);
+
+ part1->setCString("name","Leg1");
+ part2->setCString("name","Leg2");
+ part3->setCString("name","Leg3");
+ part1->setInteger("number",10001);
+ part2->setInteger("number",10002);
+ part3->setInteger("number",10003);
+
+
+ part4->setCString("name","MainStrut");
+ part5->setCString("name","Brace1");
+ part6->setCString("name","Brace2");
+ part4->setInteger("number",20001);
+ part5->setInteger("number",20002);
+ part6->setInteger("number",20003);
+
+ // assy2 - shallow equal to assy, but not deep equal
+
+ DataObjectPtr assy2 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy3 = assy2->createDataObject("subassemblies");
+ DataObjectPtr subassy4 = assy2->createDataObject("subassemblies");
+
+ DataObjectPtr part7 = subassy3->createDataObject("parts");
+ DataObjectPtr part8 = subassy3->createDataObject("parts");
+ DataObjectPtr part9 = subassy3->createDataObject("parts");
+
+ DataObjectPtr part10 = subassy4->createDataObject("parts");
+ DataObjectPtr part11 = subassy4->createDataObject("parts");
+ DataObjectPtr part12 = subassy4->createDataObject("parts");
+
+
+ assy2->setCString("name","MicroFrame");
+ assy2->setInteger("number",32768);
+
+ subassy3->setCString("name","Legs");
+ subassy4->setCString("name","Body");
+ subassy3->setInteger("number",1);
+ subassy4->setInteger("number",2);
+
+ part7->setCString("name","Leg1");
+ part8->setCString("name","Leg2");
+ part9->setCString("name","Leg3");
+ part7->setInteger("number",10001);
+ part8->setInteger("number",10002);
+ part9->setInteger("number",10003);
+
+
+ part10->setCString("name","MainStrut");
+ part11->setCString("name","Brace1");
+ part12->setCString("name","OddBrace2");
+ part10->setInteger("number",20001);
+ part11->setInteger("number",20002);
+ part12->setInteger("number",20003);
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ if (!silent) cout << "EQUALITY HELPER TEST - failure at first test" << endl;
+ return 0;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at second test" << endl;
+ return 0;
+ }
+
+ // Now alter assy2 to be deep equal...
+
+
+ part12->setCString("name","Brace2");
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at third test" << endl;
+ return 0;
+ }
+ if (!EqualityHelper::equal(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at fourth test" << endl;
+ return 0;
+ }
+
+ // now add a part, so its not deep equal again
+ DataObjectPtr part13 = subassy4->createDataObject("parts");
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at fifth test" << endl;
+ return 0;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at sixth test" << endl;
+ return 0;
+ }
+
+ // now remove that part again...
+ DataObjectList& dl = subassy4->getList("parts");
+ dl.remove(3);
+
+ // should be deep equal again...
+
+ if (!EqualityHelper::equalShallow(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at seventh test" << endl;
+ return 0;
+ }
+ if (!EqualityHelper::equal(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at eighth test" << endl;
+ return 0;
+ }
+ // now make them not shallow equal
+ assy2->setInteger("number",32767);
+
+ if (EqualityHelper::equalShallow(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at nineth test" << endl;
+ return 0;
+ }
+ if (EqualityHelper::equal(assy1, assy2))
+ {
+ if (!silent)cout << "EQUALITY HELPER TEST - failure at tenth test" << endl;
+ return 0;
+ }
+ return 1;
+}
+
+int sdotest::cohelpertest()
+{
+
+ // copy and equality helpers
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Assembly");
+ mdg->addType("myspace","SubAssembly");
+ mdg->addType("myspace","Part");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tassy = mdg->getType("myspace","Assembly");
+ const Type& tsubassy = mdg->getType("myspace","SubAssembly");
+ const Type& tpart = mdg->getType("myspace","Part");
+
+
+ mdg->addPropertyToType(tassy,"name",tstring);
+ mdg->addPropertyToType(tsubassy,"name",tstring);
+ mdg->addPropertyToType(tpart,"name",tstring);
+
+ mdg->addPropertyToType(tassy,"number",tint);
+ mdg->addPropertyToType(tsubassy,"number",tint);
+ mdg->addPropertyToType(tpart,"number",tint);
+
+ mdg->addPropertyToType(tassy,"subassemblies", tsubassy,true);
+ mdg->addPropertyToType(tsubassy,"parts", tpart,true);
+
+
+ // assy 1
+
+ DataObjectPtr assy1 = mdg->create((Type&)tassy);
+
+ DataObjectPtr subassy1 = assy1->createDataObject("subassemblies");
+ DataObjectPtr subassy2 = assy1->createDataObject("subassemblies");
+
+ DataObjectPtr part1 = subassy1->createDataObject("parts");
+ DataObjectPtr part2 = subassy1->createDataObject("parts");
+ DataObjectPtr part3 = subassy1->createDataObject("parts");
+
+ DataObjectPtr part4 = subassy2->createDataObject("parts");
+ DataObjectPtr part5 = subassy2->createDataObject("parts");
+ DataObjectPtr part6 = subassy2->createDataObject("parts");
+
+
+ assy1->setCString("name","MicroFrame");
+ assy1->setInteger("number",32768);
+
+ subassy1->setCString("name","Legs");
+ subassy2->setCString("name","Body");
+ subassy1->setInteger("number",1);
+ subassy2->setInteger("number",2);
+
+ part1->setCString("name","Leg1");
+ part2->setCString("name","Leg2");
+ part3->setCString("name","Leg3");
+ part1->setInteger("number",10001);
+ part2->setInteger("number",10002);
+ part3->setInteger("number",10003);
+
+
+ part4->setCString("name","MainStrut");
+ part5->setCString("name","Brace1");
+ part6->setCString("name","Brace2");
+ part4->setInteger("number",20001);
+ part5->setInteger("number",20002);
+ part6->setInteger("number",20003);
+
+ // first lets shallow copy assy1:
+
+ DataObjectPtr assy2 = CopyHelper::copyShallow(assy1);
+
+ if (strcmp(assy2->getCString("name"),"MicroFrame"))
+ {
+ if (!silent)cout << "COPYHELPER shallow copy failed(1)" << endl;
+ return 0;
+ }
+ else if (assy2->getInteger("number") != 32768)
+ {
+ if (!silent)cout << "COPYHELPER shallow copy 1 failed(2)" << endl;
+ return 0;
+ }
+ else if (assy2->getList("subassemblies").size() != 0)
+ {
+ if (!silent)cout << "COPYHELPER shallow copy 1 failed(3)" << endl;
+ return 0;
+ }
+ else if (assy2->getContainer() != 0)
+ {
+ if (!silent)cout << "COPYHELPER shallow copy failed(4)" << endl;
+ return 0;
+ }
+
+ // now deep copy it
+
+ DataObjectPtr assy3 = CopyHelper::copy(assy1);
+
+ if (!EqualityHelper::equal(assy1, assy3))
+ {
+ if (!silent)cout << "COPYHELPER deep copy failed(1)" << endl;
+ return 0;
+ }
+ else if (assy3->getContainer() != 0)
+ {
+ if (!silent)cout << "COPYHELPER deep copy failed(2)" << endl;
+ return 0;
+ }
+ return 1;
+}
+
+
+int sdotest::cssave()
+{
+
+ try {
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ //mdg->addType("companyNS","CompanyType");
+ //mdg->addType("companyNS","EmployeeType");
+ //mdg->addType("companyNS","DepartmentType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ //mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ //mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ //mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ //mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ //mdg->addPropertyToType(tdept,"name",tstring);
+ //mdg->addPropertyToType(tdept,"location",tstring);
+ //mdg->addPropertyToType(tdept,"number",tstring);
+ //mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ //mdg->addPropertyToType(temp, "name",tstring);
+ //mdg->addPropertyToType(temp, "SN", tstring);
+ //mdg->addPropertyToType(temp, "manager", tbool);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","John Jones");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Mary Smith");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Jane Doe");
+ emp3->setCString("SN","E0003");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectPtr emp4 = mdg->create(temp);
+ emp4->setCString("name","Al Smith");
+ emp4->setCString("SN","E0004");
+ emp4->setBoolean("manager",true);
+
+ // first change - create employee 4
+ dol2.append(emp4);
+
+ dol2.remove(1); // element 1 is Mary
+
+ DataObjectPtr emp5 = mdg->create(temp);
+ emp5->setCString("name","Bill Withers");
+ emp5->setCString("SN","E0005");
+
+ dol2.append(emp5);
+
+
+ comp->setCString("name","MegaCorp");
+ comp->setDataObject("employeeOfTheMonth",emp4);
+
+ // silly test - add mary back again
+ dol2.append(emp2);
+
+
+
+
+ cs->endLogging();
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"cssave-output.xml");
+ return comparefiles("cssave-output.xml","cssave-output.txt");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "CSSAVE FAILED" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::cssave2()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Eastleigh Borough Council");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Waste Disposal");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+ DataObjectPtr emp4 = mdg->create(temp);
+ DataObjectPtr emp5 = mdg->create(temp);
+
+ emp1->setCString("name","Alphonse Dodet");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Bridget Jones");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Colin Thorne");
+ emp3->setCString("SN","E0003");
+
+ emp4->setCString("name","Donald Trump");
+ emp4->setCString("SN","E0004");
+
+ emp5->setCString("name","Eddy the eagle");
+ emp5->setCString("SN","E0005");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+ dol2.append(emp4);
+ dol2.append(emp5);
+
+ //comp->setDataObject("employeeOfTheMonth",emp2);
+
+ DataObjectPtr dept2 = mdg->create((Type&)tdept);
+ dol.append(dept2);
+
+ dept2->setCString("name","Tax Collection");
+ dept2->setCString("location","Winchester");
+ dept2->setCString("number","666");
+
+ DataObjectPtr empb1 = mdg->create(temp);
+ DataObjectPtr empb2 = mdg->create(temp);
+ DataObjectPtr empb3 = mdg->create(temp);
+ DataObjectPtr empb4 = mdg->create(temp);
+ DataObjectPtr empb5 = mdg->create(temp);
+
+ empb1->setCString("name","Arch Meanie");
+ empb1->setCString("SN","D0001");
+
+ empb2->setCString("name","Boris the Spider");
+ empb2->setCString("SN","D0002");
+ empb2->setBoolean("manager",true);
+
+ empb3->setCString("name","Cash Hoarder");
+ empb3->setCString("SN","D0003");
+
+ empb4->setCString("name","Dean Giyatoss");
+ empb4->setCString("SN","D0004");
+
+ empb5->setCString("name","Ebenezer Scrooge");
+ empb5->setCString("SN","D0005");
+
+ DataObjectList& dol3 = dept2->getList("employees");
+ dol3.append(empb1);
+ dol3.append(empb2);
+ dol3.append(empb3);
+ dol3.append(empb4);
+ dol3.append(empb5);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ // start by deleting a few employees from dept 1
+
+ dol2.remove(1); // B
+ dol2.remove(1); // C
+ dol2.remove(1); // D
+
+ // Now delete the tax collectors as a whole
+
+ dol.remove(1);
+
+ // now perhaps add back one of the employees
+
+ dol2.append(emp3); // C
+
+ comp->setCString("name","MegaCorp");
+
+ try {
+ comp->setDataObject("employeeOfTheMonth",emp4);
+ if (!silent)cout << "emp4 was not in the tree" << endl;
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ }
+
+ comp->setDataObject("employeeOfTheMonth",emp5);
+
+ cs->endLogging();
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"cssave2-output.xml");
+ return comparefiles("cssave2-output.xml","cssave2-output.txt");
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "CSSAVE FAILED" << e << endl;
+ return 0;
+ }
+}
+
+
+
+
+
+int sdotest::b45933()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","WombatType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& twom = mdg->getType("companyNS","WombatType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"bools",tbool, true);
+ mdg->addPropertyToType(tcomp,"woms",twom, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Bug45933");
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ DataObjectList& dol = comp->getList("bools");
+ dol.append(false);
+ dol.remove(0);
+ DataObjectPtr awom = mdg->create((Type&)twom);
+ DataObjectList& dol2 = comp->getList("woms");
+ dol2.append(awom);
+ dol2.remove(0);
+
+ cs->endLogging();
+
+ //dumpchangesummary(cs);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"bug45933-output.xml");
+ return comparefiles("bug45933-output.xml","bug45933-output.txt");
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "BUG45933 FAILED" << endl << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::b46617()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ //XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ //xsh->defineFile("b46617.xsd");
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","DepartmentType");
+ mdg->addType("companyNS","EmployeeType");
+
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"departments",tdept,true,false,true);
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp,false,false,false);
+ mdg->addPropertyToType(tcomp,"CEO",temp,false,false,true);
+
+ mdg->addPropertyToType(tdept,"employees",temp,true,false,true);
+ mdg->addPropertyToType(tdept,"name",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"location",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"number",tstring,false,false,true);
+
+ mdg->addPropertyToType(temp,"name",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"SN",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"manager",tbool,false,false,true);
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Eastleigh Borough Council");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Waste Disposal");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","Alphonse Dodet");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Bridget Jones");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl Marx");
+ emp3->setCString("SN","E0003");
+
+ comp->setDataObject("CEO",emp2);
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ //dol2.append(emp2);
+ dol2.append(emp3);
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ XSDHelperPtr xmd = HelperProvider::getXSDHelper(mdg);
+ xmd->generateFile(mdg->getTypes(),
+ "b46617.xsd","companyNS");
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"b46617.xml");
+
+ // now try loading the xml, using the same schema, and see if we get the
+ // same answer
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46617.xml", "companyNS");
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+
+ if (strcmp(newdob->getDataObject("employeeOfTheMonth")->getCString("name"),
+ "Bridget Jones"))
+ {
+ if (!silent)cout << "Employee of the month name has changed" << endl;
+ return 0;
+ }
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "b46617 failed" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::b46617b()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("b46617b.xsd");
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46617b.xml", "companyNS");
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+ if (strcmp(newdob->getDataObject("employeeOfTheMonth")->getCString("name"),
+ "Fred Smith"))
+ {
+ if (!silent)cout << "Employee of the month name has changed" << endl;
+ return 0;
+ }
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "b46617b failed" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::notfound()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ try {
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("not_present.xsd");
+ }
+ catch (SDOFileNotFoundException e)
+ {
+ //cout << "NotFound threw correct exception " << endl;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "NOTFOUND THREW THE WRONG EXCEPTION" << e << endl;
+ return 0;
+ }
+
+ try {
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("not-present.xml", "companyNS");
+
+ }
+ catch (SDOFileNotFoundException ee)
+ {
+ //cout << "NotFound threw the correct exception" << endl;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "NOTFOUND THREW THE WRONG EXCEPTION" << e << endl;
+ return 0;
+ }
+ return 1;
+}
+
+int sdotest::csload()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("cssave-output.xml", "companyNS");
+ //myXMLDocument->setRootElementName("company");
+ //myXMLHelper->save(myXMLDocument,"csload-output.xml");
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "csload-output.xml");
+
+ return comparefiles("csload-output.xml","csload-output.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "CSLOAD FAILED" << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::testsubsload()
+{
+ try
+ {
+ FILE *f = fopen("testsubsload.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open testsubsload.dat" << endl;
+ return 0;
+ }
+
+ fprintf(f,"TEST: TestSubsLoad ==========================================\n");
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companysubs.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANYSUBS XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ // so now we should be able to put book or a magazine into
+ // the publication under company...
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+ // inherted from publication
+ book1->setCString("title","Nowhere Man");
+
+ DataObjectPtr mag1 = mdg->create(mag);
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+
+
+ // publication should accept any of them...
+
+ comp->setDataObject("Publication",pub1);
+ const Type& tpub1 = comp->getDataObject("Publication")->getType();
+ fprintf(f,"Publication is of type %s\n",tpub1.getName());
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ fprintf(f,"Publication is of type %s\n",tpub2.getName());
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ fprintf(f,"Publication is of type %s\n",tpub3.getName());
+
+ // should be able to address publication as book or magazine
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ fprintf(f, "Book is of type %s\n",tpub4.getName());
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ fprintf(f,"Magazine is of type %s\n",tpub5.getName());
+ fprintf(f,"END TEST: TestSubsLoad ======================================\n");
+ fclose(f);
+ return comparefiles("testsubsload.dat","testsubsload.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in TeseSubsLoad" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::testSCA()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("sca.xsd");
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in TeseSCA" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::testabstract()
+{
+ try
+ {
+
+ FILE *f = fopen("testabstract.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open testabstract.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companyabs.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANYABS XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ // so now we should be able to put book or a magazine into
+ // the publication under company...
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+ // should be allowed...
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+ // inherted from publication
+ book1->setCString("title","Nowhere Man");
+
+ DataObjectPtr mag1 = mdg->create(mag);
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+ try {
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+ }
+ catch (SDOUnsupportedOperationException e)
+ {
+ fprintf(f,"Normal unsupportedoperation for creation of abstract type\n");
+ }
+
+
+ // publication should accept books and magazines...
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ fprintf(f,"Publication is of type %s\n",tpub2.getName());
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ fprintf(f,"Publication is of type %s\n",tpub3.getName());
+
+ // should be able to address publication as book or magazine
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ fprintf(f,"Book is of type %s\n",tpub4.getName());
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ fprintf(f,"Magazine is of type %s\n",tpub5.getName());
+
+ fclose(f);
+ return comparefiles("testabstract.dat","testabstract.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in TestAbstract" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::testOpen()
+{
+ try
+ {
+
+ FILE *f = fopen("testopen.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open testopen.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ // now we should be able to add extra properties to employees,
+ // and get them back again...
+
+ try {
+ emp1->setNull("openstring");
+ return 0;
+ }
+ catch (SDOUnsupportedOperationException e)
+ {
+ fprintf(f,"Normal exception for setting null on undefined prop\n");
+ }
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ fprintf(f,"Open Type string value: %s\n",c);
+
+ bool b = emp1->getBoolean("openboolean");
+
+ fprintf(f,"Open Type boolean value: %d\n", b);
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("opentypelist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive
+
+ // we should now have instance properties
+ PropertyList pl = emp1->getType().getProperties();
+
+ for (i=0;i<pl.size();i++)
+ {
+ fprintf(f,"EMP1 type property: %s ( many? %d) of type %s\n" ,pl[i].getName()
+ , pl[i].isMany(),
+ pl[i].getType().getName());
+ }
+
+ PropertyList pli = emp1->getInstanceProperties();
+
+ for (i=0;i<pli.size();i++)
+ {
+ fprintf(f, "EMP1 inst property: %s (many? %d) of type %s\n",
+ pli[i].getName(), pli[i].isMany(), pli[i].getType().getName());
+ }
+
+
+ // now we try to set the string to null..
+
+ emp1->setNull("openstring");
+
+ emp1->setCString("openstring","New Value Of Open String");
+
+
+ // now unset them and see them disappear - what happens to the indices?
+
+ emp1->unset("openstring");
+
+ PropertyList plk = emp1->getInstanceProperties();
+
+ for (i=0;i<plk.size();i++)
+ {
+ fprintf(f,"EMP1 inst property: %s (many? %d) of type %s\n",
+ plk[i].getName(), plk[i].isMany(), plk[i].getType().getName());
+ }
+
+ emp1->unset("openboolean");
+
+ dl.remove(0); // so is this list gone, or empty - I vote for still there.
+
+ PropertyList pll = emp1->getInstanceProperties();
+ for (i=0;i<pll.size();i++)
+ {
+ fprintf(f,"EMP1 inst property: %s (many? %d) of type %s\n",
+ pll[i].getName(), pll[i].isMany(),pll[i].getType().getName());
+ }
+
+ emp1->unset("opentypelist");
+
+ // now I vote for gone...
+
+ PropertyList plm = emp1->getInstanceProperties();
+ for (i=0;i<plm.size();i++)
+ {
+ fprintf(f,"EMP1 inst property: %s (many? %d) of type %s\n", plm[i].getName()
+ , plm[i].isMany() , plm[i].getType().getName());
+ }
+
+ fclose(f);
+ return comparefiles("testopen.dat","testopen.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in TestOpen" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::saveOpen()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ mdg->addType("companyNS","OpenType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+ const Type& topen = mdg->getType("companyNS","OpenType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+ mdg->setAlias("companyNS","CompanyType","TheFirm");
+ mdg->setAlias("companyNS","CompanyType","departments","TheDepartments");
+ mdg->setAlias("companyNS","CompanyType","departments","MYDepartments");
+ mdg->setAlias("companyNS","CompanyType","TheBigFirm");
+
+ mdg->addPropertyToType(topen,"name",tstring);
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectList& emps = dept->getList("employees");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emps.append(emp1);
+ emps.append(emp2);
+ emps.append(emp3);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ // now we should be able to add extra properties to employees,
+ // and get them back again...
+
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ //cout << "Open Type string value: " << c << endl;
+
+ bool b = emp1->getBoolean("openboolean");
+
+ //cout << "Open Type boolean value: " << b << endl;
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("openintlist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive and short!!
+
+ // unknown list type at present..
+ DataObjectList& dl2 = emp1->getList("opendataobjectlist");
+
+ DataObjectPtr myopen = mdg->create("companyNS","OpenType");
+ myopen->setCString("name","MyOpenName");
+ dl2.append(myopen); // now the list must be of data objects
+
+
+ // now a single valued data object - should have an xsi:type
+ emp1->setDataObject("opendataobject", myopen);
+
+
+ cs->endLogging();
+
+ //dumpchangesummary(cs);
+
+ XSDHelperPtr xdh = HelperProvider::getXSDHelper(mdg);
+
+ xdh->generateFile(mdg->getTypes(),
+ "saveopen-output.xsd","companyNS");
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"saveopen-output.xml");
+
+ return comparefiles("saveopen-output.xml","saveopen-output.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in SaveOpen" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::loadOpen()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("saveopen-output.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("partial.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+ if (strcmp(emp->getProperty("openboolean").getType().getName(),
+ "Boolean"))
+ {
+ if (!silent)cout << "OpenLoad failure - bool property not boolean" << endl;
+ return 0;
+
+ }
+ if (emp->getBoolean("openboolean") != true)
+ {
+ if (!silent)cout << "OpenLoad failure - bool property not true" << endl;
+ return 0;
+ }
+
+ if (strcmp(emp->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ if (!silent)cout << "OpenLoad failure - bytes property not bytes" << endl;
+ return 0;
+
+ }
+ if (strcmp(emp->getCString("openstring"),"Value Of Open String"))
+ {
+ if (!silent)cout << "OpenLoad failure - string value is" <<
+ emp->getCString("openstring") << endl;
+ return 0;
+ }
+
+
+ DataObjectList& dl3 = emp->getList("openintlist");
+
+ if (strcmp(emp->getProperty("openintlist").getType().getName(),
+ "Short"))
+ {
+ if (!silent)cout << "OpenLoad failure - IntegerList not Short " <<
+ emp->getProperty("openintlist").getType().getName() << endl;
+ return 0;
+ }
+
+ if (dl3.getInteger(0) != 45)
+ {
+ if (!silent)cout << "OpenLoad failure - Integer value is" <<
+ dl.getInteger(0) << endl;
+ return 0;
+ }
+
+ if (strcmp(emp->getProperty("opendataobjectlist").getType().getName(),
+ "OpenType"))
+ {
+ if (!silent)cout << "OpenLoad failure - OpenTypeList not OpenType" << endl;
+ return 0;
+ }
+
+ DataObjectList& dl4 = emp->getList("opendataobjectlist");
+
+ if (strcmp(dl4[0]->getCString("name"),"MyOpenName"))
+ {
+ if (!silent)cout << "OpenLoad failure - list element name is " <<
+ dl4[0]->getCString("name") << endl;
+ return 0;
+ }
+
+ if (strcmp(emp->getProperty("opendataobject").getType().getName(),
+ "OpenType"))
+ {
+ if (!silent)cout << "OpenLoad failure - OpenType not OpenType" << endl;
+ return 0;
+ }
+
+ DataObjectPtr dob2 = emp->getDataObject("opendataobject");
+
+ if (strcmp(dob2->getCString("name"),"MyOpenName"))
+ {
+ if (!silent)cout << "OpenLoad failure - open value name is " <<
+ dob2->getCString("name") << endl;
+ return 0;
+ }
+
+
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "loadload-output.xml");
+ return comparefiles("loadload-output.xml","loadload-output.txt");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "LoadOpen FAILED" << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::loadOpenNS()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("openloadNS.xsd");
+ xsh->defineFile("openloadNS2.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("openloadNS.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+ if (strcmp(emp->getProperty("openboolean").getType().getName(),
+ "Boolean"))
+ {
+ if (!silent)cout << "OpenLoadNS failure - bool property not boolean" << endl;
+ return 0;
+
+ }
+ if (emp->getBoolean("openboolean") != true)
+ {
+ if (!silent)cout << "OpenLoadNS failure - bool property not true" << endl;
+ return 0;
+ }
+
+ if (strcmp(emp->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ if (!silent)cout << "OpenLoadNS failure - bytes property not bytes" << endl;
+ return 0;
+
+ }
+ if (strcmp(emp->getCString("openstring"),"Value Of Open String"))
+ {
+ if (!silent)cout << "OpenLoadNS failure - string value is" <<
+ emp->getCString("openstring") << endl;
+ return 0;
+ }
+
+
+ DataObjectList& dl3 = emp->getList("openintlist");
+
+ if (strcmp(emp->getProperty("openintlist").getType().getName(),
+ "Short"))
+ {
+ if (!silent)cout << "OpenLoadNS failure - IntegerList not Short " <<
+ emp->getProperty("openintlist").getType().getName() << endl;
+ return 0;
+ }
+
+ if (dl3.getInteger(0) != 45)
+ {
+ if (!silent)cout << "OpenLoadNS failure - Integer value is" <<
+ dl.getInteger(0) << endl;
+ return 0;
+ }
+
+
+
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "openloadNSout.xml");
+
+ if (!comparefiles("openloadNSout.xml","openloadNSout.txt"))return 0;
+
+
+ // now try exactly the same, but with NS which doesnt exist
+ XMLDocumentPtr myXMLDocument2 = myXMLHelper->loadFile("openloadNS2.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp2 = myXMLDocument2->getRootDataObject();
+ DataObjectList& dld = comp2->getList("departments");
+ DataObjectPtr dept2 = dld[0];
+ DataObjectList& dl22 = dept2->getList("employees");
+ DataObjectPtr emp2 = dl22[0];
+
+ if (strcmp(emp2->getProperty("openboolean").getType().getName(),
+ "Bytes"))
+ {
+ if (!silent)cout << "OpenLoadNS2 failure - bool property not bytes" << endl;
+ return 0;
+
+ }
+ if (emp2->getBoolean("openboolean") != true)
+ {
+ if (!silent)cout << "OpenLoadNS2 failure - bool property not true" << endl;
+ return 0;
+ }
+
+ if (strcmp(emp2->getProperty("openstring").getType().getName(),
+ "Bytes"))
+ {
+ if (!silent)cout << "OpenLoadNS2 failure - bytes property not bytes" << endl;
+ return 0;
+
+ }
+ if (strcmp(emp2->getCString("openstring"),"Value Of Open String"))
+ {
+ if (!silent)cout << "OpenLoadNS failure - string value is" <<
+ emp2->getCString("openstring") << endl;
+ return 0;
+ }
+
+
+ DataObjectList& dl32 = emp2->getList("openintlist");
+
+ if (strcmp(emp2->getProperty("openintlist").getType().getName(),
+ "OpenDataObject"))
+ {
+ if (!silent)cout << "OpenLoadNS2 failure - IntegerList not OpenDataObject " <<
+ emp2->getProperty("openintlist").getType().getName() << endl;
+ return 0;
+ }
+
+ if (atoi(dl32.getDataObject(0)->getSequence()->getCStringValue(0)) != 45)
+ {
+ if (!silent)cout << "OpenLoadNS2 failure - Integer value is" <<
+ dl32.getInteger(0) << endl;
+ return 0;
+ }
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "LoadOpenNS FAILED" << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::loadManyOpen()
+{
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("many.xsd");
+
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+ //int i;
+ //TypeList tl = mdg->getTypes();
+ //for (i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("many.xml", "companyNS");
+
+
+
+ // so, we now expect that the openboolean and openstring props will
+ // be of type boolean and Bytes, and the openlist will be a list of integers.
+ // The dataobjectlist an dataobject will be of the correct OpenType
+
+ // we need a test for data objects, and that we are writing out xsi:type
+ // correctly.
+ DataObjectPtr comp = myXMLDocument->getRootDataObject();
+ DataObjectList& dl = comp->getList("departments");
+ DataObjectPtr dept = dl[0];
+ DataObjectList& dl2 = dept->getList("employees");
+ DataObjectPtr emp = dl2[0];
+
+
+ DataObjectList& dl3 = emp->getList("openlist");
+
+ // change to match spec - now an open data object
+ // the list should contain a single data object with a sequence of three text elements
+
+ if (strcmp(emp->getProperty("openlist").getType().getName(),
+ "OpenDataObject"))
+ {
+ if (!silent)cout << "OpenManyLoad failure - BytesList not OpenDataObject " <<
+ emp->getProperty("openlist").getType().getName() << endl;
+ return 0;
+ }
+
+ if (dl3.size() != 3)
+ {
+ if (!silent)cout << "OpenManyLoad failure - size is " <<
+ dl3.size() << endl;
+ return 0;
+ }
+
+ SequencePtr sq = dl3[0]->getSequence();
+ if (strcmp(sq->getCStringValue(0),"Three member")) return 0;
+
+ SequencePtr sq2 = dl3[1]->getSequence();
+ if (strcmp(sq2->getCStringValue(0),"Open bytes")) return 0;
+
+ SequencePtr sq3 = dl3[2]->getSequence();
+ if (strcmp(sq3->getCStringValue(0),"List is complete")) return 0;
+
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "LoadOpen FAILED" << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::csload2()
+{
+ //cout << "TEST: CSLoad2 ===============================================" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+ //cout << "TYPES LOADED FROM COMPANY XSD" << endl;
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("cssave2-output.xml", "companyNS");
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "csload2-output.xml");
+
+ if (!comparefiles("csload2-output.xml","csload2-output.txt")) return 0;
+
+ XMLDocumentPtr myXMLDocument2 = myXMLHelper->loadFile("csload2-output.xml", "companyNS");
+ myXMLHelper->save(myXMLDocument2->getRootDataObject(),
+ 0, "company", "csload3-output.xml");
+
+ return comparefiles("csload3-output.xml","csload3-output.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in CsLoad2" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::bug1()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ try {
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("bugs/1/company.xsd");
+
+ //TypeList tl = mdg->getTypes();
+ //for (int i=0;i< tl.size(); i++)
+ //{
+ // cout << tl[i].getURI() << ":" << tl[i].getName() << endl;
+ //}
+
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("bugs/1/company.xml",
+ "http://www.mycompanyinc.com");
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in Bug1" << e << endl;
+ return 0;
+ }
+ return 1;
+}
+
+int sdotest::setnull()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("NullNS","NullMainType");
+ mdg->addType("NullNS","NullSubType");
+
+ /* Now add the properties to the types...*/
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tint = mdg->getType("commonj.sdo","Integer");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tmain = mdg->getType("NullNS","NullMainType");
+ const Type& tsub = mdg->getType("NullNS","NullSubType");
+
+
+ mdg->addPropertyToType(tmain,"name",tstring);
+ mdg->addPropertyToType(tmain,"subs",tsub, true); // many
+ mdg->addPropertyToType(tmain,"asub",tsub, false); // single
+ mdg->addPropertyToType(tmain,"bsub",tsub, false); // single
+
+ mdg->addPropertyToType(tmain,"cs",tcs); // change summary
+
+ mdg->addPropertyToType(tsub,"name",tstring);
+ mdg->addPropertyToType(tsub,"number",tint);
+ mdg->addPropertyToType(tsub,"bool",tbool);
+
+
+ // create a graph, then save it
+
+ DataObjectPtr main1 = mdg->create((Type&)tmain);
+ main1->setCString("name","MainObject");
+
+ // asub is initially set
+ DataObjectPtr sub0 = main1->createDataObject("asub");
+ // bsub is not set.
+
+ DataObjectPtr sub1 = mdg->create((Type&)tsub);
+ DataObjectPtr sub2 = mdg->create((Type&)tsub);
+ DataObjectPtr sub3 = mdg->create((Type&)tsub);
+
+ DataObjectList& dol = main1->getList("subs");
+
+ dol.append(sub1);
+ dol.append(sub2);
+ dol.append(sub3);
+
+ // sub1 has all values set initially
+
+ sub1->setCString("name","All Initially set");
+ sub1->setInteger("number",100);
+ sub1->setBoolean("bool",false);
+
+ // sub2 has no values set at all
+
+
+ // sub3 has all values set to null
+ sub3->setNull("name");
+ sub3->setNull("number");
+ sub3->setNull("bool");
+
+
+ // report
+
+ if (main1->isNull("asub")) return 0;
+
+ if (!main1->isSet("asub")) return 0;
+
+ if (main1->isNull("bsub")) return 0;
+
+ if (main1->isSet("bsub")) return 0;
+
+// dol0 is set, not null
+
+ if (dol[0]->isNull("name")) return 0;
+
+ if (dol[0]->isNull("number")) return 0;
+
+ if (dol[0]->isNull("bool")) return 0;
+
+ if (!dol[0]->isSet("name")) return 0;
+
+ if (!dol[0]->isSet("number")) return 0;
+
+ if (!dol[0]->isSet("bool")) return 0;
+
+// dol1 is all unset , so no nulls
+
+ if (dol[1]->isNull("name")) return 0;
+
+ if (dol[1]->isNull("number")) return 0;
+
+ if (dol[1]->isNull("bool")) return 0;
+
+ if (dol[1]->isSet("name")) return 0;
+
+ if (dol[1]->isSet("number")) return 0;
+
+ if (dol[1]->isSet("bool")) return 0;
+
+// dol2 is all nulls, so all set
+
+ if (!dol[2]->isNull("name")) return 0;
+
+ if (!dol[2]->isNull("number")) return 0;
+
+ if (!dol[2]->isNull("bool")) return 0;
+
+ if (!dol[2]->isSet("name")) return 0;
+
+ if (!dol[2]->isSet("number")) return 0;
+
+ if (!dol[2]->isSet("bool")) return 0;
+
+ ChangeSummaryPtr cs = main1->getChangeSummary();
+
+ cs->beginLogging();
+
+ main1->setNull("asub");
+ main1->setNull("bsub");
+
+ dol[0]->setNull("name");
+ dol[0]->setNull("number");
+ dol[0]->setNull("bool");
+
+ dol[1]->setNull("bool");
+
+ dol[2]->setCString("name","NewName");
+ dol[2]->setInteger("number",100);
+ dol[2]->setBoolean("bool",true);
+
+
+ cs->endLogging();
+
+ // what would we expect from the change summary?
+
+ //cout << "==============Expected in Change Summary=================" << endl;
+ //cout << "change to main1 - object asub set to null, oldvalue asub (set)" << endl;
+ //cout << "change to main1 - object bsub set to null, oldvalue null (unset)" << endl;
+ //cout << "change to sub1 - name asub set to null, oldvalue \"All Initially Set\" (set)" << endl;
+ //cout << "change to sub1 - number asub set to null, oldvalue 100 (set)" << endl;
+ //cout << "change to sub1 - bool asub set to null, oldvalue false (set)" << endl;
+ //cout << "change to sub2 - bool asub set to null, oldvalue false (unset)" << endl;
+ //cout << "change to sub3 - name asub set to \"NewName\", oldvalue null, set" << endl;
+ //cout << "change to sub3 - number asub set to 100, oldvalue null, set" << endl;
+ //cout << "change to sub3 - bool asub set to true, oldvalue null, set" << endl;
+ //cout << "==============End Expected in Change Summary=============" << endl;
+
+ FILE* f = fopen("setnull.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open setnull.dat" << endl;
+ return 0;
+ }
+
+ dumpchangesummary(f, cs);
+
+ fclose(f);
+
+ if (!comparefiles("setnull.dat","setnull.txt")) return 0;
+
+ // report
+
+ if (!main1->isNull("asub")) return 0;
+
+ if (!main1->isSet("asub")) return 0;
+
+ if (!main1->isNull("bsub")) return 0;
+
+ if (!main1->isSet("bsub")) return 0;
+
+// dol0 is set to null
+
+ if (!dol[0]->isNull("name")) return 0;
+
+ if (!dol[0]->isNull("number")) return 0;
+
+ if (!dol[0]->isNull("bool")) return 0;
+
+ if (!dol[0]->isSet("name")) return 0;
+
+ if (!dol[0]->isSet("number")) return 0;
+
+ if (!dol[0]->isSet("bool")) return 0;
+
+// dol1 is all unset except bool which is null
+
+ if (dol[1]->isNull("name")) return 0;
+
+ if (dol[1]->isNull("number")) return 0;
+
+ if (!dol[1]->isNull("bool")) return 0;
+
+ if (dol[1]->isSet("name")) return 0;
+
+ if (dol[1]->isSet("number")) return 0;
+
+ if (!dol[1]->isSet("bool")) return 0;
+
+// dol2 is all set non-null, so all set
+
+ if (dol[2]->isNull("name")) return 0;
+
+ if (dol[2]->isNull("number")) return 0;
+
+ if (dol[2]->isNull("bool")) return 0;
+
+ if (!dol[2]->isSet("name")) return 0;
+
+ if (!dol[2]->isSet("number")) return 0;
+
+ if (!dol[2]->isSet("bool")) return 0;
+
+
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in setnull" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::testsubs()
+{
+
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","MainType");
+
+ mdg->addType("companyNS","SubType");
+ mdg->addType("companyNS","SuperType");
+ mdg->addType("companyNS","SubstituteType");
+ mdg->addType("companyNS","UnrelatedType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tmain = mdg->getType("companyNS","MainType");
+ const Type& sub = mdg->getType("companyNS","SubType");
+ const Type& super = mdg->getType("companyNS","SuperType");
+ const Type& subst = mdg->getType("companyNS","SubstituteType");
+ const Type& unrel = mdg->getType("companyNS","UnrelatedType");
+
+
+ mdg->addPropertyToType(tmain,"name",tstring);
+ mdg->addPropertyToType(tmain,"sub",super, false);
+ mdg->addPropertyToType(tmain,"subs",super, true);
+
+
+ mdg->setPropertySubstitute(tmain, "sub","wilbur", subst);
+ mdg->setPropertySubstitute(tmain, "subs","wilburs", subst);
+
+ mdg->setBaseType(sub,super);
+
+ //now sub and subs should accept all the three types
+
+ DataObjectPtr main = mdg->create((Type&)tmain);
+ main->setCString("name","SubstituteTest");
+
+ DataObjectList& dol = main->getList("subs");
+
+ DataObjectPtr sub1 = mdg->create(sub);
+ DataObjectPtr super1 = mdg->create(super);
+ DataObjectPtr subst1 = mdg->create(subst);
+ DataObjectPtr unrel1 = mdg->create(unrel);
+
+ dol.append(sub1);
+ dol.append(super1);
+ dol.append(subst1);
+ try
+ {
+ dol.append(unrel1);
+ return 0;
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ //cout << "Normal failure to append wrong type" << endl;
+ }
+
+ dol.remove(0);
+ dol.remove(0);
+ dol.remove(0);
+
+ DataObjectList& dol2 = main->getList("wilburs");
+
+ dol2.append(sub1);
+ dol2.append(super1);
+ dol2.append(subst1);
+ try
+ {
+ dol2.append(unrel1);
+ return 0;
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ //cout << "Normal failure to append wrong type" << endl;
+ }
+
+ main->setDataObject("sub",sub1);
+ main->setDataObject("sub",super1);
+ main->setDataObject("sub",subst1);
+
+ main->setDataObject("wilbur",sub1);
+ main->setDataObject("wilbur",super1);
+ main->setDataObject("wilbur",subst1);
+
+ try
+ {
+ main->setDataObject("sub", unrel1);
+ return 0;
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ //cout << "Normal failure to set wrong type" << endl;
+ }
+ return 1;
+ }
+
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Substitute test failed" << endl << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::merle1()
+{
+
+ try {
+
+ // Dynamic setup of the metadata
+
+ FILE *f = fopen("merle1.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open merle1.dat" << endl;
+ return 0;
+ }
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("axis.xsd");
+
+ // or dynamically create, but that would get attributes for the strings, not elements
+ //mdg->addType("axis","ItemSearch",true); // sequenced
+ //mdg->addType("axis","ItemSearchRequest",true); // sequenced
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tsearch = mdg->getType("axis","ItemSearch");
+ const Type& treq = mdg->getType("axis","ItemSearchRequest");
+
+ //mdg->addPropertyToType(tsearch,"SubscriptionId",tstring);
+ //mdg->addPropertyToType(tsearch,"AssociateTag",tstring);
+ //mdg->addPropertyToType(tsearch,"XMLEscaping",tstring);
+ //mdg->addPropertyToType(tsearch,"Validate",tstring);
+ //mdg->addPropertyToType(tsearch,"Shared",treq, false, false, true);
+ //mdg->addPropertyToType(tsearch,"Request",treq, true, false, true);
+
+ //mdg->addPropertyToType(treq,"Keywords",tstring);
+ //mdg->addPropertyToType(treq,"SearchIndex",tstring);
+
+ // dynamic creation of the data
+
+ DataObjectPtr search = mdg->create((Type&)tsearch);
+
+ search->setCString("SubscriptionId","I am the subscription ID string");
+ search->setCString("AssociateTag","I am the associate Tag string");
+ search->setCString("XMLEscaping","I am the XML escaping string");
+ search->setCString("Validate","I am the Validate string");
+
+ DataObjectPtr shared = search->createDataObject("Shared");
+ shared->setCString("Keywords","SharedKeywordsString");
+ shared->setCString("SearchIndex","SearchIndexString");
+
+ DataObjectList& requests = search->getList("Request");
+ DataObjectPtr request1 = mdg->create(treq);
+ requests.append(request1);
+ request1->setCString("Keywords","RequestKeywords");
+ request1->setCString("SearchIndex","RequestSearchIndex");
+
+ // Read the data and put it into XML:
+
+ PropertyList properties = search->getInstanceProperties();
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+ for (int i=0;i<properties.size();i++)
+ {
+ Property& prop = properties[i];
+ switch (prop.getTypeEnum())
+ {
+
+ case Type::StringType:
+ fprintf(f,"<%s>%s</%s>\n",prop.getName(), search->getCString(prop),
+ prop.getName());
+ break;
+
+ case Type::DataObjectType:
+ if (prop.isMany())
+ {
+ // many valued property, such as Requests , so get the list
+ DataObjectList& rq = search->getList(prop);
+ for (int j=0;j<rq.size();j++)
+ {
+ DataObjectPtr dob = rq[j];
+ if (dob != 0)
+ {
+ XMLDocumentPtr doc = myXMLHelper->createDocument(dob,
+ "axis", prop.getName());
+ doc->setXMLDeclaration(false);
+ char* dobXML = myXMLHelper->save(doc);
+ fprintf(f,"DataObject \"%s\" as XML:\n",prop.getName());
+ fprintf(f,"%s\n", dobXML);
+ } // if dob
+ } // for
+ } // if many
+ else
+ {
+ DataObjectPtr dob = search->getDataObject(prop);
+ if (dob != 0)
+ {
+ XMLDocumentPtr doc = myXMLHelper->createDocument(dob,
+ "axis", prop.getName());
+ doc->setXMLDeclaration(false);
+ char* dobXML = myXMLHelper->save(doc);
+ fprintf(f,"DataObject \"%s\" as XML:\n",prop.getName());
+ fprintf(f, "%s\n", dobXML);
+ } // if
+ } // else
+ break;
+
+ default:
+ break;
+
+ } // switch
+ } // for
+ fclose(f);
+ return comparefiles("merle1.dat","merle1.txt");
+ } // try
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Merle 1 failed" << endl << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::graham3()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham3.xsd");
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Graham1 failed " << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::graham1()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham1.xsd");
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Graham1 failed " << e << endl;
+ return 0;
+ }
+}
+int sdotest::graham2()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("graham2.xsd");
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Graham2 failed " << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::b46613()
+{
+ try {
+
+ // Dynamic setup of the metadata
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->create("rubbish","MyObject");
+
+ return 0;
+
+ }
+ catch (SDOTypeNotFoundException e)
+ {
+ //cout << "b46613 gave the correct exception" << endl;
+ return 1;
+ }
+}
+
+int sdotest::doctest()
+{
+ try {
+
+ FILE *f = fopen("doctest.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open doctest.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("doctest.xsd");
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("doctest.xml",
+ "companyNS");
+ fprintf(f,"RootURI=%s\n",myXMLDocument->getRootElementURI());
+ fprintf(f,"RootName=%s\n",myXMLDocument->getRootElementName());
+ fclose(f);
+ return comparefiles("doctest.dat","doctest.txt");
+ }
+ catch (SDOTypeNotFoundException e)
+ {
+ if (!silent)cout << "doctest failed" << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::b46634()
+{
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company_with_nillable_SN.xsd");
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("company_with_nillable_SN.xml",
+ "companyNS");
+
+ DataObjectPtr dob = myXMLDocument->getRootDataObject();
+ DataObjectList& dol = dob->getList("departments");
+ DataObjectPtr dept = dol[0];
+ DataObjectList& dol2 = dept->getList("employees");
+ DataObjectPtr emp = dol2[0];
+
+ if (!emp->isSet("SN"))
+ {
+ if (!silent)cout << "B46634 WRONG - isSet should be true" << endl;
+ return 0;
+ }
+ if (!emp->isNull("SN"))
+ {
+ if (!silent)cout << "B46634 WRONG - isNull should be true" << endl;
+ return 0;
+ }
+
+ // now write out the nill value and check its still nil
+ myXMLHelper->save(myXMLDocument->getRootDataObject(),
+ 0, "company", "b46634_out.xml");
+ return comparefiles("b46634_out.xml","b46634_out.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "b46634 failed" << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::testErrors()
+{
+ try {
+
+ int i,j;
+
+ FILE *f = fopen("testerrors.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open testerrors.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("error1.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ fprintf(f,"XSD reported some errors:\n");
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) fprintf(f,"%s\n", m);
+ }
+ }
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("error1.xml",
+ "companyNS");
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ fprintf(f,"XML reported some errors:\n");
+ for (j=0;j<i;j++)
+ {
+ const char *m = myXMLHelper->getErrorMessage(j);
+ if (m != 0) fprintf(f,"%s\n",m);
+ }
+ }
+
+ fclose(f);
+ return comparefiles("testerrors.dat","testerrors.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "testErrors failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::b46734()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("wsdl.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "WSDL XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ xsh->defineFile("wsdl-soap.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "WSDL SOAP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ xsh->defineFile("wsdl-http.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "WSDL HTTP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("StockQuoteService.wsdl"
+ );
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "XML reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char * m = myXMLHelper->getErrorMessage(j);
+ if (m != 0)cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "b46734 failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::b46693()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("b46693.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "b46693 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0)cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ // XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ // XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("b46693.xsd"
+ // );
+
+ // if ((i = myXMLHelper->getErrorCount()) > 0)
+ // {
+ // cout << "b46693 reported some errors:" << endl;
+ // for (j=0;j<i;j++)
+ // {
+ // const char* m = myXMLHelper->getErrorMessage(j);
+ // if (m != 0)cout << m;
+ // cout << endl;
+ // }
+ // }
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "b46693 failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::clonetest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("companyNS","CompanyType");
+ mdg->addType("companyNS","DepartmentType");
+ mdg->addType("companyNS","EmployeeType");
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ mdg->addPropertyToType(tcomp,"departments",tdept,true,false,true);
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp,false,false,false);
+ mdg->addPropertyToType(tcomp,"CEO",temp,false,false,true);
+
+ mdg->addPropertyToType(tdept,"employees",temp,true,false,true);
+ mdg->addPropertyToType(tdept,"name",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"location",tstring,false,false,true);
+ mdg->addPropertyToType(tdept,"number",tstring,false,false,true);
+
+ mdg->addPropertyToType(temp,"name",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"SN",tstring,false,false,true);
+ mdg->addPropertyToType(temp,"manager",tbool,false,false,true);
+
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","The Company");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","The Department");
+ dept->setCString("location","Botley");
+ dept->setCString("number","123");
+
+
+ // now clone the data factory, and add more types
+
+ DataFactoryPtr df2 = mdg->clone();
+
+ df2->addType("otherNS","DataSet");
+
+ df2->addPropertyToType("companyNS","DepartmentType","dataset",
+ "otherNS","DataSet", false, false, true);
+
+ const Type& tstring2 = df2->getType("commonj.sdo","String");
+ const Type& tbool2 = df2->getType("commonj.sdo","Boolean");
+ const Type& tcs2 = df2->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp2 = df2->getType("companyNS","CompanyType");
+ const Type& tdept2 = df2->getType("companyNS","DepartmentType");
+ const Type& temp2 = df2->getType("companyNS","EmployeeType");
+
+ DataObjectPtr comp2 = df2->create((Type&)tcomp2);
+ comp->setCString("name","The Company");
+
+ DataObjectPtr dept2 = df2->create((Type&)tdept2);
+
+ DataObjectList& dol2 = comp2->getList("departments");
+ dol2.append(dept2);
+
+ dept2->setCString("name","The Other Department");
+ dept2->setCString("location","Not Botley");
+ dept2->setCString("number","321");
+
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "clone failed " << e << endl;
+ return 0;
+ }
+
+
+}
+
+int sdotest::testUtil()
+{
+ try {
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/false,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+ mdg->addType("companyNS","DepartmentType");
+
+ mdg->addType("companyNS","OpenType");
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+ const Type& topen = mdg->getType("companyNS","OpenType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+ // not containment...
+ mdg->addPropertyToType(tcomp,"employeeOfTheMonth",temp, false,false,false);
+ mdg->addPropertyToType(tcomp,"departments",tdept, true);
+ mdg->addPropertyToType(tcomp,"cs",tcs);
+
+ mdg->addPropertyToType(tdept,"name",tstring);
+ mdg->addPropertyToType(tdept,"location",tstring);
+ mdg->addPropertyToType(tdept,"number",tstring);
+ mdg->addPropertyToType(tdept,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+ mdg->addPropertyToType(temp, "SN", tstring);
+ mdg->addPropertyToType(temp, "manager", tbool);
+
+ mdg->addPropertyToType(topen,"name",tstring);
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectList& emps = dept->getList("employees");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emps.append(emp1);
+ emps.append(emp2);
+ emps.append(emp3);
+
+ emp1->setCString("name","Albert");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Boris");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Carl");
+ emp3->setCString("SN","E0003");
+
+ emp1->setCString("openstring","Value Of Open String");
+ emp1->setBoolean("openboolean",true);
+
+ const char* c = emp1->getCString("openstring");
+
+ bool b = emp1->getBoolean("openboolean");
+
+ // unknown list type at present..
+ DataObjectList& dl = emp1->getList("openintlist");
+
+ int i = 45;
+ dl.append((short)i); // now the list must be primitive and short!!
+
+ // unknown list type at present..
+ DataObjectList& dl2 = emp1->getList("opendataobjectlist");
+
+ DataObjectPtr myopen = mdg->create("companyNS","OpenType");
+ myopen->setCString("name","MyOpenName");
+ dl2.append(myopen); // now the list must be of data objects
+
+ emp1->setDataObject("opendataobject", myopen);
+
+ filebuf fb;
+ fb.open ("testutils.dat",ios::out);
+ ostream os(&fb);
+ SDOUtils::printDataObject(os, comp);
+ fb.close();
+ return comparefiles("testutils.dat","testutils.txt");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ERROR in UTILS test" << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::printset(FILE *f, ChangeSummaryPtr cs)
+{
+ ChangedDataObjectList& cdl = cs->getChangedDataObjects();
+
+ // here there should be a creation of Ed, and a change to dept, which has a
+ // bool previously unset, and a int list previuously unset and an employees list
+ // previously unset
+
+ for (int i=0;i< cdl.size();i++)
+ {
+ if (cs->isModified(cdl[i]))
+ {
+
+ fprintf(f,"A modified of type %s#%s\n",cdl[i]->getType().getURI()
+ ,cdl[i]->getType().getName());
+
+ SettingList& sl = cs->getOldValues(cdl[i]);
+ if (sl.size() == 0)
+ {
+ fprintf(f,"No Settings found\n");
+ }
+ else
+ {
+ for (int j=0;j< sl.size(); j++)
+ {
+ fprintf(f,"Property %s",sl[j].getProperty().getName());
+ // this could be a many-valued property, and could be one which is
+ // a data object or a data type...
+ if (sl[j].getProperty().isMany())
+ {
+ fprintf(f,"[%s]",sl[j].getIndex());
+ }
+ if (!sl[j].isSet())
+ {
+ fprintf(f," was unset before the change\n");
+ }
+ else
+ {
+ fprintf(f," was set before the change !!\n");
+ }
+ }
+ }
+ }
+ }
+ return 1;
+}
+
+
+int sdotest::b46633()
+{
+ try {
+
+ FILE *f = fopen("b46633.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open b46633.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addPropertyToType("myspace","Root","cs",
+ "commonj.sdo","ChangeSummary", false, false, false);
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Manager");
+ mdg->addType("myspace","Employee");
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","company",
+ "myspace","Company", false, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+
+ mdg->addPropertyToType("myspace","Department","bool",
+ "commonj.sdo","Boolean", false, false, false);
+
+ mdg->addPropertyToType("myspace","Department","manager",
+ "myspace","Manager", false, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Manager","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ ChangeSummaryPtr cs = dor->getChangeSummary();
+
+ DataObjectPtr com = dor->createDataObject("company");
+ com->setCString("name","IBM");
+
+ DataObjectPtr dept = com->createDataObject("departments");
+ dept->setCString("name","JTC");
+
+ // employees initally unset
+
+ cs->beginLogging();
+
+ DataObjectPtr emp = dept->createDataObject("employees");
+ emp->setCString("name","Ed");
+
+
+
+ DataObjectList& dl = dept->getList("ints");
+ dl.append((long)400);
+
+ dept->setBoolean("bool", true);
+
+ printset(f,cs);
+
+ cs->endLogging();
+
+ // unset them all , restart logging, and get the same results
+
+ dept->unset("bool");
+ dept->unset("ints");
+ dept->unset("employees");
+
+ cs->beginLogging();
+
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ emp2->setCString("name","Ed2");
+
+ dl.append((long)600);
+
+ dept->setBoolean("bool", true);
+
+ printset(f, cs);
+
+ cs->endLogging();
+
+ fclose(f);
+
+ return comparefiles("b46633.dat","b46633.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "b46633 failed " << e << endl;
+ return 0;
+ }
+
+}
+
+
+
+int sdotest::testLoad()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ FILE* f = fopen("company_with_nillable_SN.xsd","r+");
+ char* buffer = new char[4000];
+ j = 0;
+ while ((i = fgetc(f)) != EOF)
+ {
+ buffer[j++] = (char)i;
+ }
+ buffer[j] = 0;
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->define(buffer);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent) {
+ cout << "XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ FILE* f2 = fopen("company_with_nillable_SN.xml","r+");
+ j = 0;
+ while ((i = fgetc(f2)) != EOF)
+ {
+ buffer[j++] = (char)i;
+ }
+ buffer[j] = 0;
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr myXMLDocument = myXMLHelper->load(buffer);
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in testDAS " << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::includetest()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("include.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ xsh->defineFile("../test/test/includeother.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in include test" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::detachtest()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Manager");
+ mdg->addType("myspace","Employee");
+
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","company",
+ "myspace","Company", false, false, true);
+
+ mdg->addPropertyToType("myspace","Company","departments",
+ "myspace","Department", true, false, true);
+
+
+ mdg->addPropertyToType("myspace","Department","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Department","manager",
+ "myspace","Manager", false, false, true);
+
+ mdg->addPropertyToType("myspace","Department","employees",
+ "myspace","Employee", true, false, true);
+
+ mdg->addPropertyToType("myspace","Manager","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Employee","name",
+ "commonj.sdo","String", false, false, false);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectPtr com = dor->createDataObject("company");
+ com->setCString("name","IBM");
+
+ DataObjectPtr dept = com->createDataObject("departments");
+
+ dept->setCString("name","JTC");
+
+
+ DataObjectPtr emp = dept->createDataObject("employees");
+ emp->setCString("name","Ed");
+
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ emp2->setCString("name","Tom");
+
+ DataObjectList& dol = dept->getList("employees");
+
+ DataObjectPtr e = dol[0];
+ e->detach();
+
+ DataObjectPtr cont = emp->getContainer();
+
+ if (cont != 0)
+ {
+ if (!silent)cout << "EMP STILL ATTACHED - problem" << endl;
+ return 0;
+ }
+
+ DataObjectPtr cont2 = dol[0]->getContainer();
+
+ if (cont2 == 0)
+ {
+ if (!silent)cout << "SECOND DETACHED - problem" << endl;
+ return 0;
+ }
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "detach failed " << e << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::leak()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+
+ if (dor->isSet("ints")) return 0;
+
+ DataObjectList& dl = dor->getList("ints");
+
+ if (dor->isSet("ints")) return 0;
+
+ dl.append((long)400);
+
+ if (!dor->isSet("ints")) return 0;
+
+ dl.remove(0);
+
+ if (dor->isSet("ints")) return 0;
+
+ dl.append((long)400);
+
+ if (!dor->isSet("ints")) return 0;
+
+ dor->unset("ints");
+
+ if (dor->isSet("ints")) return 0;
+
+ dl.append((long)600);
+
+ if (!dor->isSet("ints")) return 0;
+
+ return 1;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "leak failed " << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::twolists()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+ mdg->addPropertyToType("myspace","Root","ints2",
+ "commonj.sdo","Integer", true, false, false);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectList& dl2 = dor->getList("ints2");
+ dl2.append((long)400);
+
+
+ DataObjectList& dl = dor->getList("ints");
+ dl.append((long)400);
+ return 1;
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "twolists failed " << e << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::graham4()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addType("myspace","ListItem");
+
+
+ mdg->addPropertyToType("myspace","ListItem","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+ mdg->addPropertyToType("myspace","Root","items",
+ "myspace","ListItem", true, false, true);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+
+ // first try with no elements in lists
+
+ try {
+ DataObjectPtr pitem = dor->getDataObject("items[name=\"hello\"]");
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ //cout << "Normal exception in Graham4" << endl;
+ }
+
+ try {
+ int inty = dor->getInteger("ints[1]");
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ //cout << "Normal exception in Graham4" << endl;
+ }
+
+ // now populate them
+
+ DataObjectPtr myitem = dor->createDataObject("items");
+ myitem->setCString("name","not hello");
+
+ try {
+ DataObjectPtr pitem2 = dor->getDataObject("items[name=\"hello\"]");
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ //cout << "Normal exception in Graham4" << endl;
+ }
+
+ DataObjectList& dl = dor->getList("ints");
+ dl.append((long)100);
+
+ try {
+ int inty2 = dor->getInteger("ints[2]");
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ //cout << "Normal exception in Graham4" << endl;
+ }
+
+ try
+ {
+ DataObjectPtr pitem2 = dor->getDataObject("items[name=\"not hello\"]");
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "ABNORMAL exception in Graham4" << endl;
+ return 0;
+ }
+
+ try {
+ int inty2 = dor->getInteger("ints[1]");
+ //cout << "Integer is " << inty2 << endl;
+ return 1;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+
+ if (!silent)cout << "ABNORMAL exception in Graham4" << endl;
+ return 0;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "twolists failed " << e << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::graham5()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("Order.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ return 1;
+ }
+ catch (SDORuntimeException r)
+ {
+ if (!silent)cout << "Graham5 failed " << r << endl;
+ return 0;
+ }
+}
+
+int sdotest::graham6()
+{
+ try
+ {
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("g/Order.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->loadFile("g/order.xml", "orderNS");
+
+ char* str = xmh->save(doc);
+ FILE* f = fopen("g/string-output.xml","w+");
+ if (f != 0)
+ {
+ fputs(str,f);
+ fclose(f);
+ }
+
+ xmh->save(doc,"g/graham6-output.xml");
+
+ // now get the root and try that
+ DataObjectPtr dob = doc->getRootDataObject();
+ char* str2 = xmh->save(dob,"orderNS","order");
+ FILE* f2 = fopen("g/string-output-2.xml","w+");
+ if (f2 != 0)
+ {
+ fputs(str2,f2);
+ fclose(f2);
+ }
+
+ xmh->save(dob,"orderNS","order", "g/graham6-output-2.xml");
+
+ if (!comparefiles("g/string-output.xml","g/string-output.txt"))return 0;
+ if (!comparefiles("g/graham6-output.xml","g/graham6-output.txt")) return 0;
+ if (!comparefiles("g/string-output-2.xml","g/string-output-2.txt")) return 0;
+ return 1;
+
+ }
+ catch (SDORuntimeException r)
+ {
+ if (!silent)cout << "Graham6 failed " << r << endl;
+ return 0;
+ }
+}
+
+int sdotest::b47137()
+{
+
+ try
+ {
+ FILE *f = fopen("b47137.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open b47137.dat" << endl;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("b47137.xsd");
+
+ DataObjectPtr dob = mdg->create("","guid");
+
+ const Type& t = dob->getType();
+
+ PropertyList pl = t.getProperties();
+
+ for (int i=0;i<pl.size();i++)
+ {
+ fprintf(f,"Property:%s\n", pl[i].getName());
+ }
+
+ dob->setCString("value","Hello");
+ dob->setBoolean("isPermaLink",true);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ xmh->save(dob,"","fluid","b47137_out.xml");
+
+ // now try to read back the file ..
+
+ XMLDocumentPtr doc = xmh->loadFile("b47137_out.xml", "");
+
+ DataObjectPtr dob2 = doc->getRootDataObject();
+
+ const Type& t2 = dob2->getType();
+
+ PropertyList pl2 = t2.getProperties();
+
+ for (int j=0;j<pl2.size();j++)
+ {
+ fprintf(f,"Property:%s\n",pl2[j].getName());
+ fprintf(f, "Value:%s\n", dob2->getCString(pl2[j]));
+ }
+
+ fclose(f);
+ return comparefiles("b47137.dat","b47137.txt");
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "B47137 failed " << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::b47137b()
+{
+ int i,j;
+ try
+ {
+
+ FILE *f = fopen("b47137b.dat","w+");
+ if (f == 0)
+ {
+ if (!silent) cout << "Unable to open b47137b.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("b47137b.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "INCLUDE XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+ for (int k=0;k<tl.size();k++)
+ {
+ fprintf(f,"Type:%s#%s\n",tl[k].getURI(),tl[k].getName());
+ }
+
+ DataObjectPtr dob = mdg->create("companyNS","CompanyType");
+
+ const Type& t = dob->getType();
+
+ PropertyList pl = t.getProperties();
+
+ for (int i=0;i<pl.size();i++)
+ {
+ fprintf(f, "Property:%s\n",pl[i].getName());
+ }
+
+ DataObjectPtr dobguid = dob->createDataObject("guid");
+
+ dobguid->setCString("value","Wilbur");
+ dobguid->setBoolean("isPermaLink",true);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ xmh->save(dob,"","company","b47137b_out.xml");
+
+ // now try to read back the file ..
+
+ XMLDocumentPtr doc = xmh->loadFile("b47137b_out.xml", "");
+
+ DataObjectPtr dob2 = doc->getRootDataObject();
+
+ const Type& t2 = dob2->getType();
+
+ PropertyList pl2 = t2.getProperties();
+
+ for (int j=0;j<pl2.size();j++)
+ {
+
+ fprintf(f,"Property:%s\n",pl2[j].getName());
+ if (!strcmp(pl2[j].getName(),"guid"))
+ {
+ DataObjectPtr dobguid2 = dob2->getDataObject("guid");
+ if (dobguid2 != 0)
+ {
+ fprintf(f,"guid Value:%s\n",dobguid2->getCString("value"));
+ fprintf(f,"guid isPermaLink:",dobguid2->getCString("isPermaLink"));
+ }
+ else
+ {
+ fprintf(f,"GUID is empty\n");
+ }
+ }
+ }
+ fclose(f);
+ return comparefiles("b47137b.dat","b47137b.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "B47137b failed " << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::b47293()
+{
+ int i,j,k;
+ try
+ {
+ FILE *f = fopen("b47293.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open b47293.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("47293Catalog.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "47293 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+ for ( k=0;k<tl.size();k++)
+ {
+ fprintf(f,"Type:%s#%s",tl[k].getURI(),tl[k].getName());
+ }
+
+ xsh->generateFile(tl,"47293Catalog-out.xsd","catalogNS",0);
+
+ DataFactoryPtr mdg2 = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh2 = HelperProvider::getXSDHelper(mdg2);
+
+ xsh2->defineFile("47293Catalog-out.xsd");
+
+ if ((i = xsh2->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "47293-out XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh2->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ TypeList tl2 = mdg2->getTypes();
+ for (k=0;k<tl2.size();k++)
+ {
+ fprintf(f,"Type:%s#%s\n",tl2[k].getURI(),tl2[k].getName());
+ }
+ fclose(f);
+ return comparefiles("b47293.dat","b47293.txt");
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "B47137b failed " << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::b47802()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addType("myspace","ListItem");
+
+ mdg->addPropertyToType("myspace","Root","ints",
+ "commonj.sdo","Integer", true, false, false);
+
+ mdg->addPropertyToType("myspace","Root","items",
+ "myspace","ListItem", true, false, true);
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+ const Type& tcl = mdg->getType("myspace","ListItem");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ DataObjectList& dol1 = dor->getList("ints");
+
+ DataObjectList& dol2 = dor->getList("items");
+
+
+ dol1.append((long)34);
+ dol1.append((long)56);
+
+ DataObjectPtr li1 = mdg->create(tcl);
+ DataObjectPtr li2 = mdg->create(tcl);
+
+ dol2.append(li1);
+ dol2.append(li2);
+
+ dor->unset("ints[1]"); // should work
+ dor->unset("items.0"); // should work
+
+ try {
+
+ dor->unset("ints[2]"); // should not work
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ //cout << "Normal index oor in 47802" << endl;
+ }
+
+ try {
+ dor->unset("items.1"); // should not work
+ return 0;
+ }
+ catch (SDOIndexOutOfRangeException e)
+ {
+ // cout << "Normal index oor in 47802" << endl;
+ }
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Problem in b47802" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::b47663()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ DataFactoryPtr mdg2 = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+ mdg->addType("myspace","ListItem");
+ mdg->addType("myspace","Item");
+
+ mdg->addPropertyToType("myspace","Root","itemref",
+ "myspace","Item", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","itemcont",
+ "myspace","Item", false, false, true);
+
+ mdg->addPropertyToType("myspace","Root","items",
+ "myspace","ListItem", true, false, true);
+
+ mdg2->addType("myspace","Root");
+ mdg2->addType("myspace","ListItem");
+ mdg2->addType("myspace","Item");
+
+ mdg2->addPropertyToType("myspace","Root","itemref",
+ "myspace","Item", false, false, false);
+
+ mdg2->addPropertyToType("myspace","Root","itemcont",
+ "myspace","Item", false, false, true);
+
+ mdg2->addPropertyToType("myspace","Root","items",
+ "myspace","ListItem", true, false, true);
+
+
+
+ const Type& tcc = mdg->getType("myspace","Root");
+ const Type& tcl = mdg->getType("myspace","ListItem");
+ const Type& tci = mdg->getType("myspace","Item");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+ DataObjectPtr it1 = mdg->create((Type&)tci);
+ DataObjectList& dol1 = dor->getList("items");
+ DataObjectPtr li11 = mdg->create(tcl);
+ DataObjectPtr li12 = mdg->create(tcl);
+
+
+ const Type& tcc2 = mdg2->getType("myspace","Root");
+ const Type& tcl2 = mdg2->getType("myspace","ListItem");
+ const Type& tci2 = mdg2->getType("myspace","Item");
+ DataObjectPtr dor2 = mdg2->create((Type&)tcc2);
+ DataObjectPtr it2 = mdg2->create((Type&)tci2);
+ DataObjectList& dol2 = dor2->getList("items");
+ DataObjectPtr li21 = mdg2->create(tcl2);
+ DataObjectPtr li22 = mdg2->create(tcl2);
+
+
+ try
+ {
+ // append from wrong factory to list
+ dol1.append(li21);
+ //cout << "ERROR - 47764 should not append from wrong factory" << endl;
+ //cout << "Updated test case: Correctly used data object from compatible factory" <<
+ // endl;
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ if (!silent)cout << "ERROR: Incorrect invalid conversion exception" << e << endl;
+ return 0;
+ }
+
+ try
+ {
+ // add object from wrong factory to reference.
+ dor2->setDataObject("itemref",it1);
+ return 0;
+ }
+ catch (SDOUnsupportedOperationException e)
+ {
+ // expected ,as a reference cannot be outside the graph
+ }
+
+ try
+ {
+ // add object from wrong factory to reference.
+ dor2->setDataObject("itemcont",it1);
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Add contained object from second factory not OK" << endl;
+ return 0;
+ }
+
+
+ dol2.append(li22); // OK
+
+ try
+ {
+ dol2.insert(0,li11);
+ //cout << "Updated test case: Correctly used data object from compatible factory" <<
+ // endl;
+ //cout << "ERROR - 47764 should not insert from wrong factory" << endl;
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ if (!silent)cout << "Incorrect invalid conversion exception" << e << endl;
+ return 0;
+ }
+
+ try
+ {
+ dol2.setDataObject(0,li12);
+ //cout << "Updated test case: Correctly used data object from compatible factory" <<
+ // endl;
+ // cout << "ERROR - 47764 should not set in list from wrong factory" << endl;
+ }
+ catch (SDOInvalidConversionException e)
+ {
+ if (!silent)cout << "Incorrect invalid conversion exception" << e << endl;
+ return 0;
+ }
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Problem in b47663" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::bunique()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("test","Root");
+ mdg->addType("test","Duplicate");
+ mdg->addType("nottest","Duplicate");
+ mdg->addType("test","Unique");
+ mdg->addType("test","Object");
+
+ mdg->addPropertyToType("test","Root","duplicate",
+ "test","Duplicate", false, false, true);
+
+ mdg->addPropertyToType("test","Root","duplicate2",
+ "nottest","Duplicate", false, false, true);
+
+ mdg->addPropertyToType("test","Root","unique",
+ "test","Unique", false, false, true);
+
+ mdg->addPropertyToType("test","Root","duplicatelist",
+ "test","Duplicate", true, false, true);
+
+ mdg->addPropertyToType("test","Root","duplicatelist2",
+ "nottest","Duplicate", true, false, true);
+
+ mdg->addPropertyToType("test","Root","uniquelist",
+ "test","Unique", true, false, true);
+
+ mdg->addPropertyToType("test","Duplicate","id",
+ "commonj.sdo","Integer", false, false, false);
+
+ mdg->addPropertyToType("nottest","Duplicate","id",
+ "commonj.sdo","Integer", false, false, false);
+
+ mdg->addPropertyToType("test","Unique","id",
+ "commonj.sdo","Integer", false, false, false);
+
+ mdg->addPropertyToType("test","Duplicate","ob",
+ "test","Object", false, false, true);
+
+ mdg->addPropertyToType("nottest","Duplicate","ob",
+ "test","Object", false, false, true);
+
+ mdg->addPropertyToType("test","Unique","ob",
+ "test","Object", false, false, true);
+
+ const Type& troot = mdg->getType("test","Root");
+ const Type& tdup1 = mdg->getType("test","Duplicate");
+ const Type& tdup2 = mdg->getType("nottest","Duplicate");
+ const Type& tuniq = mdg->getType("test","Unique");
+ const Type& tob = mdg->getType("test","Object");
+
+ DataObjectPtr rooty = mdg->create(troot);
+
+ DataObjectPtr dup1 = mdg->create(tdup1);
+ dup1->setInteger("id",1);
+ DataObjectPtr dup2 = mdg->create(tdup1);
+ dup2->setInteger("id",2);
+ DataObjectPtr dup3 = mdg->create(tdup2);
+ dup3->setInteger("id",3);
+ DataObjectPtr dup4 = mdg->create(tdup2);
+ dup4->setInteger("id",4);
+ DataObjectPtr uni1 = mdg->create(tuniq);
+ uni1->setInteger("id",5);
+ DataObjectPtr uni2 = mdg->create(tuniq);
+ uni2->setInteger("id",6);
+
+ DataObjectPtr ob1 = mdg->create(tob);
+ dup1->setDataObject("ob",ob1);
+ DataObjectPtr ob2 = mdg->create(tob);
+ dup2->setDataObject("ob",ob2);
+ DataObjectPtr ob3 = mdg->create(tob);
+ uni1->setDataObject("ob",ob3);
+
+ DataObjectList& dl1 = rooty->getList("duplicatelist");
+ DataObjectList& dl2 = rooty->getList("duplicatelist2");
+ DataObjectList& dl3 = rooty->getList("uniquelist");
+
+ rooty->setDataObject("duplicate",dup1);
+ dl1.append(dup2);
+
+ rooty->setDataObject("duplicate2",dup3);
+ dl2.append(dup4);
+
+ rooty->setDataObject("unique",uni1);
+
+ dl3.append(uni2);
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ TypeList tl = mdg->getTypes();
+
+ xsh->generateFile(tl,"bunique-out.xsd","test");
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ xmh->save(rooty,"","rooty","bunique-out.xml");
+
+ if (!comparefiles("bunique-out.xsd","bunique-out.txt")) return 0;
+ if (!comparefiles("bunique-out.xml","bunique-outxml.txt")) return 0;
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Problem in bunique" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::buniqueread()
+{
+ try {
+
+ int i,j,k;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("bunique-out.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "47293 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ return 0;
+ }
+ }
+
+ TypeList tl = mdg->getTypes();
+ for ( k=0;k<tl.size();k++)
+ {
+ //cout << "Type:" << tl[k].getURI() << "#" << tl[k].getName() << endl;
+ }
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("bunique-out.xml", "rooty");
+
+ DataObjectPtr rooty = doc->getRootDataObject();
+
+ xsh->generateFile(tl,"buniqueread-out.xsd","test");
+
+ xmh->save(rooty,"","rooty","buniqueread-out.xml");
+
+ return comparefiles("buniqueread-out.xml","buniqueread-out.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Problem in buniqueread" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::testwsdl()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("wsdl.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "WSDL XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+
+ }
+ return 0;
+ }
+ xsh->defineFile("wsdl-soap.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "WSDL SOAP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+
+ }
+ return 0;
+ }
+ xsh->defineFile("wsdl-http.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "WSDL HTTP XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char* m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ for (i=0;i<tl.size();i++)
+ {
+ //cout << "TYPE:" << tl[i].getURI() << "#" << tl[i].getName() << endl;
+ }
+
+ DataObjectPtr root = mdg->create("http://schemas.xmlsoap.org/wsdl/","tDefinitions");
+
+
+ DataObjectPtr mess = mdg->create("http://schemas.xmlsoap.org/wsdl/","tMessage");
+ mess->setCString("name","testRequest");
+
+ DataObjectPtr part = mdg->create("http://schemas.xmlsoap.org/wsdl/","tPart");
+ part->setCString("name","name");
+ part->setCString("type","http://www.w3.org/2001/XMLSchema-instance#string");
+
+ DataObjectPtr part2 = mdg->create("http://schemas.xmlsoap.org/wsdl/","tPart");
+ part2->setCString("name","name");
+ part2->setCString("type","http://I want/this/added/to/the/urls#string");
+
+
+ DataObjectList& dol = root->getList("message");
+
+ dol.append(mess);
+
+ DataObjectList& dol2 = mess->getList("part");
+
+ dol2.append(part);
+ dol2.append(part2);
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ xmh->save(root,"","definitions","testwsdl.xml");
+
+ return comparefiles("testwsdl.xml","testwsdl.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "testwsdl failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+
+
+int sdotest::travel()
+{
+ try {
+
+ int i,j;
+
+ FILE *f = fopen("travel.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open travel.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("TravelBookingSchema.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "WSDL XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ fprintf(f, "*******************************TYPES**********************\n");
+
+ for (i=0;i<tl.size();i++)
+ {
+ fprintf(f,"TYPE:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ }
+ fprintf(f, "*******************************END TYPES******************\n");
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("TravelBookingUsingSchema.xml");
+
+ DataObjectPtr rooty = doc->getRootDataObject();
+
+ fprintf(f, "*******************************DATA**********************\n");
+ printDataObject(f, rooty);
+ fprintf(f,"***************************END DATA**********************\n");
+
+ fclose(f);
+ return comparefiles("travel.dat","travel.txt");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "travel failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::oddchars()
+{
+ try {
+
+ int i,j;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("OddChars.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "ODDCHARS XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("OddChars.xml");
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "OddChars reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ DataObjectPtr rooty = doc->getRootDataObject();
+
+ FILE *f = fopen ("oddchars.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open oddchars.dat" << endl;
+ return 0;
+ }
+ printDataObject(f, rooty);
+
+ fclose(f);
+ return comparefiles("oddchars.dat","oddchars.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "oddchars failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::unsetlist()
+{
+ try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("test","Root");
+ mdg->addType("test","ListItem");
+
+ mdg->addPropertyToType("test","Root","list",
+ "test","ListItem", true, false, true);
+
+ const Type& troot = mdg->getType("test","Root");
+ const Type& tlist = mdg->getType("test","ListItem");
+
+ DataObjectPtr rooty = mdg->create(troot);
+
+ DataObjectList& dl = rooty->getList("list");
+
+
+ DataObjectPtr li1 = mdg->create(tlist);
+ DataObjectPtr li2 = mdg->create(tlist);
+ DataObjectPtr li3 = mdg->create(tlist);
+
+
+ dl.append(li1);
+ dl.append(li2);
+ dl.append(li3);
+
+ rooty->unset("list[3]");
+
+ dl.append(li3);
+
+ rooty->unset("list.2");
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Problem in unsetlist" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::notns()
+{
+ try {
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+
+ mdg->addType("","Root");
+ mdg->addType("","ListItem");
+
+ mdg->addPropertyToType("","Root","list",
+ "","ListItem", true, false, true);
+
+ const Type& troot = mdg->getType("","Root");
+ const Type& tlist = mdg->getType("","ListItem");
+
+ DataObjectPtr rooty = mdg->create(troot);
+
+ DataObjectList& dl = rooty->getList("list");
+
+
+ DataObjectPtr li1 = mdg->create(tlist);
+ DataObjectPtr li2 = mdg->create(tlist);
+ DataObjectPtr li3 = mdg->create(tlist);
+
+
+ dl.append(li1);
+ dl.append(li2);
+ dl.append(li3);
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ xmh->save(rooty,"","root","notns.xml");
+
+ return comparefiles("notns.xml","notns.txt");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "notns" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+int sdotest::badelement()
+{
+ try {
+
+ int i,j;
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("BadElement.xsd");
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: BADELEMENT XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("BadElement.xml");
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ FILE *f = fopen("badelement.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open badelement.dat" << endl;
+ return 0;
+ }
+ fprintf(f,"BADELEMENT correctly found errors:\n");
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) fprintf(f,"%s\n", m);
+ }
+ fclose (f);
+ return comparefiles("badelement.dat","badelement.txt");
+ }
+ else
+ {
+ if (!silent)cout << "Expected errors, got none" << endl;
+ return 0;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "badelement" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::testastyle(FILE *f, const char* style)
+{
+
+ int i,j;
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile(style);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: TESTSTYLES XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ fprintf(f,"*****STYLE %s\n",style);
+
+ for (i=0;i<tl.size();i++)
+ {
+ fprintf(f,"Type: %s#%s\n", tl[i].getURI(),tl[i].getName());
+ if (!strcmp(tl[i].getName(),"library"))
+ {
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ fprintf(f,"Property:%s\n",pl[j].getName());
+ }
+ }
+ }
+
+ fprintf(f, "*************\n");
+
+ // now try creating elements...
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->createDocument(); // with no name, URI - uses first in schema
+
+ DataObjectPtr root = doc->getRootDataObject();
+
+ fprintf(f,"Root is:%s#%s\n",root->getType().getURI(),
+ root->getType().getName());
+
+
+ XMLDocumentPtr doc1 = xmh->createDocument("library"); // with no URI - uses first in schema
+
+ DataObjectPtr root1 = doc1->getRootDataObject();
+
+ fprintf(f,"Root is:%s#%s\n",root1->getType().getURI(),
+ root1->getType().getName());
+
+ XMLDocumentPtr doc2 = xmh->createDocument("library","libraryNS"); // with URI
+
+ DataObjectPtr root2 = doc2->getRootDataObject();
+
+ fprintf(f, "Root is:%s#%s\n",root2->getType().getURI(),
+ root2->getType().getName());
+ return 1;
+
+
+}
+
+int sdotest::teststyles()
+{
+ try
+ {
+
+ FILE *f = fopen("teststyles.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open teststyles.dat" << endl;
+ return 0;
+ }
+ testastyle(f,"Style1.xsd");
+ testastyle(f,"Style2.xsd");
+ testastyle(f,"Style3.xsd");
+ //testastyle("Style4.xsd"); = groups not supported yet.
+ fclose(f);
+ return comparefiles("teststyles.dat","teststyles.txt");
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "teststyles" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::testinc2(const char* inc, const char* name1, const char* name2)
+{
+
+
+ int i,j;
+
+ try {
+
+ FILE *f = fopen(name1,"w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open " << name1 << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile(inc);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: TestInc2 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ //cout << "***** CALCULATOR ***************************************" << endl;
+
+ for (i=0;i<tl.size();i++)
+ {
+ fprintf(f, "Type:%s#%s\n", tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ fprintf(f,"Property:%s\n",pl[j].getName());
+ }
+ }
+
+ //cout << "*******************************END TYPES******************" << endl;
+ fclose(f);
+ return comparefiles((char*)name1, (char*)name2);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in testinc2" << endl;
+ return 0;
+ }
+
+}
+
+
+
+int sdotest::b48300()
+{
+ return testany("bug48300.xsd",0,"bug48300.xml",0);
+}
+
+
+int sdotest::testOrder(const char* x1, const char* x2, const char* name1,
+ const char* name2)
+{
+
+ int i,j;
+
+ try {
+
+ FILE *f = fopen(name1,"w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open " << name1 << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile(x1);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: Order XSD1 reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ fclose(f);
+ return 0;
+ }
+
+ xsh->defineFile(x2);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: Order XSD2 reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ fclose(f);
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ //cout << "***** TESTORDER ****************************************" << endl;
+
+ for (i=0;i<tl.size();i++)
+ {
+ if (!strcmp(tl[i].getURI(),"commonj.sdo")) continue;
+ fprintf(f,"Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ fprintf(f,"Property:%s\n", pl[j].getName());
+ }
+ }
+
+ //cout << "*******************************END TYPES******************" << endl;
+
+ fclose(f);
+ return comparefiles((char*)name1, (char*)name2);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in TestOrder" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::simple()
+{
+
+
+ int i,j;
+
+ try {
+
+ FILE *f = fopen("simple.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open simple.dat" << endl;
+ return 0;
+ }
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("simple.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: Order simple.xsd reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+
+ TypeList tl = mdg->getTypes();
+
+ //cout << "***** SIMPLE ****************************************" << endl;
+
+ for (i=0;i<tl.size();i++)
+ {
+ if (!strcmp(tl[i].getURI(),"commonj.sdo")) continue;
+ fprintf(f, "Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ fprintf(f,"Property:%s\n",pl[j].getName());
+ fprintf(f, "Type of property:%s\n",pl[j].getType().getName());
+ fprintf(f, "IsMany?%d\n",pl[j].isMany());
+ }
+ }
+
+ //cout << "*******************************SIMPLE******************" << endl;
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("simple.xml");
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "Simple found errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ DataObjectPtr dob = doc->getRootDataObject();
+
+ printDataObject(f, dob);
+
+ fclose(f);
+ return comparefiles("simple.dat","simple.txt");
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in TestAny" << e << endl;
+ return 0;
+ }
+}
+
+
+
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.h
new file mode 100644
index 0000000000..aaf309e2de
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest.h
@@ -0,0 +1,192 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: sdotest.h,v 1.21 2006/03/16 12:21:04 slattery Exp $ */
+
+#include "commonj/sdo/SDO.h"
+using namespace commonj::sdo;
+
+
+// test
+
+class sdotest {
+ public:
+
+ static bool silent;
+ static bool ramping;
+
+ /* utilities */
+
+ static int printseq(FILE *f, SequencePtr sptr);
+ static void printDataStructure(FILE *f,DataFactory* dd);
+ static void printDataObject(FILE *f, DataObjectPtr dol);
+ static void printValue(FILE *f, DataObjectPtr dob, const Property& prop);
+ static void printList(FILE *f, DataObjectPtr dob, const Property& prop);
+ static void printOldValues(FILE *f, ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void dumpchangesummary(FILE *f, ChangeSummaryPtr cs);
+ static int comparefiles(char* fn1, char*fn2);
+ static int dumpproperties(FILE *f, DataObjectPtr root);
+ static int printset(FILE *f, ChangeSummaryPtr cs);
+
+ static int xsdtosdo();
+
+ static void changeSummaryHeader(ChangeSummaryPtr cs);
+ static void changeSummaryFooter();
+ static void changeSummaryChange(int level, ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void changeSummaryDeletedObject(int indent, const char* name, ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void changeSummaryElements(int indent, ChangeSummaryPtr cs, DataObjectPtr dob);
+ static void changeSummarySetting(Setting& s);
+ static bool changeSummaryAttributes(ChangeSummaryPtr cs, DataObjectPtr dol);
+ static char* convert(const char* uri);
+
+ /* work in progress - generation of structures */
+
+ static void generate(DataFactoryPtr fac);
+
+ /* tests */
+ static int xhtml1();
+ static int definetest();
+ static int stocktest();
+
+ static int scopetest();
+ static DataObjectPtr scopetest2();
+
+
+ static int pete();
+ static int testgenerate(const char* xsd, const char* output);
+ static int emptycs();
+ static int compatiblefactory();
+ static int transferto(DataObjectPtr d, DataFactoryPtr f, bool expecterror);
+ static int openseq();
+ static int testanytwo(const char* xsd,
+ const char* xsd2, const char* xml);
+ static int testany(const char* xsd,
+ const char* acceptedxsderror,
+ const char* xml,
+ const char* acceptedxmlerror);
+ static int testOrder(const char* x1, const char* x2,
+ const char* name1, const char* name2);
+ static int simple();
+ static int testinc2(const char* inc, const char* name1,
+ const char* name2);
+ static int testastyle(FILE *f, const char* style);
+ static int teststyles();
+ static int badelement();
+ static int oddchars();
+ static int notns();
+ static int unsetlist();
+ static int travel();
+ static int testwsdl();
+ static int bunique();
+ static int buniqueread();
+ static int propdefaulttest();
+ static int showdefault(FILE *f, const Type& tm);
+ static int graham6();
+ static int graham5();
+ static int graham4();
+ static int leak();
+ static int twolists();
+ static int detachtest();
+ static int includetest();
+ static int testLoad();
+ static int clonetest();
+ static int testUtil();
+ static int testErrors();
+ static int doctest();
+ static int notfound();
+ static int serializeChangeSummary(ChangeSummaryPtr cs);
+ static int cssave();
+ static int csload();
+ static int cssave2();
+ static int csload2();
+ static int bug1();
+ static int bug2();
+ static int setnull();
+ static int testsubsload();
+ static int testabstract();
+ static int testsubs();
+ static int testSCA();
+ static int testOpen();
+ static int saveOpen();
+ static int loadOpen();
+ static int testui();
+ static int merle1();
+ static int graham1();
+ static int graham2();
+ static int graham3();
+ static int loadManyOpen();
+ static int loadOpenNS();
+
+
+ static int eqhelpertest();
+ static int cohelpertest();
+ static int datetest();
+ static int matttest1();
+ static int adddeletetest();
+ static int carotest3();
+ static int carotest2();
+ static int carotest();
+ static int setmany();
+ static int noncontest();
+ static int versiontest();
+ static int defaulttest();
+ static int defaulttest_strobj();
+ static int querytest();
+ static int getproptest();
+ static int nulltest();
+ static int usertest();
+ static int rcptest();
+ static int boolbug();
+ static int scope1();
+ static int scope2();
+ static int scope3();
+ static int conversiontest();
+ static int changesummarytest();
+ static int scenario1();
+ static int scenario2();
+ static int scenario3();
+ static int scenario4();
+ static int scenario5();
+ static int seqtest();
+ static int printDataObject(DataObjectPtr dol);
+ static int printValue(DataObjectPtr dob, const Property& prop);
+ static int printList(DataObjectPtr dob, const Property& prop);
+ static int printOldValues(ChangeSummaryPtr cs, DataObjectPtr dob);
+ static int testGetters(DataObjectPtr dor);
+ static int testGetter(DataObjectPtr dor, char* str);
+ static int maintest();
+
+ static int b48602();
+ static int b48736();
+ static int b48686();
+ static int b48601();
+ static int b48300();
+ static int b47663();
+ static int b47764();
+ static int b47802();
+ static int b47293();
+ static int b47137();
+ static int b47137b();
+ static int b46633();
+ static int b46734();
+ static int b46693();
+ static int b46634();
+ static int b46613();
+ static int b46617();
+ static int b46617b();
+ static int b45933();
+};
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest2.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest2.cpp
new file mode 100644
index 0000000000..28892994cc
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sdotest2.cpp
@@ -0,0 +1,1445 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: SdoTest2.cpp,v 1.2 2006/03/16 12:53:57 slattery Exp $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+#include <fstream>
+using namespace std;
+
+
+
+#include "sdotest.h"
+
+
+
+using namespace commonj::sdo;
+
+DataObjectPtr sdotest::scopetest2()
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ mdg->addType("myspace","Root");
+
+ mdg->addType("myspace","Company");
+
+ mdg->addPropertyToType("myspace","Company","name",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Company","id",
+ "commonj.sdo","String", false, false, false);
+
+ mdg->addPropertyToType("myspace","Root","company",
+ "myspace","Company", false, false, true);
+
+ const Type& tcc = mdg->getType("myspace","Root");
+
+ DataObjectPtr dop = mdg->create((Type&)tcc);
+
+ DataObjectPtr co = dop->createDataObject("company");
+
+ return dop;
+}
+
+int sdotest::scopetest()
+{
+ DataObjectPtr dob;
+ dob = scopetest2();
+
+ // fails on close?
+ return 1;
+}
+
+int sdotest::xsdtosdo()
+{
+const char* value;
+
+value = SDOUtils::XSDToSDO("string");
+if (!silent)cout << "XSDToSDO(string)=" << value << endl;
+if (strcmp(value,"String")) return 0;
+
+value = SDOUtils::XSDToSDO("int");
+if (!silent)cout << "XSDToSDO(int)="<< value << endl;
+if (strcmp(value,"Integer")) return 0;
+
+value = SDOUtils::XSDToSDO("notinlist");
+if (!silent)cout << "XSDToSDO(notinlist)="<< value << endl;
+if (strcmp(value,"String")) return 0;
+
+value = SDOUtils::XSDToSDO("");
+if (!silent)cout << "XSDToSDO(\"\")="<< value << endl;
+if (strcmp(value,"String")) return 0;
+
+value = SDOUtils::XSDToSDO(0);
+if (!silent)cout << "XSDToSDO(0)="<< value << endl;
+if (strcmp(value,"String")) return 0;
+
+value = SDOUtils::SDOToXSD("String");
+if (!silent)cout << "SDOToXSD(String)="<< value << endl;
+if (strcmp(value,"string")) return 0;
+
+value = SDOUtils::SDOToXSD("Long");
+if (!silent)cout << "SDOToXSD(Long)="<< value << endl;
+if (strcmp(value,"unsignedLong")) return 0;
+
+value = SDOUtils::SDOToXSD("notinlist");
+if (!silent)cout << "SDOToXSD(notinlist)="<< value << endl;
+if (strcmp(value,"string")) return 0;
+
+value = SDOUtils::SDOToXSD("");
+if (!silent)cout << "SDOToXSD(\"\")="<< value << endl;
+if (strcmp(value,"string")) return 0;
+
+value = SDOUtils::SDOToXSD(0);
+if (!silent)cout << "SDOToXSD(0)="<< value << endl;
+if (strcmp(value,"string")) return 0;
+
+return 1;
+
+}
+
+int sdotest::compatiblefactory()
+{
+ DataFactoryPtr f1 = DataFactory::getDataFactory();
+
+ f1->addType("Namespace","Project");
+ f1->addType("Namespace","WorkPackage");
+ f1->addType("Namespace","LineItem");
+ f1->addType("Namespace","StringHolder");
+
+ f1->addType("Namespace","Root");
+ f1->addPropertyToType("Namespace","Root","project",
+ "Namespace","Project", false, false, true);
+
+ f1->addPropertyToType("Namespace","StringHolder","value",
+ "commonj.sdo","String", false, false, false);
+
+ f1->addPropertyToType("Namespace","Project","id",
+ "commonj.sdo","String", false, false, false);
+
+ f1->addPropertyToType("Namespace","Project","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f1->addPropertyToType("Namespace","WorkPackage","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ f1->addPropertyToType("Namespace","WorkPackage","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f1->addPropertyToType("Namespace","LineItem","itemname",
+ "commonj.sdo","String", false, false, false);
+
+ f1->addPropertyToType("Namespace","LineItem","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f1->addPropertyToType("Namespace","Project","packages",
+ "Namespace","WorkPackage", true, false, true);
+
+ f1->addPropertyToType("Namespace","WorkPackage","lineitems",
+ "Namespace","LineItem", true, false, true);
+
+
+ // project
+ // id (string)
+ // string (StringHolder)
+ // workpackages (WorkPackage)
+
+ // workpackage
+ // name (string)
+ // string (StringHolder)
+ // lineitems (LineItem)
+
+ // lineitem
+ // itemname (string)
+
+
+ // factories 1 and 2 are compatible
+
+ DataFactoryPtr f2 = DataFactory::getDataFactory();
+
+ f2->addType("Namespace","Project");
+ f2->addType("Namespace","WorkPackage");
+ f2->addType("Namespace","LineItem");
+ f2->addType("Namespace","StringHolder");
+
+ f2->addType("Namespace","Root");
+ f2->addPropertyToType("Namespace","Root","project",
+ "Namespace","Project", false, false, true);
+
+
+ f2->addPropertyToType("Namespace","StringHolder","value",
+ "commonj.sdo","String", false, false, false);
+
+ f2->addPropertyToType("Namespace","Project","id",
+ "commonj.sdo","String", false, false, false);
+
+ f2->addPropertyToType("Namespace","Project","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f2->addPropertyToType("Namespace","WorkPackage","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ f2->addPropertyToType("Namespace","WorkPackage","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f2->addPropertyToType("Namespace","LineItem","itemname",
+ "commonj.sdo","String", false, false, false);
+
+ f2->addPropertyToType("Namespace","LineItem","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f2->addPropertyToType("Namespace","Project","packages",
+ "Namespace","WorkPackage", true, false, true);
+
+ f2->addPropertyToType("Namespace","WorkPackage","lineitems",
+ "Namespace","LineItem", true, false, true);
+
+
+ // factory 3 has no project type
+
+ DataFactoryPtr f3 = DataFactory::getDataFactory();
+
+ f3->addType("Namespace","WorkPackage");
+ f3->addType("Namespace","LineItem");
+ f3->addType("Namespace","StringHolder");
+
+ f3->addType("Namespace","Root");
+ f3->addPropertyToType("Namespace","Root","project",
+ "Namespace","WorkPackage", false, false, true);
+
+
+ f3->addPropertyToType("Namespace","StringHolder","value",
+ "commonj.sdo","String", false, false, false);
+
+ f3->addPropertyToType("Namespace","WorkPackage","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ f3->addPropertyToType("Namespace","WorkPackage","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f3->addPropertyToType("Namespace","LineItem","itemname",
+ "commonj.sdo","String", false, false, false);
+
+ f3->addPropertyToType("Namespace","LineItem","string",
+ "Namespace","StringHolder", false, false, true);
+
+
+ f3->addPropertyToType("Namespace","WorkPackage","lineitems",
+ "Namespace","LineItem", true, false, true);
+
+
+ // factory 4 looks compatible - but stringholder is missing
+
+ DataFactoryPtr f4 = DataFactory::getDataFactory();
+
+ f4->addType("Namespace","Project");
+ f4->addType("Namespace","WorkPackage");
+ f4->addType("Namespace","LineItem");
+
+ f4->addType("Namespace","Root");
+ f4->addPropertyToType("Namespace","Root","project",
+ "Namespace","Project", false, false, true);
+
+
+ f4->addPropertyToType("Namespace","Project","id",
+ "commonj.sdo","String", false, false, false);
+
+
+ f4->addPropertyToType("Namespace","WorkPackage","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ f4->addPropertyToType("Namespace","LineItem","itemname",
+ "commonj.sdo","String", false, false, false);
+
+ f4->addPropertyToType("Namespace","Project","packages",
+ "Namespace","WorkPackage", true, false, true);
+
+ f4->addPropertyToType("Namespace","WorkPackage","lineitems",
+ "Namespace","LineItem", true, false, true);
+
+
+ // factory 5 looks compatible, but the lists are not lists
+
+ DataFactoryPtr f5 = DataFactory::getDataFactory();
+
+ f5->addType("Namespace","Project");
+ f5->addType("Namespace","WorkPackage");
+ f5->addType("Namespace","LineItem");
+ f5->addType("Namespace","StringHolder");
+
+ f5->addType("Namespace","Root");
+ f5->addPropertyToType("Namespace","Root","project",
+ "Namespace","Project", false, false, true);
+
+
+ f5->addPropertyToType("Namespace","StringHolder","value",
+ "commonj.sdo","String", false, false, false);
+
+ f5->addPropertyToType("Namespace","Project","id",
+ "commonj.sdo","String", false, false, false);
+
+ f5->addPropertyToType("Namespace","Project","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f5->addPropertyToType("Namespace","WorkPackage","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ f5->addPropertyToType("Namespace","WorkPackage","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f5->addPropertyToType("Namespace","LineItem","itemname",
+ "commonj.sdo","String", false, false, false);
+
+ f5->addPropertyToType("Namespace","LineItem","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f5->addPropertyToType("Namespace","Project","packages",
+ "Namespace","WorkPackage", false, false, true);
+
+ f5->addPropertyToType("Namespace","WorkPackage","lineitems",
+ "Namespace","LineItem", false, false, true);
+
+ // factory 6 looks OK, but the lineitems have no itemname field
+
+ DataFactoryPtr f6 = DataFactory::getDataFactory();
+
+ f6->addType("Namespace","Project");
+ f6->addType("Namespace","WorkPackage");
+ f6->addType("Namespace","LineItem");
+ f6->addType("Namespace","StringHolder");
+
+ f6->addType("Namespace","Root");
+ f6->addPropertyToType("Namespace","Root","project",
+ "Namespace","Project", false, false, true);
+
+
+ f6->addPropertyToType("Namespace","StringHolder","value",
+ "commonj.sdo","String", false, false, false);
+
+ f6->addPropertyToType("Namespace","Project","id",
+ "commonj.sdo","String", false, false, false);
+
+ f6->addPropertyToType("Namespace","Project","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f6->addPropertyToType("Namespace","WorkPackage","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ f6->addPropertyToType("Namespace","WorkPackage","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f6->addPropertyToType("Namespace","LineItem","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f6->addPropertyToType("Namespace","Project","packages",
+ "Namespace","WorkPackage", true, false, true);
+
+ f6->addPropertyToType("Namespace","WorkPackage","lineitems",
+ "Namespace","LineItem", true, false, true);
+
+
+ // factory 7 looks OK, but the identifiers are ints
+
+
+ DataFactoryPtr f7 = DataFactory::getDataFactory();
+
+ f7->addType("Namespace","Project");
+ f7->addType("Namespace","WorkPackage");
+ f7->addType("Namespace","LineItem");
+ f7->addType("Namespace","StringHolder");
+
+ f7->addType("Namespace","Root");
+ f7->addPropertyToType("Namespace","Root","project",
+ "Namespace","Project", false, false, true);
+
+ f7->addPropertyToType("Namespace","StringHolder","value",
+ "commonj.sdo","String", false, false, true);
+
+ f7->addPropertyToType("Namespace","Project","id",
+ "commonj.sdo","Integer", false, false, false);
+
+ f7->addPropertyToType("Namespace","Project","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f7->addPropertyToType("Namespace","WorkPackage","name",
+ "commonj.sdo","String", false, false, false);
+
+
+ f7->addPropertyToType("Namespace","WorkPackage","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f7->addPropertyToType("Namespace","LineItem","itemname",
+ "commonj.sdo","Integer", false, false, false);
+
+ f7->addPropertyToType("Namespace","LineItem","string",
+ "Namespace","StringHolder", false, false, true);
+
+ f7->addPropertyToType("Namespace","Project","packages",
+ "Namespace","WorkPackage", true, false, true);
+
+ f7->addPropertyToType("Namespace","WorkPackage","lineitems",
+ "Namespace","LineItem", true, false, true);
+
+
+ // create a tree from Root in factory 1
+
+ DataObjectPtr root = f1->create("Namespace","Root");
+ DataObjectPtr project = root->createDataObject("project");
+ project->setCString("id","The TTP Project");
+ DataObjectPtr str = project->createDataObject("string");
+ str->setCString("value","The Recursive Acronym Project");
+ DataObjectPtr wp1 = project->createDataObject("packages");
+ DataObjectPtr wp2 = project->createDataObject("packages");
+ wp1->setCString("name","Work Package 1");
+ wp2->setCString("name","Work Package 2");
+ DataObjectPtr li1 = wp1->createDataObject("lineitems");
+ DataObjectPtr li2 = wp1->createDataObject("lineitems");
+ DataObjectPtr li3 = wp2->createDataObject("lineitems");
+ DataObjectPtr li4 = wp2->createDataObject("lineitems");
+ li1->setCString("itemname","LineItem 1");
+ li2->setCString("itemname","LineItem 2");
+ li3->setCString("itemname","LineItem 3");
+ li4->setCString("itemname","LineItem 4");
+ DataObjectPtr str1 = li1->createDataObject("string");
+ DataObjectPtr str2 = li2->createDataObject("string");
+ DataObjectPtr str3 = li3->createDataObject("string");
+ DataObjectPtr str4 = li4->createDataObject("string");
+ str1->setCString("value","String1");
+ str2->setCString("value","String2");
+ str3->setCString("value","String3");
+ str4->setCString("value","String4");
+
+
+// cout << "DATA OBJECTS FROM FACTORY 1" << endl;
+// printDataObject(root);
+
+ if (!transferto(root,f2, false)) return 0;
+ if (!transferto(root,f3, true)) return 0;
+ if (!transferto(root,f4, true)) return 0;
+ if (!transferto(root,f5, true)) return 0;
+ if (!transferto(root,f6, true)) return 0;
+ if (!transferto(root,f7, true)) return 0;
+
+ // finally, lets move one which has a parent and cant be moved.
+
+ try {
+ DataObjectPtr project = root->getDataObject("project");
+
+ DataObjectPtr root2 = f2->create("Namespace","Root");
+
+ root2->setDataObject("project", project);
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ //cout << "Compatibility test correctly returned an error :" ;
+ //cout << e.getMessageText() << endl;
+ return 1;
+ }
+
+}
+
+int sdotest::transferto(DataObjectPtr root, DataFactoryPtr f2, bool expecterror)
+{
+ try {
+
+ // transfer the tree to factory 2...
+ DataObjectPtr rproject = root->getDataObject("project");
+
+ DataObjectPtr project = CopyHelper::copy(rproject);
+
+ DataObjectPtr root2 = f2->create("Namespace","Root");
+
+ root2->setDataObject("project", project);
+
+ //cout << "DATA OBJECTS TRANSFERRED" << endl;
+
+ //printDataObject(root2);
+
+ if (expecterror)
+ {
+ return 0;
+ }
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (expecterror){
+ //cout << "Compatibility test correctly returned an error :" ;
+ //cout << e.getMessageText() << endl;
+ return 1;
+ }
+ else
+ {
+ if (!silent)cout << "Compatibility test failed whilst transferring " << e << endl;
+ return 0;
+ }
+ }
+}
+
+
+int sdotest::b48602()
+{
+
+
+ int i,j;
+
+ try {
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("b48602.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: b48602 XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ return 0;
+ }
+ catch (SDOTypeNotFoundException e)
+ {
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ return 1;
+ }
+
+}
+
+int sdotest::testany(const char* xsd,
+ const char* acceptedxsderror,
+ const char* xml,
+ const char* acceptedxmlerror)
+{
+
+
+ int i,j,rc;
+
+ try {
+
+ char *c;
+
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ if (xsd)
+ {
+ char * name1 = new char[strlen(xsd)+5];
+ char * name3 = new char[strlen(xsd)+5];
+ strcpy(name1,xsd);
+ while ((c = strchr(name1,'.')) != 0)*c = '_';
+ strcpy(name3,name1);
+ strcat(name1,".dat");
+ strcat(name3,".txt");
+
+
+ FILE *f1 = fopen(name1,"w+");
+ if (f1 == 0)
+ {
+ if (!silent)cout << "Unable to open " << name1 << endl;
+ delete name1;
+ delete name3;
+ return 0;
+ }
+
+ xsh->defineFile(xsd);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (acceptedxsderror != 0)
+ {
+ for (j=0;j<i;j++)
+ {
+ if (!strcmp(acceptedxsderror,xsh->getErrorMessage(j)))
+ {
+ fclose(f1);
+ delete name1;
+ delete name3;
+ return 1;
+ }
+ }
+ }
+ if (!silent)
+ {
+ cout << "PROBLEM: Testany XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ fclose(f1);
+ delete name1;
+ delete name3;
+ return 0;
+ }
+
+
+ TypeList tl = mdg->getTypes();
+
+ fprintf(f1, "***** TYPES BEFORE RESOLVE **********************************\n");
+
+ for (i=0;i<tl.size();i++)
+ {
+ fprintf(f1,"Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ fprintf(f1,"Property:%s ",pl[j].getName());
+ if (pl[j].isMany())
+ fprintf(f1, "(many) ");
+ fprintf(f1, " of type %s\n",pl[j].getType().getName());
+ }
+ }
+
+ fprintf(f1, "*******************************END TYPES******************\n");
+
+ fclose(f1);
+
+
+ rc = comparefiles(name1,name3);
+
+ delete name1;
+ delete name3;
+
+ if (rc == 0)return rc;
+
+ }
+
+ if (xml == 0 || strlen(xml) == 0) return 1;
+
+ char * name2 = new char[strlen(xml)+5];
+ char * name4 = new char[strlen(xml)+5];
+ strcpy(name2,xml);
+ while ((c = strchr(name2,'.')) != 0)*c = '_';
+ strcpy(name4,name2);
+
+ strcat(name2,".dat");
+ strcat(name4,".txt");
+
+ FILE *f2 = fopen(name2,"w+");
+ if (f2 == 0)
+ {
+ if (!silent)cout << "Unable to open " << name2 << endl;
+ delete name2;
+ delete name4;
+ return 0;
+ }
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile(xml);
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ if (acceptedxmlerror != 0)
+ {
+ for (j=0;j<i;j++)
+ {
+ if (!strcmp(acceptedxmlerror,xmh->getErrorMessage(j)))
+ {
+ fclose(f2);
+ delete name2;
+ delete name4;
+ return 1;
+ }
+ }
+ }
+ if (!silent)
+ {
+ cout << "TestAny XML found errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ fclose(f2);
+ delete name2;
+ delete name4;
+ return 0;
+ }
+
+ else {
+ TypeList tl = mdg->getTypes();
+
+ fprintf(f2, "***** TYPES AFTER RESOLVE*********************************\n");
+
+ for (i=0;i<tl.size();i++)
+ {
+ fprintf(f2,"Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ fprintf(f2, "Property:%s ",pl[j].getName());
+ if (pl[j].isMany())
+ fprintf(f2, "(many) ");
+ fprintf(f2, " of type %s\n",pl[j].getType().getName());
+ }
+ }
+
+ fprintf(f2, "*******************************END TYPES******************\n");
+
+
+ DataObjectPtr dob = doc->getRootDataObject();
+ printDataObject(f2, dob);
+
+ fclose(f2);
+
+ rc = comparefiles(name2,name4);
+
+ delete name2;
+ delete name4;
+
+ return rc;
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in TestAny" << e << endl;
+ return 0;
+ }
+}
+
+
+
+int sdotest::testanytwo(const char* xsd, const char* xsd2,
+ const char* xml)
+{
+
+
+ int i,j;
+
+ try {
+
+ char * name1 = new char[strlen(xsd)+5];
+ char * name2 = new char[strlen(xml)+5];
+ char * name3 = new char[strlen(xsd)+5];
+ char * name4 = new char[strlen(xml)+5];
+ strcpy(name1,xsd);
+ strcpy(name2,xml);
+ char *c;
+ while ((c = strchr(name1,'.')) != 0)*c = '_';
+ while ((c = strchr(name2,'.')) != 0)*c = '_';
+ strcpy(name3,name1);
+ strcpy(name4,name2);
+
+ strcat(name1,".dat");
+ strcat(name2,".dat");
+ strcat(name3,".txt");
+ strcat(name4,".txt");
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ if (xsd)
+ {
+ xsh->defineFile(xsd);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: Testany XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+
+ }
+
+ if (xsd2)
+ {
+ xsh->defineFile(xsd2);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "PROBLEM: Testany XSD2 reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ }
+
+ if (xsd)
+ {
+
+
+ FILE *f1 = fopen(name1,"w+");
+ if (f1 == 0)
+ {
+ if (!silent)cout << "Unable to open " << name1 << endl;
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ fprintf(f1,"***** TESTANY ******************************************\n");
+
+ for (i=0;i<tl.size();i++)
+ {
+ fprintf(f1,"Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ fprintf(f1,"Property:%s ",pl[j].getName());
+ if (pl[j].isMany())
+ fprintf(f1, "(many) ");
+ fprintf(f1, " of type %s\n",pl[j].getType().getName());
+ }
+ }
+
+ fprintf(f1,"*******************************END TYPES******************\n");
+
+ fclose(f1);
+
+ if (!comparefiles(name1,name3)) return 0;
+
+ }
+
+
+ if (xml == 0 || strlen(xml) == 0) return 1;
+
+
+ FILE *f2 = fopen(name2,"w+");
+ if (f2 == 0)
+ {
+ if (!silent)cout << "Unable to open " << name2 << endl;
+ return 0;
+ }
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile(xml);
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ if (!silent)
+ {
+ cout << "TestAny XML found errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ else
+ {
+ DataObjectPtr dob = doc->getRootDataObject();
+ printDataObject(f2, dob);
+ }
+
+ fclose(f2);
+ return comparefiles(name2,name4);
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in TestAnyTwo" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::openseq()
+
+{
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ FILE *f = fopen("openseq.dat","w+");
+ if (f == 0)
+ {
+ if (!silent)cout << "Unable to open openseq.dat" << endl;
+ return 0;
+ }
+
+
+ mdg->addType("companyNS","CompanyType");
+ // employee will be an open sequenced type...
+ mdg->addType("companyNS","EmployeeType", /*seq*/true,
+ /*open*/true,
+ /*abs */ false,
+ /*data*/ false);
+
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ mdg->addPropertyToType(tcomp,"name",tstring);
+
+ mdg->addPropertyToType(tcomp,"employees",temp,true);
+
+ mdg->addPropertyToType(temp, "name",tstring);
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr emp = mdg->create(temp);
+
+ emp->setCString("name","Albert");
+
+ emp->setCString("openstring","Value Of Open String");
+
+ /* now do the same with the employee seq...*/
+
+ SequencePtr seq = emp->getSequence();
+
+ seq->addCString("opensequencedstring","Value of sequenced string");
+
+ const char* c = emp->getCString("openstring");
+
+ fprintf(f, "Open Type string value: %s\n",c);
+
+ c = emp->getCString("opensequencedstring");
+
+ fprintf(f, "Open Sequenced string value: %s\n",c);
+
+ c = seq->getCStringValue(0);
+
+ fprintf(f, "Open Sequenced string value from seq: %s\n",c);
+
+ //cout << "END TEST: OpenSeq ======================================" << endl;
+ fclose(f);
+ return comparefiles("openseq.dat","openseq.txt");
+}
+
+int sdotest::b48601()
+{
+ return testany("48601.xsd",
+ "Schema contains a union which is not yet implemented",0,0);
+}
+
+int sdotest::b48686()
+{
+ return testany("48686.xsd",0,"48686.xml",0);
+}
+
+int sdotest::b48736()
+{
+ return testany("48736.xsd",0,"48736.xml",0);
+}
+
+
+int sdotest::testgenerate(const char* xsd, const char* output)
+{
+
+ int i,j;
+
+ try {
+
+ char * name1 = new char[strlen(output) + 5];
+ char * name2 = new char[strlen(output) + 5];
+ char * c;
+ strcpy(name1,output);
+ while ((c = strchr(name1,'.')) != 0)*c='_';
+ strcpy(name2,name1);
+ strcat(name1,".dat");
+ strcat(name2,".txt");
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ if (xsd)
+ {
+ xsh->defineFile(xsd);
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+
+ if (!silent)
+ {
+ cout << "PROBLEM: generation XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+ return 0;
+ }
+ else
+ {
+ mdg->generateInterface(name1,"Test");
+ return comparefiles(name1,name2);
+ }
+ }
+ return 0;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in TestGenerate" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::emptycs()
+{
+try {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("company.xsd");
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ // create a graph, then save it
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","John Jones");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Mary Smith");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Jane Doe");
+ emp3->setCString("SN","E0003");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ // right now, there is no change summary, and logging is
+ // off - we expect an empty change summary element
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+
+ xmh->save(doc,"emptycs1.xml");
+
+ if (!comparefiles("emptycs1.xml","emptycs1.txt"))return 0;
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ cs->beginLogging();
+
+ xmh->save(doc,"emptycs2.xml");
+
+ if (!comparefiles("emptycs2.xml","emptycs2.txt"))return 0;
+
+ // now we expect and empty change summary with logging true
+
+ DataObjectPtr emp4 = mdg->create(temp);
+ emp4->setCString("name","Al Smith");
+ emp4->setCString("SN","E0004");
+ emp4->setBoolean("manager",true);
+
+ // first change - create employee 4
+ dol2.append(emp4);
+
+ cs->endLogging();
+
+ //serializeChangeSummary(cs);
+
+ xmh->save(doc,"emptycs3.xml");
+
+ if (!comparefiles("emptycs3.xml","emptycs3.txt"))return 0;
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "empty change summary save failed" << e << endl;
+ return 0;
+ }
+}
+
+
+int sdotest::definetest()
+{
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ TypeDefinitions* ts = new TypeDefinitions();
+ if (ts) delete ts;
+ ts = new TypeDefinitions();
+
+
+ TypeDefinition* td = new TypeDefinition();
+
+ td->setName("MySmallObject");
+ td->setUri("MyNameSpace");
+ td->setIsDataType(false);
+
+ TypeDefinition* td2 = new TypeDefinition();
+ td2->setName("MyOtherObject");
+ td2->setUri("MyNameSpace");
+ td2->setIsDataType(false);
+
+
+ PropertyDefinition* pd = new PropertyDefinition();
+ pd->setName("MyIntegerProperty");
+ pd->setType("commonj.sdo","Integer");
+
+ PropertyDefinition* pd2 = new PropertyDefinition();
+ pd2->setName("MyObjectProperty");
+ pd2->setType("MyNameSpace","MyOtherObject");
+ pd2->setIsMany(true);
+
+ td->addPropertyDefinition(*pd);
+
+ td->addPropertyDefinition(*pd2);
+
+ ts->addTypeDefinition(*td);
+ ts->addTypeDefinition(*td2);
+
+ // should have an object of type MySmallObject, containing
+ // a single integer called MyIntegerProperty, and a list of
+ // objects called MyObjectProperty - of type MyOtherObject
+
+ xsh->defineTypes(*ts);
+
+ delete td;
+ delete td2;
+ delete ts;
+ delete pd;
+ delete pd2;
+
+ DataObjectPtr dob = mdg->create("MyNameSpace","MySmallObject");
+ dob->setInteger("MyIntegerProperty",43);
+
+ dob->createDataObject("MyObjectProperty");
+ dob->createDataObject("MyObjectProperty");
+ DataObjectList& dl = dob->getList("MyObjectProperty");
+
+ if (dl.size() != 2)
+ {
+ if (!silent) cout << "Define test list size is wrong" << endl;
+ return 0;
+ }
+ int value = dob->getInteger("MyIntegerProperty");
+ if (value != 43)
+ {
+ if (!silent) cout << "Define test integer value is wrong" << endl;
+ return 0;
+ }
+
+ return 1;
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "define test failed" << endl << e << endl;
+ return 0;
+ }
+
+}
+
+
+int sdotest::stocktest()
+{
+ return sdotest::testany("stock.wsdl",0,"stock.xml",0);
+}
+
+
+/******************************************************
+int sdotest::stocktest()
+{
+ int i,j;
+
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("stock.wsdl");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ cout << "PROBLEM: Testany XSD reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ printf("***** TYPES BEFORE RESOLVE **********************************\n");
+
+ for (i=0;i<tl.size();i++)
+ {
+ printf("Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ printf("Property:%s ",pl[j].getName());
+ if (pl[j].isMany())
+ printf("(many) ");
+ printf(" of type %s\n",pl[j].getType().getName());
+ }
+ }
+
+ printf("*******************************END TYPES******************\n");
+
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("stock.xml");
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ cout << "TestAny XML found errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+
+ DataObjectPtr dob = doc->getRootDataObject();
+ printDataObject(stdout, dob);
+
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ if (!silent)cout << "Exception in TestAny" << e << endl;
+ return 0;
+ }
+}
+**************************************************/
+
+
+int sdotest::pete()
+{
+
+
+ int i,j;
+
+ try {
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("pete.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ return 0;
+ }
+
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("pete.xml");
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ return 0;
+ }
+
+ TypeList tl = mdg->getTypes();
+
+ //printf("***** TYPES **********************************************\n");
+
+ for (i=0;i<tl.size();i++)
+ {
+ //printf("Type:%s#%s\n",tl[i].getURI(),tl[i].getName());
+ PropertyList pl = tl[i].getProperties();
+ for (int j=0;j<pl.size();j++)
+ {
+ //printf("Property:%s ",pl[j].getName());
+ //if (pl[j].isMany())
+ //printf( "(many) ");
+ //printf( " of type %s\n",pl[j].getType().getName());
+ }
+ }
+
+ //printf( "*******************************END TYPES******************\n");
+
+
+ DataObjectPtr dob = doc->getRootDataObject();
+ float f = dob->getFloat("Stock[1]/Last");
+ //printf("Float is %2.3f \r\n",f);
+ return 1;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in Pete" << e << endl;
+ return 0;
+ }
+}
+
+int sdotest::xhtml1()
+{
+
+
+ int i,j;
+
+ try {
+
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+
+ xsh->defineFile("Atom1.0.xsd");
+
+ if ((i = xsh->getErrorCount()) > 0)
+ {
+ for (j=0;j<i;j++)
+ {
+ const char *m = xsh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ return 0;
+ }
+
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr doc = xmh->loadFile("xhtml_in.xml");
+
+ if ((i = xmh->getErrorCount()) > 0)
+ {
+ for (j=0;j<i;j++)
+ {
+ const char *m = xmh->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ return 0;
+ }
+
+
+ //DataObjectPtr dob = doc->getRootDataObject();
+
+ //ofstream myout("myfile");
+
+ //if (dob)SDOUtils::printDataObject(myout , dob);
+
+ xmh->save(doc,"xhtml_out.xml");
+
+ return comparefiles("xhtml_out.xml" ,"xhtml_out.txt");
+
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in xhtml1" << e << endl;
+ return 0;
+ }
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sequence.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sequence.txt
new file mode 100644
index 0000000000..1a616a3d16
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/sequence.txt
@@ -0,0 +1,45 @@
+======================================
+======================================
+======================================
+I am Item 1 of string
+======================================
+======================================
+I am Item 1 of string
+I am the first free text
+======================================
+======================================
+I am Item 1 of string
+I am the first free text
+I am Item 2 of string
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+department1
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+department1
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+department1
+======================================
+======================================
+I am Item 1 of string
+I am free text which has been modified
+I am Item 2 of string
+department1
+department2
+======================================
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setmany.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setmany.txt
new file mode 100644
index 0000000000..083ebf6b62
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setmany.txt
@@ -0,0 +1,24 @@
+ School :King Norberts
+ Address1:The Place
+ Address2:1 The Avenue
+ Address3:Murchester
+ Address4:England
+ Class :Primary
+ Teacher :Mr Philbert Chloroform
+ Pupil1 :Witherspoon Jnr
+ Pupil2 :Snape
+ Pupil3 :Thannet
+ Class :Secondary
+ Teacher :Mr Brian Onasis
+ Pupil1 :Grimbling
+ Pupil2 :Snagget Minor
+ Pupil3 :Van Den Bograt
+Expected path not found exception caught
+Indexed as expected
+Indexed as expected
+Indexed as expected
+Indexed as expected
+Indexed as expected
+Normal index out of range caught
+Debatable behaviour - appended
+ Address4 :PostCode
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setnull.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setnull.txt
new file mode 100644
index 0000000000..f6fe0633e1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/setnull.txt
@@ -0,0 +1,42 @@
+===== Modified Object Starts
+Xpath:#/
+The modified objects type is NullNS#NullMainType
+===== Old Property Values Begin
+Property asub of type DataObject object still exists
+
+Property bsub(UNSET) of type DataObject - object null or unset
+
+===== Old Property Values End
+=====Modified Object Ends
+===== Modified Object Starts
+Xpath:#/subs.0
+The modified objects type is NullNS#NullSubType
+===== Old Property Values Begin
+Property name of type String:All Initially set
+
+Property number of type Integer:100
+
+Property bool of type Boolean:0
+
+===== Old Property Values End
+=====Modified Object Ends
+===== Modified Object Starts
+Xpath:#/subs.1
+The modified objects type is NullNS#NullSubType
+===== Old Property Values Begin
+Property bool(UNSET) of type Boolean:0
+
+===== Old Property Values End
+=====Modified Object Ends
+===== Modified Object Starts
+Xpath:#/subs.2
+The modified objects type is NullNS#NullSubType
+===== Old Property Values Begin
+Property name(ISNULL) of type String:
+
+Property number(ISNULL) of type Integer:0
+
+Property bool(ISNULL) of type Boolean:0
+
+===== Old Property Values End
+=====Modified Object Ends
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault1.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault1.txt
new file mode 100644
index 0000000000..f49e95dd58
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault1.txt
@@ -0,0 +1,15 @@
+Boolean default is : 0
+Boolean default as a string is false
+Byte default is : 0
+Byte default as a string is 0
+Character default is : 0
+Character default as a string is 0
+Short default is : 0
+Integer default is : 0
+Integer many default is : 0
+Long default is : 0
+Float default is : 0.000
+Double default is : 0.000
+Date default is : 0
+String default is zero length
+Bytes default is zero length
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault2.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault2.txt
new file mode 100644
index 0000000000..a7bd1cba92
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/showdefault2.txt
@@ -0,0 +1,18 @@
+Boolean default is : 1
+Boolean default as a string is true
+Byte default is : 100
+Byte default as a string is 100
+Character default is : 101
+Character default as a string is 101
+Short default is : 300
+Integer default is : 400
+Integer many default is : 800
+Long default is : 500
+Float default is : 600.000
+Double default is : 700.000
+Date default is : 900
+String default length is 4
+HELP
+String default as a string is HELP
+Bytes default length is 4
+HELP
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.txt
new file mode 100644
index 0000000000..0b143e19a9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.txt
@@ -0,0 +1,8 @@
+Type:#RootType
+Property:person
+Type of property:String
+IsMany?0
+===== DataObject contents =====
+person:string:someone
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xml
new file mode 100644
index 0000000000..4a3c7acce8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<person>someone</person>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xsd
new file mode 100644
index 0000000000..771ec558fb
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/simple.xsd
@@ -0,0 +1,19 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+<xs:element name="person" type="xs:string"/>
+</xs:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.wsdl b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.wsdl
new file mode 100644
index 0000000000..daa5342656
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.wsdl
@@ -0,0 +1,387 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://ws.invesbot.com/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://ws.invesbot.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+ <wsdl:types>
+ <s:schema elementFormDefault="qualified" targetNamespace="http://ws.invesbot.com/">
+ <s:element name="GetQuotes">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="symbols" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuotesResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="GetQuotesResult">
+ <s:complexType mixed="true">
+ <s:sequence>
+ <s:any />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuote">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="symbol" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetQuoteResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="GetQuoteResult">
+ <s:complexType mixed="true">
+ <s:sequence>
+ <s:any />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetMarketIndex">
+ <s:complexType />
+ </s:element>
+ <s:element name="GetMarketIndexResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="GetMarketIndexResult">
+ <s:complexType mixed="true">
+ <s:sequence>
+ <s:any />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetECNQuotes">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="symbols" type="s:string" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetECNQuotesResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="GetECNQuotesResult">
+ <s:complexType mixed="true">
+ <s:sequence>
+ <s:any />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ </s:schema>
+ </wsdl:types>
+ <wsdl:message name="GetQuotesSoapIn">
+ <wsdl:part name="parameters" element="tns:GetQuotes" />
+ </wsdl:message>
+ <wsdl:message name="GetQuotesSoapOut">
+ <wsdl:part name="parameters" element="tns:GetQuotesResponse" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteSoapIn">
+ <wsdl:part name="parameters" element="tns:GetQuote" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteSoapOut">
+ <wsdl:part name="parameters" element="tns:GetQuoteResponse" />
+ </wsdl:message>
+ <wsdl:message name="GetMarketIndexSoapIn">
+ <wsdl:part name="parameters" element="tns:GetMarketIndex" />
+ </wsdl:message>
+ <wsdl:message name="GetMarketIndexSoapOut">
+ <wsdl:part name="parameters" element="tns:GetMarketIndexResponse" />
+ </wsdl:message>
+ <wsdl:message name="GetECNQuotesSoapIn">
+ <wsdl:part name="parameters" element="tns:GetECNQuotes" />
+ </wsdl:message>
+ <wsdl:message name="GetECNQuotesSoapOut">
+ <wsdl:part name="parameters" element="tns:GetECNQuotesResponse" />
+ </wsdl:message>
+ <wsdl:message name="GetQuotesHttpGetIn">
+ <wsdl:part name="symbols" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuotesHttpGetOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetIn">
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpGetOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:message name="GetMarketIndexHttpGetIn" />
+ <wsdl:message name="GetMarketIndexHttpGetOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:message name="GetECNQuotesHttpGetIn">
+ <wsdl:part name="symbols" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetECNQuotesHttpGetOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:message name="GetQuotesHttpPostIn">
+ <wsdl:part name="symbols" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuotesHttpPostOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostIn">
+ <wsdl:part name="symbol" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetQuoteHttpPostOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:message name="GetMarketIndexHttpPostIn" />
+ <wsdl:message name="GetMarketIndexHttpPostOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:message name="GetECNQuotesHttpPostIn">
+ <wsdl:part name="symbols" type="s:string" />
+ </wsdl:message>
+ <wsdl:message name="GetECNQuotesHttpPostOut">
+ <wsdl:part name="Body" />
+ </wsdl:message>
+ <wsdl:portType name="StockQuotesSoap">
+ <wsdl:operation name="GetQuotes">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter symbols, seperated by space, Quotes delayed in 20 minutes.</wsdl:documentation>
+ <wsdl:input message="tns:GetQuotesSoapIn" />
+ <wsdl:output message="tns:GetQuotesSoapOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetQuote">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter one symbol, quote delayed in 20 minutes.</wsdl:documentation>
+ <wsdl:input message="tns:GetQuoteSoapIn" />
+ <wsdl:output message="tns:GetQuoteSoapOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetMarketIndex">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Dow, Nasdaq, S&amp;P500 index.</wsdl:documentation>
+ <wsdl:input message="tns:GetMarketIndexSoapIn" />
+ <wsdl:output message="tns:GetMarketIndexSoapOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetECNQuotes">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter symbols, seperated by space, Real-Time ECN quote.</wsdl:documentation>
+ <wsdl:input message="tns:GetECNQuotesSoapIn" />
+ <wsdl:output message="tns:GetECNQuotesSoapOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:portType name="StockQuotesHttpGet">
+ <wsdl:operation name="GetQuotes">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter symbols, seperated by space, Quotes delayed in 20 minutes.</wsdl:documentation>
+ <wsdl:input message="tns:GetQuotesHttpGetIn" />
+ <wsdl:output message="tns:GetQuotesHttpGetOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetQuote">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter one symbol, quote delayed in 20 minutes.</wsdl:documentation>
+ <wsdl:input message="tns:GetQuoteHttpGetIn" />
+ <wsdl:output message="tns:GetQuoteHttpGetOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetMarketIndex">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Dow, Nasdaq, S&amp;P500 index.</wsdl:documentation>
+ <wsdl:input message="tns:GetMarketIndexHttpGetIn" />
+ <wsdl:output message="tns:GetMarketIndexHttpGetOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetECNQuotes">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter symbols, seperated by space, Real-Time ECN quote.</wsdl:documentation>
+ <wsdl:input message="tns:GetECNQuotesHttpGetIn" />
+ <wsdl:output message="tns:GetECNQuotesHttpGetOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:portType name="StockQuotesHttpPost">
+ <wsdl:operation name="GetQuotes">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter symbols, seperated by space, Quotes delayed in 20 minutes.</wsdl:documentation>
+ <wsdl:input message="tns:GetQuotesHttpPostIn" />
+ <wsdl:output message="tns:GetQuotesHttpPostOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetQuote">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter one symbol, quote delayed in 20 minutes.</wsdl:documentation>
+ <wsdl:input message="tns:GetQuoteHttpPostIn" />
+ <wsdl:output message="tns:GetQuoteHttpPostOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetMarketIndex">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Get Dow, Nasdaq, S&amp;P500 index.</wsdl:documentation>
+ <wsdl:input message="tns:GetMarketIndexHttpPostIn" />
+ <wsdl:output message="tns:GetMarketIndexHttpPostOut" />
+ </wsdl:operation>
+ <wsdl:operation name="GetECNQuotes">
+ <wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">Enter symbols, seperated by space, Real-Time ECN quote.</wsdl:documentation>
+ <wsdl:input message="tns:GetECNQuotesHttpPostIn" />
+ <wsdl:output message="tns:GetECNQuotesHttpPostOut" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="StockQuotesSoap" type="tns:StockQuotesSoap">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="GetQuotes">
+ <soap:operation soapAction="http://ws.invesbot.com/GetQuotes" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetQuote">
+ <soap:operation soapAction="http://ws.invesbot.com/GetQuote" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetMarketIndex">
+ <soap:operation soapAction="http://ws.invesbot.com/GetMarketIndex" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetECNQuotes">
+ <soap:operation soapAction="http://ws.invesbot.com/GetECNQuotes" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuotesSoap12" type="tns:StockQuotesSoap">
+ <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="GetQuotes">
+ <soap12:operation soapAction="http://ws.invesbot.com/GetQuotes" style="document" />
+ <wsdl:input>
+ <soap12:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap12:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetQuote">
+ <soap12:operation soapAction="http://ws.invesbot.com/GetQuote" style="document" />
+ <wsdl:input>
+ <soap12:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap12:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetMarketIndex">
+ <soap12:operation soapAction="http://ws.invesbot.com/GetMarketIndex" style="document" />
+ <wsdl:input>
+ <soap12:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap12:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetECNQuotes">
+ <soap12:operation soapAction="http://ws.invesbot.com/GetECNQuotes" style="document" />
+ <wsdl:input>
+ <soap12:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap12:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuotesHttpGet" type="tns:StockQuotesHttpGet">
+ <http:binding verb="GET" />
+ <wsdl:operation name="GetQuotes">
+ <http:operation location="/GetQuotes" />
+ <wsdl:input>
+ <http:urlEncoded />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+ <wsdl:input>
+ <http:urlEncoded />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetMarketIndex">
+ <http:operation location="/GetMarketIndex" />
+ <wsdl:input>
+ <http:urlEncoded />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetECNQuotes">
+ <http:operation location="/GetECNQuotes" />
+ <wsdl:input>
+ <http:urlEncoded />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:binding name="StockQuotesHttpPost" type="tns:StockQuotesHttpPost">
+ <http:binding verb="POST" />
+ <wsdl:operation name="GetQuotes">
+ <http:operation location="/GetQuotes" />
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded" />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetQuote">
+ <http:operation location="/GetQuote" />
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded" />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetMarketIndex">
+ <http:operation location="/GetMarketIndex" />
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded" />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="GetECNQuotes">
+ <http:operation location="/GetECNQuotes" />
+ <wsdl:input>
+ <mime:content type="application/x-www-form-urlencoded" />
+ </wsdl:input>
+ <wsdl:output>
+ <mime:content part="Body" type="text/xml" />
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="StockQuotes">
+ <wsdl:port name="StockQuotesSoap" binding="tns:StockQuotesSoap">
+ <soap:address location="http://ws.invesbot.com/stockquotes.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuotesSoap12" binding="tns:StockQuotesSoap12">
+ <soap12:address location="http://ws.invesbot.com/stockquotes.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuotesHttpGet" binding="tns:StockQuotesHttpGet">
+ <http:address location="http://ws.invesbot.com/stockquotes.asmx" />
+ </wsdl:port>
+ <wsdl:port name="StockQuotesHttpPost" binding="tns:StockQuotesHttpPost">
+ <http:address location="http://ws.invesbot.com/stockquotes.asmx" />
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.xml
new file mode 100644
index 0000000000..28061c84b8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock.xml
@@ -0,0 +1,41 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<GetQuotesResponse xmlns="http://ws.invesbot.com/">
+<GetQuotesResult>
+<StockQuotes>
+<StockQuote>
+<Symbol>IBM</Symbol>
+<Price>&lt;big&gt;&lt;b&gt;82.72&lt;/b&gt;&lt;/big&gt;</Price>
+<Time>11:41AM ET</Time>
+<Change>&lt;img width=&quot;10&quot; height=&quot;14&quot; border=&quot;0&quot; src=&quot;http://us.i1.yimg.com/us.yimg.com/i/us/fi/03rd/down_r.gif&quot; alt=&quot;Down&quot;&gt;&amp;nbsp;&lt;b style=&quot;color:#cc0000;&quot;&gt;0.17 (0.21%)&lt;/b&gt;</Change>
+<PrevClose>82.89</PrevClose>
+<Open>82.49</Open>
+<Bid>N/A</Bid>
+<Ask>N/A</Ask>
+<YearTarget>95.94</YearTarget>
+<DayRange>82.40 - 82.80</DayRange>
+<YearRange>72.50 - 89.94</YearRange>
+<Volume>1,568,200</Volume>
+<AvgVol>5,301,380</AvgVol>
+<MarketCap>128.25B</MarketCap>
+<PE>16.15</PE>
+<EPS>5.12</EPS>
+<DivYield>1.20 (1.40%)</DivYield>
+</StockQuote>
+</StockQuotes>
+</GetQuotesResult>
+</GetQuotesResponse>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_wsdl.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_wsdl.txt
new file mode 100644
index 0000000000..47a11b4d3b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_wsdl.txt
@@ -0,0 +1,47 @@
+***** TYPES BEFORE RESOLVE **********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://ws.invesbot.com/#GetECNQuotes
+Property:symbols of type String
+Type:http://ws.invesbot.com/#GetECNQuotesResponse
+Property:GetECNQuotesResult of type GetECNQuotesResult
+Type:http://ws.invesbot.com/#GetECNQuotesResult
+Type:http://ws.invesbot.com/#GetMarketIndex
+Type:http://ws.invesbot.com/#GetMarketIndexResponse
+Property:GetMarketIndexResult of type GetMarketIndexResult
+Type:http://ws.invesbot.com/#GetMarketIndexResult
+Type:http://ws.invesbot.com/#GetQuote
+Property:symbol of type String
+Type:http://ws.invesbot.com/#GetQuoteResponse
+Property:GetQuoteResult of type GetQuoteResult
+Type:http://ws.invesbot.com/#GetQuoteResult
+Type:http://ws.invesbot.com/#GetQuotes
+Property:symbols of type String
+Type:http://ws.invesbot.com/#GetQuotesResponse
+Property:GetQuotesResult of type GetQuotesResult
+Type:http://ws.invesbot.com/#GetQuotesResult
+Type:http://ws.invesbot.com/#RootType
+Property:GetQuotes of type GetQuotes
+Property:GetQuotesResponse of type GetQuotesResponse
+Property:GetQuote of type GetQuote
+Property:GetQuoteResponse of type GetQuoteResponse
+Property:GetMarketIndex of type GetMarketIndex
+Property:GetMarketIndexResponse of type GetMarketIndexResponse
+Property:GetECNQuotes of type GetECNQuotes
+Property:GetECNQuotesResponse of type GetECNQuotesResponse
+*******************************END TYPES******************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_xml.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_xml.txt
new file mode 100644
index 0000000000..6aa493dfa3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/stock_xml.txt
@@ -0,0 +1,127 @@
+***** TYPES AFTER RESOLVE*********************************
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#OpenDataObject
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://ws.invesbot.com/#GetECNQuotes
+Property:symbols of type String
+Type:http://ws.invesbot.com/#GetECNQuotesResponse
+Property:GetECNQuotesResult of type GetECNQuotesResult
+Type:http://ws.invesbot.com/#GetECNQuotesResult
+Type:http://ws.invesbot.com/#GetMarketIndex
+Type:http://ws.invesbot.com/#GetMarketIndexResponse
+Property:GetMarketIndexResult of type GetMarketIndexResult
+Type:http://ws.invesbot.com/#GetMarketIndexResult
+Type:http://ws.invesbot.com/#GetQuote
+Property:symbol of type String
+Type:http://ws.invesbot.com/#GetQuoteResponse
+Property:GetQuoteResult of type GetQuoteResult
+Type:http://ws.invesbot.com/#GetQuoteResult
+Type:http://ws.invesbot.com/#GetQuotes
+Property:symbols of type String
+Type:http://ws.invesbot.com/#GetQuotesResponse
+Property:GetQuotesResult of type GetQuotesResult
+Type:http://ws.invesbot.com/#GetQuotesResult
+Type:http://ws.invesbot.com/#RootType
+Property:GetQuotes of type GetQuotes
+Property:GetQuotesResponse of type GetQuotesResponse
+Property:GetQuote of type GetQuote
+Property:GetQuoteResponse of type GetQuoteResponse
+Property:GetMarketIndex of type GetMarketIndex
+Property:GetMarketIndexResponse of type GetMarketIndexResponse
+Property:GetECNQuotes of type GetECNQuotes
+Property:GetECNQuotesResponse of type GetECNQuotesResponse
+*******************************END TYPES******************
+===== DataObject contents =====
+GetQuotesResult:dataObject
+===== Sequenced DataObject contents =====
+Setting of DO property StockQuotes[0]=
+===== Sequenced DataObject contents =====
+Setting of DO property StockQuote[0]=
+===== Sequenced DataObject contents =====
+Setting of DO property Symbol[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:IBM
+===== End Sequenced DataObject contents =
+Setting of DO property Price[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:<big><b>82.72</b></big>
+===== End Sequenced DataObject contents =
+Setting of DO property Time[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:11:41AM ET
+===== End Sequenced DataObject contents =
+Setting of DO property Change[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:<img width="10" height="14" border="0" src="http://us.i1.yimg.com/us.yimg.com/i/us/fi/03rd/down_r.gif" alt="Down">&nbsp;<b style="color:#cc0000;">0.17 (0.21%)</b>
+===== End Sequenced DataObject contents =
+Setting of DO property PrevClose[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:82.89
+===== End Sequenced DataObject contents =
+Setting of DO property Open[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:82.49
+===== End Sequenced DataObject contents =
+Setting of DO property Bid[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:N/A
+===== End Sequenced DataObject contents =
+Setting of DO property Ask[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:N/A
+===== End Sequenced DataObject contents =
+Setting of DO property YearTarget[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:95.94
+===== End Sequenced DataObject contents =
+Setting of DO property DayRange[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:82.40 - 82.80
+===== End Sequenced DataObject contents =
+Setting of DO property YearRange[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:72.50 - 89.94
+===== End Sequenced DataObject contents =
+Setting of DO property Volume[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:1,568,200
+===== End Sequenced DataObject contents =
+Setting of DO property AvgVol[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:5,301,380
+===== End Sequenced DataObject contents =
+Setting of DO property MarketCap[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:128.25B
+===== End Sequenced DataObject contents =
+Setting of DO property PE[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:16.15
+===== End Sequenced DataObject contents =
+Setting of DO property EPS[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:5.12
+===== End Sequenced DataObject contents =
+Setting of DO property DivYield[0]=
+===== Sequenced DataObject contents =====
+TEXT ELEMENT:1.20 (1.40%)
+===== End Sequenced DataObject contents =
+===== End Sequenced DataObject contents =
+===== End Sequenced DataObject contents =
+===== End Sequenced DataObject contents =
+
+===== End DataObject =====
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/include3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/include3.xsd
new file mode 100644
index 0000000000..b6ec93f0ba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/include3.xsd
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother.xsd
new file mode 100644
index 0000000000..fd0b9a61f4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother.xsd
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:include schemaLocation = "includeother1.xsd"/>
+ <xsd:include schemaLocation = "./includeother2.xsd"/>
+ <xsd:include schemaLocation = "../Debug/includeother3.xsd"/>
+
+
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother1.xsd
new file mode 100644
index 0000000000..9cbc5d9d27
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother1.xsd
@@ -0,0 +1,34 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother2.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother2.xsd
new file mode 100644
index 0000000000..329fd17761
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/t2/includeother2.xsd
@@ -0,0 +1,33 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/include3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/include3.xsd
new file mode 100644
index 0000000000..b6ec93f0ba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/include3.xsd
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother.xsd
new file mode 100644
index 0000000000..5ecbdab1ca
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother.xsd
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:include schemaLocation = "includeother1.xsd"/>
+ <xsd:include schemaLocation = "./includeother2.xsd"/>
+ <xsd:include schemaLocation = "../test2/includeother3.xsd"/>
+
+
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother1.xsd
new file mode 100644
index 0000000000..9cbc5d9d27
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother1.xsd
@@ -0,0 +1,34 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother2.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother2.xsd
new file mode 100644
index 0000000000..329fd17761
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test/includeother2.xsd
@@ -0,0 +1,33 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test2/includeother3.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test2/includeother3.xsd
new file mode 100644
index 0000000000..b6ec93f0ba
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/test2/includeother3.xsd
@@ -0,0 +1,30 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testabstract.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testabstract.txt
new file mode 100644
index 0000000000..80c1d03afe
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testabstract.txt
@@ -0,0 +1,5 @@
+Normal unsupportedoperation for creation of abstract type
+Publication is of type BookType
+Publication is of type MagazineType
+Book is of type BookType
+Magazine is of type MagazineType
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testerrors.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testerrors.txt
new file mode 100644
index 0000000000..6cfce57b31
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testerrors.txt
@@ -0,0 +1,7 @@
+XSD reported some errors:
+Opening and ending tag mismatch: complexType line 40 and schema
+
+Premature end of data in tag schema line 18
+
+XML reported some errors:
+Parser found unknown element company
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testinc2.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testinc2.txt
new file mode 100644
index 0000000000..837559562e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testinc2.txt
@@ -0,0 +1,21 @@
+Type:commonj.sdo#BigDecimal
+Type:commonj.sdo#BigInteger
+Type:commonj.sdo#Boolean
+Type:commonj.sdo#Byte
+Type:commonj.sdo#Bytes
+Type:commonj.sdo#ChangeSummary
+Type:commonj.sdo#Character
+Type:commonj.sdo#DataObject
+Type:commonj.sdo#Date
+Type:commonj.sdo#Double
+Type:commonj.sdo#Float
+Type:commonj.sdo#Integer
+Type:commonj.sdo#Long
+Type:commonj.sdo#Short
+Type:commonj.sdo#String
+Type:commonj.sdo#URI
+Type:http://example.org/Calculator#RootType
+Type:http://example.org/CalculatorTypes#AddArguments
+Property:a
+Property:b
+Type:http://example.org/CalculatorTypes#RootType
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen.txt
new file mode 100644
index 0000000000..7d7b816e6d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen.txt
@@ -0,0 +1,24 @@
+Normal exception for setting null on undefined prop
+Open Type string value: Value Of Open String
+Open Type boolean value: 1
+EMP1 type property: name ( many? 0) of type String
+EMP1 type property: SN ( many? 0) of type String
+EMP1 type property: manager ( many? 0) of type Boolean
+EMP1 inst property: name (many? 0) of type String
+EMP1 inst property: SN (many? 0) of type String
+EMP1 inst property: manager (many? 0) of type Boolean
+EMP1 inst property: openstring (many? 0) of type Bytes
+EMP1 inst property: openboolean (many? 0) of type Boolean
+EMP1 inst property: opentypelist (many? 1) of type Short
+EMP1 inst property: name (many? 0) of type String
+EMP1 inst property: SN (many? 0) of type String
+EMP1 inst property: manager (many? 0) of type Boolean
+EMP1 inst property: openboolean (many? 0) of type Boolean
+EMP1 inst property: opentypelist (many? 1) of type Short
+EMP1 inst property: name (many? 0) of type String
+EMP1 inst property: SN (many? 0) of type String
+EMP1 inst property: manager (many? 0) of type Boolean
+EMP1 inst property: opentypelist (many? 1) of type Short
+EMP1 inst property: name (many? 0) of type String
+EMP1 inst property: SN (many? 0) of type String
+EMP1 inst property: manager (many? 0) of type Boolean
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen3.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen3.xml
new file mode 100644
index 0000000000..57dfb96ec4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testopen3.xml
@@ -0,0 +1,17 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" xmlns:sdoxml="commonj.sdo/xml" xmlns:tns="companyNS" targetNamespace="companyNS"><xsd:element name="companyType" type="tns:CompanyType"/><xsd:complexType name="CompanyType" sdo:aliasName="TheFirm TheBigFirm"><xsd:sequence><xsd:element name="departments" type="tns:DepartmentType" minOccurs="0" maxOccurs="unbounded" sdo:aliasName="TheDepartments MYDepartments"/></xsd:sequence><xsd:element name="changeSummary" type="sdo:ChangeSummaryType"/><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="employeeOfTheMonth" sdoxml:propertyType="tns:EmployeeType" type="xsd:anyURI"/></xsd:complexType><xsd:element name="departmentType" type="tns:DepartmentType"/><xsd:complexType name="DepartmentType"><xsd:sequence><xsd:element name="employees" type="tns:EmployeeType" minOccurs="0" maxOccurs="unbounded"/></xsd:sequence><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="location" type="xsd:String"/><xsd:attribute name="number" type="xsd:String"/></xsd:complexType><xsd:element name="employeeType" type="tns:EmployeeType"/><xsd:complexType name="EmployeeType"><xsd:attribute name="name" type="xsd:String"/><xsd:attribute name="SN" type="xsd:String"/><xsd:attribute name="manager" type="xsd:boolean"/><xsd:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/><xsd:anyAttribute namespace="##any" processContents="lax"/></xsd:complexType><xsd:element name="openType" type="tns:OpenType"/><xsd:complexType name="OpenType"><xsd:attribute name="name" type="xsd:String"/></xsd:complexType><xsd:attribute name="openboolean" type="xsd:boolean"/><xsd:element name="opendataobject" type="tns:OpenType" minOccurs="0"/><xsd:element name="opendataobjectlist" type="tns:OpenType" minOccurs="0" maxOccurs="unbounded"/><xsd:element name="openintlist" type="xsd:short" minOccurs="0" maxOccurs="unbounded"/><xsd:attribute name="openstring" type="xsd:hexBinary"/></xsd:schema> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testorder.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testorder.txt
new file mode 100644
index 0000000000..4f46cbfecf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testorder.txt
@@ -0,0 +1,19 @@
+Type:#Address
+Property:name
+Property:street
+Property:city
+Type:#RootType
+Property:employee
+Type:#UKAddress
+Property:value
+Property:postcode
+Type:#USAddress
+Property:value
+Property:zip
+Type:#fullpersoninfo
+Property:address
+Property:city
+Property:country
+Type:#personinfo
+Property:firstname
+Property:lastname
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/teststyles.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/teststyles.txt
new file mode 100644
index 0000000000..52de3ffc6a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/teststyles.txt
@@ -0,0 +1,93 @@
+*****STYLE Style1.xsd
+Type: commonj.sdo#BigDecimal
+Type: commonj.sdo#BigInteger
+Type: commonj.sdo#Boolean
+Type: commonj.sdo#Byte
+Type: commonj.sdo#Bytes
+Type: commonj.sdo#ChangeSummary
+Type: commonj.sdo#Character
+Type: commonj.sdo#DataObject
+Type: commonj.sdo#Date
+Type: commonj.sdo#Double
+Type: commonj.sdo#Float
+Type: commonj.sdo#Integer
+Type: commonj.sdo#Long
+Type: commonj.sdo#OpenDataObject
+Type: commonj.sdo#Short
+Type: commonj.sdo#String
+Type: commonj.sdo#URI
+Type: libraryNS#RootType
+Type: libraryNS#author
+Type: libraryNS#available
+Type: libraryNS#book
+Type: libraryNS#character
+Type: libraryNS#isbn
+Type: libraryNS#library
+Property:book
+Type: libraryNS#title
+*************
+Root is:libraryNS#character
+Root is:libraryNS#library
+Root is:libraryNS#library
+*****STYLE Style2.xsd
+Type: commonj.sdo#BigDecimal
+Type: commonj.sdo#BigInteger
+Type: commonj.sdo#Boolean
+Type: commonj.sdo#Byte
+Type: commonj.sdo#Bytes
+Type: commonj.sdo#ChangeSummary
+Type: commonj.sdo#Character
+Type: commonj.sdo#DataObject
+Type: commonj.sdo#Date
+Type: commonj.sdo#Double
+Type: commonj.sdo#Float
+Type: commonj.sdo#Integer
+Type: commonj.sdo#Long
+Type: commonj.sdo#OpenDataObject
+Type: commonj.sdo#Short
+Type: commonj.sdo#String
+Type: commonj.sdo#URI
+Type: libraryNS#RootType
+Type: libraryNS#author
+Type: libraryNS#available
+Type: libraryNS#book
+Type: libraryNS#character
+Type: libraryNS#isbn
+Type: libraryNS#library
+Property:book
+Type: libraryNS#title
+*************
+Root is:libraryNS#character
+Root is:libraryNS#library
+Root is:libraryNS#library
+*****STYLE Style3.xsd
+Type: commonj.sdo#BigDecimal
+Type: commonj.sdo#BigInteger
+Type: commonj.sdo#Boolean
+Type: commonj.sdo#Byte
+Type: commonj.sdo#Bytes
+Type: commonj.sdo#ChangeSummary
+Type: commonj.sdo#Character
+Type: commonj.sdo#DataObject
+Type: commonj.sdo#Date
+Type: commonj.sdo#Double
+Type: commonj.sdo#Float
+Type: commonj.sdo#Integer
+Type: commonj.sdo#Long
+Type: commonj.sdo#OpenDataObject
+Type: commonj.sdo#Short
+Type: commonj.sdo#String
+Type: commonj.sdo#URI
+Type: libraryNS#RootType
+Type: libraryNS#author
+Type: libraryNS#available
+Type: libraryNS#bookType
+Type: libraryNS#character
+Type: libraryNS#isbn
+Type: libraryNS#library
+Property:book
+Type: libraryNS#title
+*************
+Root is:libraryNS#character
+Root is:libraryNS#library
+Root is:libraryNS#library
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testsubsload.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testsubsload.txt
new file mode 100644
index 0000000000..43c16114c3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testsubsload.txt
@@ -0,0 +1,7 @@
+TEST: TestSubsLoad ==========================================
+Publication is of type PublicationType
+Publication is of type BookType
+Publication is of type MagazineType
+Book is of type BookType
+Magazine is of type MagazineType
+END TEST: TestSubsLoad ======================================
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testutils.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testutils.txt
new file mode 100644
index 0000000000..dd86813b90
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testutils.txt
@@ -0,0 +1,100 @@
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+DataObject type: companyNS#CompanyType
+ Property: name
+ Property Type: commonj.sdo#String
+ Property Value: ACME
+ Property: employeeOfTheMonth
+ Property Type: companyNS#EmployeeType
+ Property Value: not set
+ Property: departments
+ Property Type: companyNS#DepartmentType
+ Value 0
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+ DataObject type: companyNS#DepartmentType
+ Property: name
+ Property Type: commonj.sdo#String
+ Property Value: Advanced Technologies
+ Property: location
+ Property Type: commonj.sdo#String
+ Property Value: NY
+ Property: number
+ Property Type: commonj.sdo#String
+ Property Value: 123
+ Property: employees
+ Property Type: companyNS#EmployeeType
+ Value 0
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+ DataObject type: companyNS#EmployeeType
+ Property: name
+ Property Type: commonj.sdo#String
+ Property Value: Albert
+ Property: SN
+ Property Type: commonj.sdo#String
+ Property Value: E0001
+ Property: manager
+ Property Type: commonj.sdo#Boolean
+ Property Value: not set
+ Property: openstring
+ Property Type: commonj.sdo#Bytes
+ Property Value: Value Of Open String
+ Property: openboolean
+ Property Type: commonj.sdo#Boolean
+ Property Value: true
+ Property: openintlist
+ Property Type: commonj.sdo#Short
+ Value 0
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+ DataObject type: commonj.sdo#Short
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
+
+ Property: opendataobjectlist
+ Property Type: companyNS#OpenType
+ Value 0
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+ DataObject type: companyNS#OpenType
+ Property: name
+ Property Type: commonj.sdo#String
+ Property Value: MyOpenName
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
+
+ Property: opendataobject
+ Property Type: companyNS#OpenType
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+ DataObject type: companyNS#OpenType
+ Property: name
+ Property Type: commonj.sdo#String
+ Property Value: MyOpenName
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
+
+ Value 1
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+ DataObject type: companyNS#EmployeeType
+ Property: name
+ Property Type: commonj.sdo#String
+ Property Value: Boris
+ Property: SN
+ Property Type: commonj.sdo#String
+ Property Value: E0002
+ Property: manager
+ Property Type: commonj.sdo#Boolean
+ Property Value: true
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
+
+ Value 2
+>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start of DO
+ DataObject type: companyNS#EmployeeType
+ Property: name
+ Property Type: commonj.sdo#String
+ Property Value: Carl
+ Property: SN
+ Property Type: commonj.sdo#String
+ Property Value: E0003
+ Property: manager
+ Property Type: commonj.sdo#Boolean
+ Property Value: not set
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
+
+<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end of do
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.txt
new file mode 100644
index 0000000000..025b797d96
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.txt
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xsi:type="tDefinitions" xmlns:tns2="http://I want/this/added/to/the/urls" xmlns:tns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><message name="testRequest"><part name="name" type="xsi:string"/><part name="name" type="tns2:string"/></message></definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.xml
new file mode 100644
index 0000000000..5fe93371ca
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/testwsdl.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xsi:type="tDefinitions" xmlns:tns2="http://I want/this/added/to/the/urls" xmlns:tns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><message name="testRequest"><part name="name" type="xsi:string"/><part name="name" type="tns2:string"/></message></definitions>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/travel.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/travel.txt
new file mode 100644
index 0000000000..5311a919f8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/travel.txt
@@ -0,0 +1,146 @@
+*******************************TYPES**********************
+TYPE:#Client
+TYPE:#Excursion
+TYPE:#Flight
+TYPE:#Holiday
+TYPE:#Hotel
+TYPE:#Party
+TYPE:#Person
+TYPE:#Room
+TYPE:#RootType
+TYPE:commonj.sdo#BigDecimal
+TYPE:commonj.sdo#BigInteger
+TYPE:commonj.sdo#Boolean
+TYPE:commonj.sdo#Byte
+TYPE:commonj.sdo#Bytes
+TYPE:commonj.sdo#ChangeSummary
+TYPE:commonj.sdo#Character
+TYPE:commonj.sdo#DataObject
+TYPE:commonj.sdo#Date
+TYPE:commonj.sdo#Double
+TYPE:commonj.sdo#Float
+TYPE:commonj.sdo#Integer
+TYPE:commonj.sdo#Long
+TYPE:commonj.sdo#OpenDataObject
+TYPE:commonj.sdo#Short
+TYPE:commonj.sdo#String
+TYPE:commonj.sdo#URI
+*******************************END TYPES******************
+*******************************DATA**********************
+===== DataObject contents =====
+Flight: list dataObject[0]=
+===== DataObject contents =====
+Departure:string:LHR
+
+Arrival:string:SNG
+
+flightNo:string:BA243
+
+===== End DataObject =====
+
+dataObject[1]=
+===== DataObject contents =====
+Departure:string:SNG
+
+Arrival:string:LHR
+
+flightNo:string:SG561
+
+===== End DataObject =====
+
+Hotel: list dataObject[0]=
+===== DataObject contents =====
+Name:string:Excelsior
+
+Phone:string:222-3333
+
+Room:dataObject
+===== DataObject contents =====
+value:string:303
+
+booked:boolean:1
+
+===== End DataObject =====
+
+cardsAccepted:boolean:1
+
+===== End DataObject =====
+
+dataObject[1]=
+===== DataObject contents =====
+Name:string:Seedy Lodge
+
+Phone:string:888-9999
+
+Room:dataObject
+===== DataObject contents =====
+value:string:14
+
+booked:boolean:1
+
+===== End DataObject =====
+
+cardsAccepted:boolean:0
+
+===== End DataObject =====
+
+dataObject[2]=
+===== DataObject contents =====
+Name:string:Hilton
+
+Phone:string:444-5555
+
+Room:dataObject
+===== DataObject contents =====
+value:string:456
+
+booked:boolean:0
+
+===== End DataObject =====
+
+cardsAccepted:boolean:1
+
+===== End DataObject =====
+
+Excursion:dataObject
+===== DataObject contents =====
+Title:string:Bird Baths of Singapore
+
+Cost:string:50
+
+===== End DataObject =====
+
+Client:dataObject
+===== DataObject contents =====
+Name:string:Steve
+
+Address:string:134 Shirley Road
+
+CreditCard:string:1234-8908-6543-900
+
+===== End DataObject =====
+
+Party:dataObject
+===== DataObject contents =====
+Person: list dataObject[0]=
+===== DataObject contents =====
+Name:string:John
+
+===== End DataObject =====
+
+dataObject[1]=
+===== DataObject contents =====
+Name:string:Jane
+
+===== End DataObject =====
+
+dataObject[2]=
+===== DataObject contents =====
+Name:string:Bill
+
+===== End DataObject =====
+
+===== End DataObject =====
+
+===== End DataObject =====
+***************************END DATA**********************
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/userdata.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/userdata.txt
new file mode 100644
index 0000000000..e24caba194
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/userdata.txt
@@ -0,0 +1,10 @@
+Expected 0xF1F1F1F1 F1F1F1F1
+Expected 0xF1F1F1F1 F1F1F1F1
+Expected 0x20 00000020
+Expected 0x40020 00040020
+Expected 0 00000000
+Expected 0 00000000
+Expected 120 00000120
+Expected 0 00000000
+Expected 640 00000640
+Expected 0x740 00000740
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/utils.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/utils.cpp
new file mode 100644
index 0000000000..4b13998c6b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/utils.cpp
@@ -0,0 +1,551 @@
+/*
+ *
+ * Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id: utils.cpp,v 1.1 2006/03/16 10:54:16 slattery Exp $ */
+
+#include <stdio.h>
+
+#pragma warning(disable:4786)
+
+#include <iostream>
+using namespace std;
+
+#include "sdotest.h"
+
+bool sdotest::silent = true;
+bool sdotest::ramping = false;
+
+void sdotest::printOldValues(FILE *f, ChangeSummaryPtr cs, DataObjectPtr dol)
+{
+ fprintf(f,"===== Old Property Values Begin\n");
+ SettingList& sl = cs->getOldValues(dol);
+ if (sl.size() == 0)
+ {
+ fprintf(f,"No Settings found\n");
+ }
+ else
+ {
+ for (int j=0;j< sl.size(); j++)
+ {
+ fprintf(f,"Property %s",sl[j].getProperty().getName());
+ // this could be a many-valued property, and could be one which is
+ // a data object or a data type...
+ if (sl[j].getProperty().isMany())
+ {
+ fprintf(f,"[%d]",sl[j].getIndex());
+ }
+ if (!sl[j].isSet())
+ {
+ fprintf(f,"(UNSET)");
+ }
+ if (sl[j].isNull())
+ {
+ fprintf(f,"(ISNULL)");
+ }
+
+ fprintf(f," of type ");
+ switch (sl[j].getProperty().getTypeEnum())
+ {
+ case Type::BooleanType:
+ fprintf(f,"Boolean:%d\n",sl[j].getBooleanValue());
+ break;
+ case Type::ByteType:
+ fprintf(f,"Byte:%d\n",sl[j].getByteValue());
+ break;
+ case Type::CharacterType:
+ fprintf(f,"Character:%d\n",sl[j].getCharacterValue());
+ break;
+ case Type::IntegerType:
+ fprintf(f,"Integer:%d\n",sl[j].getIntegerValue());
+ break;
+ case Type::ShortType:
+ fprintf(f,"Short:%d\n",sl[j].getShortValue());
+ break;
+ case Type::DoubleType:
+ fprintf(f,"Double:%.3f\n",(float)sl[j].getDoubleValue());
+ break;
+ case Type::FloatType:
+ fprintf(f,"Float:%.3f\n",sl[j].getFloatValue());
+ break;
+ case Type::LongType:
+ fprintf(f,"Long:%ld\n",sl[j].getIntegerValue());
+ break;
+ case Type::DateType:
+ fprintf(f,"Date:%d\n",sl[j].getDateValue().getTime());
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ fprintf(f,"String:%s\n",sl[j].getCStringValue());
+ break;
+ case Type::BytesType:
+ fprintf(f,"Bytes:%s\n",sl[j].getCStringValue());
+ break;
+ case Type::OtherTypes:
+ case Type::DataObjectType:
+ case Type::ChangeSummaryType:
+ {
+ fprintf(f,"DataObject ");
+ DataObjectPtr dob = sl[j].getDataObjectValue();
+ if (!dob)
+ {
+ fprintf(f," - object null or unset\n");
+ }
+ else
+ {
+ DataObjectPtr mydo = sl[j].getDataObjectValue();
+ if (cs->isDeleted(mydo))
+ {
+ fprintf(f," - object deleted \n");
+ printOldValues(f, cs,mydo);
+ }
+ else
+ {
+ fprintf(f," object still exists \n");
+ }
+ }
+ }
+ break;
+ default:
+ {
+ fprintf(f,"Unknown object type\n");
+ }
+ break;
+ }
+ fprintf(f,"\n");
+ }
+ }
+ fprintf(f,"===== Old Property Values End \n");
+ return;
+}
+
+
+void sdotest::printDataStructure(FILE *f , DataFactory* dd)
+{
+ TypeList tt = dd->getTypes();
+ fprintf(f,"Printing Types\n");
+ for (int i = 0; i < tt.size(); ++i)
+ {
+ fprintf(f,"Type %s\n",tt[i].getName());
+ PropertyList pl = tt[i].getProperties();
+ for (int j = 0; j < pl.size() ; j++)
+ {
+ fprintf(f,"Has Property %s of type %s\n",
+ pl[j].getName(),pl[j].getType().getName());
+ }
+ }
+}
+
+
+void sdotest::printValue(FILE *f, DataObjectPtr dp, const Property& p)
+{
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ fprintf(f,"boolean:%d\n",dp->getBoolean(p));
+ break;
+ case Type::ByteType:
+ fprintf(f,"Byte:%d\n",dp->getByte(p));
+ break;
+ case Type::CharacterType:
+ fprintf(f,"character:%d\n",dp->getCharacter(p));
+ break;
+ case Type::IntegerType:
+ fprintf(f,"integer:%d\n",dp->getInteger(p));
+ break;
+ case Type::ShortType:
+ fprintf(f,"short:%d\n",dp->getShort(p));
+ break;
+ case Type::DoubleType:
+ fprintf(f,"double:%.3f\n",(float)dp->getDouble(p));
+ break;
+ case Type::FloatType:
+ fprintf(f,"float:%.3f\n", dp->getFloat(p));
+ break;
+ case Type::LongType:
+ fprintf(f,"long:%ld\n",dp->getInteger(p));
+ break;
+ case Type::DateType:
+ fprintf(f,"date:%d\n",dp->getDate(p).getTime());
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ fprintf(f,"string:%s\n", dp->getCString(p));
+ break;
+ case Type::BytesType:
+ fprintf(f,"bytes:%s\n",dp->getCString(p));
+ break;
+ case Type::OpenDataObjectType:
+ case Type::DataObjectType:
+ {
+ fprintf(f,"dataObject\n" );
+ DataObjectPtr dob = dp->getDataObject(p);
+ if (!dob)
+ {
+ fprintf(f," - null or unset\n");
+ }
+ else
+ {
+ printDataObject(f, dob);
+ }
+ }
+ break;
+ case Type::OtherTypes:
+ case Type::ChangeSummaryType:
+ default:
+ {
+ fprintf(f,"Unknown object type");
+ }
+ break;
+ }
+ fprintf(f,"\n");
+}
+
+void sdotest::printList(FILE *f, DataObjectPtr dp, const Property& p)
+{
+ DataObjectList& dobl = dp->getList(p);
+ fprintf(f," list ");
+
+ if (dobl.size() ==0) {
+ fprintf(f,"(empty)\n");
+ return;
+ }
+
+ for (int i=0;i<dobl.size();i++) {
+
+ switch (p.getTypeEnum())
+ {
+ case Type::BooleanType:
+ fprintf(f,"boolean[%d]=%d\n",i,dobl.getBoolean(i));
+ break;
+ case Type::ByteType:
+ fprintf(f,"byte[%d]=%d\n",i,dobl.getByte(i));
+ break;
+ case Type::CharacterType:
+ fprintf(f,"character[%d]=%d\n",i,dobl.getCharacter(i));
+ break;
+ case Type::IntegerType:
+ fprintf(f,"integer[%d]=%d\n",i,dobl.getInteger(i));
+ break;
+ case Type::ShortType:
+ fprintf(f,"short[%d]=%d",i, dobl.getShort(i));
+ break;
+ case Type::DoubleType:
+ fprintf(f,"double[%d]=%.3f\n",i,(float)dobl.getDouble(i));
+ break;
+ case Type::FloatType:
+ fprintf(f,"float[%d]=%.3f\n",i,dobl.getFloat(i));
+ break;
+ case Type::LongType:
+ fprintf(f,"long[%d]=%ld\n",i,dobl.getInteger(i));
+ break;
+ case Type::DateType:
+ fprintf(f,"date[%d]=%d\n",i,dobl.getDate(i).getTime());
+ break;
+ case Type::BigDecimalType:
+ case Type::BigIntegerType:
+ case Type::StringType:
+ case Type::UriType:
+ fprintf(f,"string[%d]=%s\n",i,dobl.getCString(i));
+ break;
+ case Type::BytesType:
+ fprintf(f,"bytes[%d]=%s\n",i,dobl.getCString(i));
+ break;
+ case Type::OpenDataObjectType:
+ case Type::DataObjectType:
+ {
+ fprintf(f,"dataObject[%d]=\n",i);
+ DataObjectPtr dob = dobl[i];
+ if (!dob)
+ {
+ fprintf(f," null or unset\n");
+ }
+ else
+ {
+ printDataObject(f, dob);
+ }
+ }
+ break;
+ case Type::OtherTypes:
+ case Type::ChangeSummaryType:
+ default:
+ {
+ fprintf(f,"Unknown object type\n");;
+ }
+ break;
+ }
+ fprintf(f,"\n");
+ }
+}
+
+void sdotest::printDataObject(FILE *f, DataObjectPtr dol)
+{
+ if (dol == 0) return;
+
+ if (dol->getType().isSequencedType())
+ {
+ fprintf(f,"===== Sequenced DataObject contents =====\n");
+ SequencePtr sq = dol->getSequence();
+ if (sq != 0)
+ {
+ for (unsigned int k=0;k<sq->size();k++)
+ {
+ if (sq->isText(k))
+ {
+ fprintf(f,"TEXT ELEMENT:%s\n",sq->getCStringValue(k));
+ }
+ else
+ {
+ const Property& p = sq->getProperty(k);
+ if (p.isMany())
+ {
+ unsigned int index = sq->getListIndex(k);
+ DataObjectList& dl = dol->getList(p);
+ if (p.getType().isDataType())
+ {
+ fprintf(f,"Setting of property %s[%d]=%s\n",
+ p.getName(),index,dl.getCString(index));
+ }
+ else
+ {
+ fprintf(f,"Setting of DO property %s[%d]=\n",
+ p.getName(),index);
+ printDataObject(f,dl.getDataObject(index));
+ }
+ }
+ else
+ {
+ if (p.getType().isDataType())
+ {
+ fprintf(f,"Setting of property %s=%s\n",
+ p.getName(),dol->getCString(p));
+ }
+ else
+ {
+ fprintf(f,"Setting of DO property %s=\n",
+ p.getName());
+ printDataObject(f,dol->getDataObject(p));
+ }
+ }
+ }
+ }
+ }
+ fprintf(f,"===== End Sequenced DataObject contents =\n");
+ }
+ else
+ {
+ fprintf(f,"===== DataObject contents =====\n");
+ PropertyList pl = dol->getInstanceProperties();
+
+ for (int j=0;j< pl.size(); j++)
+ {
+ fprintf(f,"%s:",pl[j].getName());
+ // this could be a many-valued property, and could be one which is
+ // a data object or a data type...
+ if (pl[j].isMany())
+ {
+ printList(f, dol,pl[j]);
+ }
+ else {
+ printValue(f, dol,pl[j]);
+ }
+ }
+ fprintf(f,"===== End DataObject =====\n");
+ }
+}
+
+
+
+void sdotest::dumpchangesummary(FILE *f, ChangeSummaryPtr cs)
+{
+
+ ChangedDataObjectList& cdol = cs->getChangedDataObjects();
+
+ // the changed data object list contains only the objects whose properties have
+ // been changed.
+ // a changed and subsequently deleted object will not appear, but necessarily its
+ // container will appear, so we can rebuild it.
+
+ for (int i=0;i< cdol.size();i++)
+ {
+ if (cs->isCreated(cdol[i]))
+ {
+ fprintf(f,"Created object in changed list\n");
+ // So its in the created list, it must exist in the tree...
+ fprintf(f,"The object is %s#%s\n",
+ cdol[i]->getType().getURI(),
+ cdol[i]->getType().getName());
+ }
+ if (cs->isModified(cdol[i]))
+ {
+ fprintf(f,"===== Modified Object Starts\n");
+ // get to a DAS data object...
+ DataObject* temp = cdol[i];
+ fprintf(f,"Xpath:%s\n",((DataObject*)temp)->objectToXPath());
+
+ if (cs->isDeleted(cdol[i]))
+ {
+ fprintf(f,"PROBLEM: DELETED OBJECT IN CHANGED LIST: \n");
+ // As the item is in the deleted list - its still present..
+ fprintf(f,"The type is %s#%s\n",
+ cdol[i]->getType().getURI(),
+ cdol[i]->getType().getName());
+ }
+ else {
+ fprintf(f,"The modified objects type is %s#%s\n",
+ cdol[i]->getType().getURI(),
+ cdol[i]->getType().getName());
+
+ printOldValues(f, cs, cdol[i]);
+ }
+ fprintf(f,"=====Modified Object Ends \n");
+ }
+ if (cs->isDeleted(cdol[i]))
+ {
+ fprintf(f,"=====Deleted Object Starts \n");
+ printOldValues(f, cs, cdol[i]);
+ fprintf(f,"=====Deleted Object Ends \n");
+ }
+ }
+}
+
+
+int sdotest::comparefiles(char* fn1, char*fn2)
+{
+ FILE *f1, *f2;
+ f1 = fopen(fn1,"r+");
+ if (f1 == 0)
+ {
+ if (!silent) cout << "Cannot open file:" << fn1 << endl;
+ return 0;
+ }
+ f2 = fopen(fn2,"r+");
+ if (f2 == 0)
+ {
+ if (!silent) cout << "Cannot open file:" << fn2 << endl;
+ if (ramping)
+ {
+ cout << "Creating it" << endl;
+ f2 = fopen(fn2,"w+");
+ if (f2 == 0)
+ {
+ cout << "Cannot ramp up - failed on " << fn2 << endl;
+ return 0;
+ }
+ int c;
+ do
+ {
+ c = fgetc(f1);
+ if (!feof(f1)) fputc(c,f2);
+ else break;
+ } while (1);
+ fclose(f1);
+ fclose(f2);
+ return 1;
+ }
+ else
+ {
+ fclose(f1);
+ return 0;
+ }
+ }
+
+ while (!feof(f1))
+ {
+ if (fgetc(f1) != fgetc(f2))
+ {
+ fclose(f1);
+ fclose(f2);
+ return 0;
+ }
+ }
+ fclose (f1);
+
+ if (!feof(f2))
+ {
+ fclose(f2);
+ return 0;
+ }
+
+ fclose(f2);
+ return 1;
+}
+
+
+int sdotest::printseq(FILE *f, SequencePtr sptr)
+{
+ fprintf(f, "======================================\n");
+ for (int i=0;i< sptr->size();i++)
+ {
+ try {
+ if (!sptr->isText(i))
+ {
+ const Property& prp = sptr->getProperty(i);
+ if (!strcmp(prp.getType().getName(),"Department"))
+ {
+ DataObjectPtr pdep = sptr->getDataObjectValue(i);
+ if (pdep != 0)
+ {
+ const char * cs = pdep->getCString("name");
+ if (cs != 0)
+ {
+ fprintf(f, "%s\n",cs);
+ }
+ else
+ {
+ fprintf(f," is empty \n");
+ }
+ }
+ }
+ else
+ {
+ const char* stx = sptr->getCStringValue(i);
+ if (stx != 0)
+ {
+ fprintf(f,"%s\n",stx);
+ }
+ else
+ {
+ fprintf(f," is empty \n");
+ }
+ }
+ }
+ else
+ {
+ const char* st = sptr->getCStringValue(i);
+ if (st != 0)
+ {
+ fprintf(f,"%s\n", st);
+ }
+ else
+ {
+ fprintf(f," is empty \n");
+ }
+ }
+ }
+ catch (SDOPropertyNotSetException)
+ {
+ if (!silent) cout << "WRONG - got a property not set exception!!!" << endl;
+ return 0;
+ }
+ }
+ fprintf(f, "======================================\n");
+ return 1;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml1.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml1.xsd
new file mode 100644
index 0000000000..54d78e0366
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml1.xsd
@@ -0,0 +1,2245 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema version="1.0" xml:lang="en"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ targetNamespace="http://www.w3.org/1999/xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xml="http://www.w3.org/XML/1998/namespace"
+ elementFormDefault="qualified">
+
+ <xs:annotation>
+ <xs:documentation>
+ XHTML 1.0 (Second Edition) Strict in XML Schema
+
+ This is the same as HTML 4 Strict except for
+ changes due to the differences between XML and SGML.
+
+ Namespace = http://www.w3.org/1999/xhtml
+
+ For further information, see: http://www.w3.org/TR/xhtml1
+
+ Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
+ All Rights Reserved.
+
+ The DTD version is identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+
+ $Id: xhtml1-strict.xsd,v 1.2 2002/08/28 08:05:44 mimasa Exp $
+ </xs:documentation>
+ </xs:annotation>
+
+ <!-- <xs:import namespace="http://www.w3.org/XML/1998/namespace"
+ schemaLocation="xml.xsd"/> -->
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Character mnemonic entities =========================
+
+ XHTML entity sets are identified by the PUBLIC and SYSTEM identifiers:
+
+ PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"
+
+ PUBLIC "-//W3C//ENTITIES Special for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent"
+
+ PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN"
+ SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Imported Names ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="ContentType">
+ <xs:annotation>
+ <xs:documentation>
+ media type, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="ContentTypes">
+ <xs:annotation>
+ <xs:documentation>
+ comma-separated list of media types, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Charset">
+ <xs:annotation>
+ <xs:documentation>
+ a character encoding, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Charsets">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of character encodings, as per [RFC2045]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="LanguageCode">
+ <xs:annotation>
+ <xs:documentation>
+ a language code, as per [RFC3066]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:language"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Character">
+ <xs:annotation>
+ <xs:documentation>
+ a single character, as per section 2.2 of [XML]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:length value="1" fixed="true"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Number">
+ <xs:annotation>
+ <xs:documentation>
+ one or more digits
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger">
+ <xs:pattern value="[0-9]+"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="tabindexNumber">
+ <xs:annotation>
+ <xs:documentation>
+ tabindex attribute specifies the position of the current element
+ in the tabbing order for the current document. This value must be
+ a number between 0 and 32767. User agents should ignore leading zeros.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="Number">
+ <xs:minInclusive value="0"/>
+ <xs:maxInclusive value="32767"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="LinkTypes">
+ <xs:annotation>
+ <xs:documentation>
+ space-separated list of link types
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:NMTOKENS"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="MediaDesc">
+ <xs:annotation>
+ <xs:documentation>
+ single or comma-separated list of media descriptors
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[^,]+(,\s*[^,]+)*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="URI">
+ <xs:annotation>
+ <xs:documentation>
+ a Uniform Resource Identifier, see [RFC2396]
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:anyURI"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="UriList">
+ <xs:annotation>
+ <xs:documentation>
+ a space separated list of Uniform Resource Identifiers
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Datetime">
+ <xs:annotation>
+ <xs:documentation>
+ date and time information. ISO date format
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:dateTime"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Script">
+ <xs:annotation>
+ <xs:documentation>
+ script expression
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="StyleSheet">
+ <xs:annotation>
+ <xs:documentation>
+ style sheet data
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Text">
+ <xs:annotation>
+ <xs:documentation>
+ used for titles etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string"/>
+ </xs:simpleType>
+
+ <xs:simpleType name="Length">
+ <xs:annotation>
+ <xs:documentation>
+ nn for pixels or nn% for percentage length
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="MultiLength">
+ <xs:annotation>
+ <xs:documentation>
+ pixel, percentage, or relative
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern value="[-+]?(\d+|\d+(\.\d+)?%)|[1-9]?(\d+)?\*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Pixels">
+ <xs:annotation>
+ <xs:documentation>
+ integer representing length in pixels
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:nonNegativeInteger"/>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ these are used for image maps
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="Shape">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="rect"/>
+ <xs:enumeration value="circle"/>
+ <xs:enumeration value="poly"/>
+ <xs:enumeration value="default"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="Coords">
+ <xs:annotation>
+ <xs:documentation>
+ comma separated list of lengths
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:string">
+ <xs:pattern
+ value="[-+]?(\d+|\d+(\.\d+)?%)(,\s*[-+]?(\d+|\d+(\.\d+)?%))*"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Generic Attributes ===============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:attributeGroup name="coreattrs">
+ <xs:annotation>
+ <xs:documentation>
+ core attributes common to most elements
+ id document-wide unique id
+ class space separated list of classes
+ style associated style info
+ title advisory title/amplification
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="class" type="xs:NMTOKENS"/>
+ <xs:attribute name="style" type="StyleSheet"/>
+ <xs:attribute name="title" type="Text"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="i18n">
+ <xs:annotation>
+ <xs:documentation>
+ internationalization attributes
+ lang language code (backwards compatible)
+ xml:lang language code (as per XML 1.0 spec)
+ dir direction for weak/neutral text
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="lang" type="LanguageCode"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute name="dir">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="events">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for common UI events
+ onclick a pointer button was clicked
+ ondblclick a pointer button was double clicked
+ onmousedown a pointer button was pressed down
+ onmouseup a pointer button was released
+ onmousemove a pointer was moved onto the element
+ onmouseout a pointer was moved away from the element
+ onkeypress a key was pressed and released
+ onkeydown a key was pressed down
+ onkeyup a key was released
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="onclick" type="Script"/>
+ <xs:attribute name="ondblclick" type="Script"/>
+ <xs:attribute name="onmousedown" type="Script"/>
+ <xs:attribute name="onmouseup" type="Script"/>
+ <xs:attribute name="onmouseover" type="Script"/>
+ <xs:attribute name="onmousemove" type="Script"/>
+ <xs:attribute name="onmouseout" type="Script"/>
+ <xs:attribute name="onkeypress" type="Script"/>
+ <xs:attribute name="onkeydown" type="Script"/>
+ <xs:attribute name="onkeyup" type="Script"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="focus">
+ <xs:annotation>
+ <xs:documentation>
+ attributes for elements that can get the focus
+ accesskey accessibility key character
+ tabindex position in tabbing order
+ onfocus the element got the focus
+ onblur the element lost the focus
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="accesskey" type="Character"/>
+ <xs:attribute name="tabindex" type="tabindexNumber"/>
+ <xs:attribute name="onfocus" type="Script"/>
+ <xs:attribute name="onblur" type="Script"/>
+ </xs:attributeGroup>
+<!--
+ <xs:attributeGroup name="attrs">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attributeGroup ref="events"/>
+ </xs:attributeGroup>
+-->
+ <xs:attributeGroup name="attrs">
+
+ <!-- coreattrs attribute group -->
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="class" type="xs:NMTOKENS"/>
+ <xs:attribute name="style" type="StyleSheet"/>
+ <xs:attribute name="title" type="Text"/>
+
+ <!-- i18n attribute group -->
+ <xs:attribute name="lang" type="LanguageCode"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute name="dir">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+
+ <!-- events attribute group -->
+ <xs:attribute name="onclick" type="Script"/>
+ <xs:attribute name="ondblclick" type="Script"/>
+ <xs:attribute name="onmousedown" type="Script"/>
+ <xs:attribute name="onmouseup" type="Script"/>
+ <xs:attribute name="onmouseover" type="Script"/>
+ <xs:attribute name="onmousemove" type="Script"/>
+ <xs:attribute name="onmouseout" type="Script"/>
+ <xs:attribute name="onkeypress" type="Script"/>
+ <xs:attribute name="onkeydown" type="Script"/>
+ <xs:attribute name="onkeyup" type="Script"/>
+ </xs:attributeGroup>
+
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Text Elements ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="special.pre">
+ <xs:choice>
+ <xs:element ref="br"/>
+ <xs:element ref="span"/>
+ <xs:element ref="bdo"/>
+ <xs:element ref="map"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="special">
+ <xs:choice>
+ <xs:group ref="special.pre"/>
+ <xs:element ref="object"/>
+ <xs:element ref="img"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="fontstyle">
+ <xs:choice>
+ <xs:element ref="tt"/>
+ <xs:element ref="i"/>
+ <xs:element ref="b"/>
+ <xs:element ref="big"/>
+ <xs:element ref="small"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="phrase">
+ <xs:choice>
+ <xs:element ref="em"/>
+ <xs:element ref="strong"/>
+ <xs:element ref="dfn"/>
+ <xs:element ref="code"/>
+ <xs:element ref="q"/>
+ <xs:element ref="samp"/>
+ <xs:element ref="kbd"/>
+ <xs:element ref="var"/>
+ <xs:element ref="cite"/>
+ <xs:element ref="abbr"/>
+ <xs:element ref="acronym"/>
+ <xs:element ref="sub"/>
+ <xs:element ref="sup"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline.forms">
+ <xs:choice>
+ <xs:element ref="input"/>
+ <xs:element ref="select"/>
+ <xs:element ref="textarea"/>
+ <xs:element ref="label"/>
+ <xs:element ref="button"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc.inline">
+ <xs:choice>
+ <xs:element ref="ins"/>
+ <xs:element ref="del"/>
+ <xs:element ref="script"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="misc">
+ <xs:annotation>
+ <xs:documentation>
+ these can only occur at block level
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice>
+ <xs:element ref="noscript"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="inline">
+ <xs:choice>
+ <xs:element ref="a"/>
+ <xs:group ref="special"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="inline.forms"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Inline" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Inline" covers inline or "text-level" elements
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="inline"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Block level elements ==============================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="heading">
+ <xs:choice>
+ <xs:element ref="h1"/>
+ <xs:element ref="h2"/>
+ <xs:element ref="h3"/>
+ <xs:element ref="h4"/>
+ <xs:element ref="h5"/>
+ <xs:element ref="h6"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="lists">
+ <xs:choice>
+ <xs:element ref="ul"/>
+ <xs:element ref="ol"/>
+ <xs:element ref="dl"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="blocktext">
+ <xs:choice>
+ <xs:element ref="pre"/>
+ <xs:element ref="hr"/>
+ <xs:element ref="blockquote"/>
+ <xs:element ref="address"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:group name="block">
+ <xs:choice>
+ <xs:element ref="p"/>
+ <xs:group ref="heading"/>
+ <xs:element ref="div"/>
+ <xs:group ref="lists"/>
+ <xs:group ref="blocktext"/>
+ <xs:element ref="fieldset"/>
+ <xs:element ref="table"/>
+ </xs:choice>
+ </xs:group>
+
+ <xs:complexType name="Block">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="Flow" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ "Flow" mixes block and inline and is used for list items etc.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Content models for exclusions =====================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:complexType name="a.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ a elements use "Inline" excluding a
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="special"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="inline.forms"/>
+ <xs:group ref="misc.inline"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="pre.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ pre uses "Inline" excluding big, small, sup or sup
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="a"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="special.pre"/>
+ <xs:group ref="misc.inline"/>
+ <xs:group ref="inline.forms"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="form.content">
+ <xs:annotation>
+ <xs:documentation>
+ form uses "Block" excluding form
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:complexType name="button.content" mixed="true">
+ <xs:annotation>
+ <xs:documentation>
+ button uses "Flow" but excludes a, form and form controls
+ </xs:documentation>
+ </xs:annotation>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="p"/>
+ <xs:group ref="heading"/>
+ <xs:element ref="div"/>
+ <xs:group ref="lists"/>
+ <xs:group ref="blocktext"/>
+ <xs:element ref="table"/>
+ <xs:group ref="special"/>
+ <xs:group ref="fontstyle"/>
+ <xs:group ref="phrase"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:complexType>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Structure ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="html">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element ref="head"/>
+ <xs:element ref="body"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Document Head =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:group name="head.misc">
+ <xs:sequence>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="script"/>
+ <xs:element ref="style"/>
+ <xs:element ref="meta"/>
+ <xs:element ref="link"/>
+ <xs:element ref="object"/>
+ </xs:choice>
+ </xs:sequence>
+ </xs:group>
+
+ <xs:element name="head">
+ <xs:annotation>
+ <xs:documentation>
+ content model is "head.misc" combined with a single
+ title and an optional base element in any order
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:group ref="head.misc"/>
+ <xs:choice>
+ <xs:sequence>
+ <xs:element ref="title"/>
+ <xs:group ref="head.misc"/>
+ <xs:sequence minOccurs="0">
+ <xs:element ref="base"/>
+ <xs:group ref="head.misc"/>
+ </xs:sequence>
+ </xs:sequence>
+ <xs:sequence>
+ <xs:element ref="base"/>
+ <xs:group ref="head.misc"/>
+ <xs:element ref="title"/>
+ <xs:group ref="head.misc"/>
+ </xs:sequence>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="profile" type="URI"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="title">
+ <xs:annotation>
+ <xs:documentation>
+ The title element is not considered part of the flow of text.
+ It should be displayed, for example as the page header or
+ window title. Exactly one title is required per document.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="base">
+ <xs:annotation>
+ <xs:documentation>
+ document base URI
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="href" use="required" type="URI"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="meta">
+ <xs:annotation>
+ <xs:documentation>
+ generic metainformation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="http-equiv"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="content" use="required"/>
+ <xs:attribute name="scheme"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="link">
+ <xs:annotation>
+ <xs:documentation>
+ Relationship values can be used in principle:
+
+ a) for document specific toolbars/menus when used
+ with the link element in document head e.g.
+ start, contents, previous, next, index, end, help
+ b) to link to a separate style sheet (rel="stylesheet")
+ c) to make a link to a script (rel="script")
+ d) by stylesheets to control how collections of
+ html nodes are rendered into printed documents
+ e) to make a link to a printable version of this document
+ e.g. a PostScript or PDF version (rel="alternate" media="print")
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="hreflang" type="LanguageCode"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="rel" type="LinkTypes"/>
+ <xs:attribute name="rev" type="LinkTypes"/>
+ <xs:attribute name="media" type="MediaDesc"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="style">
+ <xs:annotation>
+ <xs:documentation>
+ style info, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="type" use="required" type="ContentType"/>
+ <xs:attribute name="media" type="MediaDesc"/>
+ <xs:attribute name="title" type="Text"/>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="script">
+ <xs:annotation>
+ <xs:documentation>
+ script statements, which may include CDATA sections
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="type" use="required" type="ContentType"/>
+ <xs:attribute name="src" type="URI"/>
+ <xs:attribute name="defer">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="defer"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="noscript">
+ <xs:annotation>
+ <xs:documentation>
+ alternate content container for non script-based rendering
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="Block">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Document Body ====================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="body">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="Block">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="onload" type="Script"/>
+ <xs:attribute name="onunload" type="Script"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="div">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Paragraphs =======================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="p">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Headings =========================================
+
+ There are six levels of headings from h1 (the most important)
+ to h6 (the least important).
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="h1">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h2">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h3">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h4">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h5">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="h6">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Lists ============================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="ul">
+ <xs:annotation>
+ <xs:documentation>
+ Unordered list
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="ol">
+ <xs:annotation>
+ <xs:documentation>
+ Ordered (numbered) list
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="li"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="li">
+ <xs:annotation>
+ <xs:documentation>
+ list item
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ definition lists - dt for term, dd for its definition
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="dl">
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="dt"/>
+ <xs:element ref="dd"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dt">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dd">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Address ==========================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="address">
+ <xs:annotation>
+ <xs:documentation>
+ information on author
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Horizontal Rule ==================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="hr">
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Preformatted Text ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="pre">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" excluding "img|object|big|small|sub|sup"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="pre.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute ref="xml:space" fixed="preserve"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Block-like Quotes ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="blockquote">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="Block">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Inserted/Deleted Text ============================
+
+ ins/del are allowed in block and inline content, but its
+ inappropriate to include block content within an ins element
+ occurring in inline content.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="ins">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ <xs:attribute name="datetime" type="Datetime"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="del">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ <xs:attribute name="datetime" type="Datetime"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== The Anchor Element ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="a">
+ <xs:annotation>
+ <xs:documentation>
+ content is "Inline" except that anchors shouldn't be nested
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="a.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="charset" type="Charset"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="hreflang" type="LanguageCode"/>
+ <xs:attribute name="rel" type="LinkTypes"/>
+ <xs:attribute name="rev" type="LinkTypes"/>
+ <xs:attribute name="shape" default="rect" type="Shape"/>
+ <xs:attribute name="coords" type="Coords"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ===================== Inline Elements ================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="span">
+ <xs:annotation>
+ <xs:documentation>
+ generic language/style container
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="bdo">
+ <xs:annotation>
+ <xs:documentation>
+ I18N BiDi over-ride
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="coreattrs"/>
+ <xs:attributeGroup ref="events"/>
+ <xs:attribute name="lang" type="LanguageCode"/>
+ <xs:attribute ref="xml:lang"/>
+ <xs:attribute name="dir" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ltr"/>
+ <xs:enumeration value="rtl"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="br">
+ <xs:annotation>
+ <xs:documentation>
+ forced line break
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="coreattrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="em">
+ <xs:annotation>
+ <xs:documentation>
+ emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="strong">
+ <xs:annotation>
+ <xs:documentation>
+ strong emphasis
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="dfn">
+ <xs:annotation>
+ <xs:documentation>
+ definitional
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="code">
+ <xs:annotation>
+ <xs:documentation>
+ program code
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="samp">
+ <xs:annotation>
+ <xs:documentation>
+ sample
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="kbd">
+ <xs:annotation>
+ <xs:documentation>
+ something user would type
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="var">
+ <xs:annotation>
+ <xs:documentation>
+ variable
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="cite">
+ <xs:annotation>
+ <xs:documentation>
+ citation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="abbr">
+ <xs:annotation>
+ <xs:documentation>
+ abbreviation
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="acronym">
+ <xs:annotation>
+ <xs:documentation>
+ acronym
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="q">
+ <xs:annotation>
+ <xs:documentation>
+ inlined quote
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="cite" type="URI"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sub">
+ <xs:annotation>
+ <xs:documentation>
+ subscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="sup">
+ <xs:annotation>
+ <xs:documentation>
+ superscript
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tt">
+ <xs:annotation>
+ <xs:documentation>
+ fixed pitch font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="i">
+ <xs:annotation>
+ <xs:documentation>
+ italic font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="b">
+ <xs:annotation>
+ <xs:documentation>
+ bold font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="big">
+ <xs:annotation>
+ <xs:documentation>
+ bigger font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="small">
+ <xs:annotation>
+ <xs:documentation>
+ smaller font
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ==================== Object ======================================
+
+ object is used to embed objects as part of HTML pages.
+ param elements should precede other content. Parameters
+ can also be expressed as attribute/value pairs on the
+ object element itself when brevity is desired.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="object">
+ <xs:complexType mixed="true">
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="param"/>
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="declare">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="declare"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="classid" type="URI"/>
+ <xs:attribute name="codebase" type="URI"/>
+ <xs:attribute name="data" type="URI"/>
+ <xs:attribute name="type" type="ContentType"/>
+ <xs:attribute name="codetype" type="ContentType"/>
+ <xs:attribute name="archive" type="UriList"/>
+ <xs:attribute name="standby" type="Text"/>
+ <xs:attribute name="height" type="Length"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="usemap" type="URI"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ <xs:attribute name="tabindex" type="tabindexNumber"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="param">
+ <xs:annotation>
+ <xs:documentation>
+ param is used to supply a named property value.
+ In XML it would seem natural to follow RDF and support an
+ abbreviated syntax where the param elements are replaced
+ by attribute value pairs on the object start tag.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attribute name="id" type="xs:ID"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="value"/>
+ <xs:attribute name="valuetype" default="data">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="data"/>
+ <xs:enumeration value="ref"/>
+ <xs:enumeration value="object"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="type" type="ContentType"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ =================== Images ===========================================
+
+ To avoid accessibility problems for people who aren't
+ able to see the image, you should provide a text
+ description using the alt and longdesc attributes.
+ In addition, avoid the use of server-side image maps.
+ Note that in this DTD there is no name attribute. That
+ is only available in the transitional and frameset DTD.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="img">
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="src" use="required" type="URI"/>
+ <xs:attribute name="alt" use="required" type="Text"/>
+ <xs:attribute name="longdesc" type="URI"/>
+ <xs:attribute name="height" type="Length"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="usemap" type="URI">
+ <xs:annotation>
+ <xs:documentation>
+ usemap points to a map element which may be in this document
+ or an external document, although the latter is not widely supported
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="ismap">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="ismap"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================== Client-side image maps ============================
+
+ These can be placed in the same document or grouped in a
+ separate document although this isn't yet widely supported
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="map">
+ <xs:complexType>
+ <xs:choice>
+ <xs:choice maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ <xs:element maxOccurs="unbounded" ref="area"/>
+ </xs:choice>
+ <xs:attributeGroup ref="i18n"/>
+ <xs:attributeGroup ref="events"/>
+ <xs:attribute name="id" use="required" type="xs:ID"/>
+ <xs:attribute name="class"/>
+ <xs:attribute name="style" type="StyleSheet"/>
+ <xs:attribute name="title" type="Text"/>
+ <xs:attribute name="name" type="xs:NMTOKEN"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="area">
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="shape" default="rect" type="Shape"/>
+ <xs:attribute name="coords" type="Coords"/>
+ <xs:attribute name="href" type="URI"/>
+ <xs:attribute name="nohref">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="nohref"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="alt" use="required" type="Text"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ================ Forms ===============================================
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="form">
+ <xs:complexType>
+ <xs:complexContent>
+ <xs:extension base="form.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="action" use="required" type="URI"/>
+ <xs:attribute name="method" default="get">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="get"/>
+ <xs:enumeration value="post"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="enctype" type="ContentType"
+ default="application/x-www-form-urlencoded"/>
+ <xs:attribute name="onsubmit" type="Script"/>
+ <xs:attribute name="onreset" type="Script"/>
+ <xs:attribute name="accept" type="ContentTypes"/>
+ <xs:attribute name="accept-charset" type="Charsets"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="label">
+ <xs:annotation>
+ <xs:documentation>
+ Each label must not contain more than ONE field
+ Label elements shouldn't be nested.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="for" type="xs:IDREF"/>
+ <xs:attribute name="accesskey" type="Character"/>
+ <xs:attribute name="onfocus" type="Script"/>
+ <xs:attribute name="onblur" type="Script"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="InputType">
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="text"/>
+ <xs:enumeration value="password"/>
+ <xs:enumeration value="checkbox"/>
+ <xs:enumeration value="radio"/>
+ <xs:enumeration value="submit"/>
+ <xs:enumeration value="reset"/>
+ <xs:enumeration value="file"/>
+ <xs:enumeration value="hidden"/>
+ <xs:enumeration value="image"/>
+ <xs:enumeration value="button"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:element name="input">
+ <xs:annotation>
+ <xs:documentation>
+ form control
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="type" default="text" type="InputType"/>
+ <xs:attribute name="name">
+ <xs:annotation>
+ <xs:documentation>
+ the name attribute is required for all but submit &amp; reset
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="value"/>
+ <xs:attribute name="checked">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="checked"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="readonly">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="readonly"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="size"/>
+ <xs:attribute name="maxlength" type="Number"/>
+ <xs:attribute name="src" type="URI"/>
+ <xs:attribute name="alt"/>
+ <xs:attribute name="usemap" type="URI"/>
+ <xs:attribute name="onselect" type="Script"/>
+ <xs:attribute name="onchange" type="Script"/>
+ <xs:attribute name="accept" type="ContentTypes"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="select">
+ <xs:annotation>
+ <xs:documentation>
+ option selector
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="optgroup"/>
+ <xs:element ref="option"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="size" type="Number"/>
+ <xs:attribute name="multiple">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="multiple"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="tabindex" type="tabindexNumber"/>
+ <xs:attribute name="onfocus" type="Script"/>
+ <xs:attribute name="onblur" type="Script"/>
+ <xs:attribute name="onchange" type="Script"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="optgroup">
+ <xs:annotation>
+ <xs:documentation>
+ option group
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="option"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="label" use="required" type="Text"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="option">
+ <xs:annotation>
+ <xs:documentation>
+ selectable choice
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="selected">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="selected"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="label" type="Text"/>
+ <xs:attribute name="value"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="textarea">
+ <xs:annotation>
+ <xs:documentation>
+ multi-line text field
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="rows" use="required" type="Number"/>
+ <xs:attribute name="cols" use="required" type="Number"/>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="readonly">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="readonly"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="onselect" type="Script"/>
+ <xs:attribute name="onchange" type="Script"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="fieldset">
+ <xs:annotation>
+ <xs:documentation>
+ The fieldset element is used to group form fields.
+ Only one legend element should occur in the content
+ and if present should only be preceded by whitespace.
+
+ NOTE: this content model is different from the XHTML 1.0 DTD,
+ closer to the intended content model in HTML4 DTD
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:sequence>
+ <xs:element ref="legend"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:group ref="block"/>
+ <xs:element ref="form"/>
+ <xs:group ref="inline"/>
+ <xs:group ref="misc"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="legend">
+ <xs:annotation>
+ <xs:documentation>
+ fieldset label
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="accesskey" type="Character"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="button">
+ <xs:annotation>
+ <xs:documentation>
+ Content is "Flow" excluding a, form and form controls
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="button.content">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="focus"/>
+ <xs:attribute name="name"/>
+ <xs:attribute name="value"/>
+ <xs:attribute name="type" default="submit">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="button"/>
+ <xs:enumeration value="submit"/>
+ <xs:enumeration value="reset"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="disabled">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="disabled"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ ======================= Tables =======================================
+
+ Derived from IETF HTML table standard, see [RFC1942]
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:simpleType name="TFrame">
+ <xs:annotation>
+ <xs:documentation>
+ The border attribute sets the thickness of the frame around the
+ table. The default units are screen pixels.
+
+ The frame attribute specifies which parts of the frame around
+ the table should be rendered. The values are not the same as
+ CALS to avoid a name clash with the valign attribute.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="void"/>
+ <xs:enumeration value="above"/>
+ <xs:enumeration value="below"/>
+ <xs:enumeration value="hsides"/>
+ <xs:enumeration value="lhs"/>
+ <xs:enumeration value="rhs"/>
+ <xs:enumeration value="vsides"/>
+ <xs:enumeration value="box"/>
+ <xs:enumeration value="border"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:simpleType name="TRules">
+ <xs:annotation>
+ <xs:documentation>
+ The rules attribute defines which rules to draw between cells:
+
+ If rules is absent then assume:
+ "none" if border is absent or border="0" otherwise "all"
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="none"/>
+ <xs:enumeration value="groups"/>
+ <xs:enumeration value="rows"/>
+ <xs:enumeration value="cols"/>
+ <xs:enumeration value="all"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:attributeGroup name="cellhalign">
+ <xs:annotation>
+ <xs:documentation>
+ horizontal alignment attributes for cell contents
+
+ char alignment char, e.g. char=':'
+ charoff offset for alignment char
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="align">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="left"/>
+ <xs:enumeration value="center"/>
+ <xs:enumeration value="right"/>
+ <xs:enumeration value="justify"/>
+ <xs:enumeration value="char"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ <xs:attribute name="char" type="Character"/>
+ <xs:attribute name="charoff" type="Length"/>
+ </xs:attributeGroup>
+
+ <xs:attributeGroup name="cellvalign">
+ <xs:annotation>
+ <xs:documentation>
+ vertical alignment attributes for cell contents
+ </xs:documentation>
+ </xs:annotation>
+ <xs:attribute name="valign">
+ <xs:simpleType>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="top"/>
+ <xs:enumeration value="middle"/>
+ <xs:enumeration value="bottom"/>
+ <xs:enumeration value="baseline"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:attributeGroup>
+
+ <xs:element name="table">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" ref="caption"/>
+ <xs:choice>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="colgroup"/>
+ </xs:choice>
+ <xs:element minOccurs="0" ref="thead"/>
+ <xs:element minOccurs="0" ref="tfoot"/>
+ <xs:choice>
+ <xs:element maxOccurs="unbounded" ref="tbody"/>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="summary" type="Text"/>
+ <xs:attribute name="width" type="Length"/>
+ <xs:attribute name="border" type="Pixels"/>
+ <xs:attribute name="frame" type="TFrame"/>
+ <xs:attribute name="rules" type="TRules"/>
+ <xs:attribute name="cellspacing" type="Length"/>
+ <xs:attribute name="cellpadding" type="Length"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="caption">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Inline">
+ <xs:attributeGroup ref="attrs"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:annotation>
+ <xs:documentation>
+ Use thead to duplicate headers when breaking table
+ across page boundaries, or for static headers when
+ tbody sections are rendered in scrolling panel.
+
+ Use tfoot to duplicate footers when breaking table
+ across page boundaries, or for static footers when
+ tbody sections are rendered in scrolling panel.
+
+ Use multiple tbody sections when rules are needed
+ between groups of table rows.
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="thead">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tfoot">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tbody">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element maxOccurs="unbounded" ref="tr"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="colgroup">
+ <xs:annotation>
+ <xs:documentation>
+ colgroup groups a set of col elements. It allows you to group
+ several semantically related columns together.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" ref="col"/>
+ </xs:sequence>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="span" default="1" type="Number"/>
+ <xs:attribute name="width" type="MultiLength"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="col">
+ <xs:annotation>
+ <xs:documentation>
+ col elements define the alignment properties for cells in
+ one or more columns.
+
+ The width attribute specifies the width of the columns, e.g.
+
+ width=64 width in screen pixels
+ width=0.5* relative width of 0.5
+
+ The span attribute causes the attributes of one
+ col element to apply to more than one column.
+ </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="span" default="1" type="Number"/>
+ <xs:attribute name="width" type="MultiLength"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="tr">
+ <xs:complexType>
+ <xs:choice maxOccurs="unbounded">
+ <xs:element ref="th"/>
+ <xs:element ref="td"/>
+ </xs:choice>
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:simpleType name="Scope">
+ <xs:annotation>
+ <xs:documentation>
+ Scope is simpler than headers attribute for common tables
+ </xs:documentation>
+ </xs:annotation>
+ <xs:restriction base="xs:token">
+ <xs:enumeration value="row"/>
+ <xs:enumeration value="col"/>
+ <xs:enumeration value="rowgroup"/>
+ <xs:enumeration value="colgroup"/>
+ </xs:restriction>
+ </xs:simpleType>
+
+ <xs:annotation>
+ <xs:documentation>
+ th is for headers, td for data and for cells acting as both
+ </xs:documentation>
+ </xs:annotation>
+
+ <xs:element name="th">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="abbr" type="Text"/>
+ <xs:attribute name="axis"/>
+ <xs:attribute name="headers" type="xs:IDREFS"/>
+ <xs:attribute name="scope" type="Scope"/>
+ <xs:attribute name="rowspan" default="1" type="Number"/>
+ <xs:attribute name="colspan" default="1" type="Number"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+ <xs:element name="td">
+ <xs:complexType mixed="true">
+ <xs:complexContent>
+ <xs:extension base="Flow">
+ <xs:attributeGroup ref="attrs"/>
+ <xs:attribute name="abbr" type="Text"/>
+ <xs:attribute name="axis"/>
+ <xs:attribute name="headers" type="xs:IDREFS"/>
+ <xs:attribute name="scope" type="Scope"/>
+ <xs:attribute name="rowspan" default="1" type="Number"/>
+ <xs:attribute name="colspan" default="1" type="Number"/>
+ <xs:attributeGroup ref="cellhalign"/>
+ <xs:attributeGroup ref="cellvalign"/>
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ </xs:element>
+
+</xs:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_in.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_in.xml
new file mode 100644
index 0000000000..73e91260a8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_in.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <feed xmlns="http://www.w3.org/2005/Atom">
+ <title type="text">dive into mark</title>
+ <subtitle type="html">
+ A &lt;em&gt;lot&lt;/em&gt; of effort
+ went into making this effortless
+ </subtitle>
+ <updated>2005-07-31T12:29:29Z</updated>
+ <id>tag:example.org,2003:3</id>
+ <link rel="alternate" type="text/html" hreflang="en" href="http://example.org/"/>
+ <link rel="self" type="application/atom+xml" href="http://example.org/feed.atom"/>
+ <rights>Copyright (c) 2003, Mark Pilgrim</rights>
+ <generator uri="http://www.example.com/" version="1.0">
+ Example Toolkit
+ </generator>
+ <entry>
+ <title>Atom draft-07 snapshot</title>
+ <link rel="alternate" type="text/html" href="http://example.org/2005/04/02/atom"/>
+ <link rel="enclosure" type="audio/mpeg" length="1337" href="http://example.org/audio/ph34r_my_podcast.mp3"/>
+ <id>tag:example.org,2003:3.2397</id>
+ <updated>2005-07-31T12:29:29Z</updated>
+ <published>2003-12-13T08:29:29-04:00</published>
+ <author>
+ <name>Mark Pilgrim</name>
+ <uri>http://example.org/</uri>
+ <email>f8dy@example.com</email>
+ </author>
+ <contributor>
+ <name>Sam Ruby</name>
+ </contributor>
+ <contributor>
+ <name>Joe Gregorio</name>
+ </contributor>
+ <content type="xhtml" xml:lang="en" xml:base="http://diveintomark.org/">
+ <div xmlns="http://www.w3.org/1999/xhtml">
+ <p><i>[Update: The Atom draft is finished.]</i></p>
+ <div class="myclass"><p>Hello</p></div>
+ </div>
+ </content>
+ </entry>
+ </feed> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_out.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_out.txt
new file mode 100644
index 0000000000..d485768c7e
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/runtime/core/test/xhtml_out.txt
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom" xsi:type="feedType" xmlns:tns2="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.w3.org/2005/Atom">
+ <title type="text">dive into mark</title>
+ <subtitle type="html">
+ A &lt;em&gt;lot&lt;/em&gt; of effort
+ went into making this effortless
+ </subtitle>
+ <updated>2005-07-31T12:29:29Z</updated>
+ <id>tag:example.org,2003:3</id>
+ <link href="http://example.org/" rel="alternate" type="text/html" hreflang="en"></link>
+ <link href="http://example.org/feed.atom" rel="self" type="application/atom+xml"></link>
+ <rights>Copyright (c) 2003, Mark Pilgrim</rights>
+ <generator uri="http://www.example.com/" version="1.0">
+ Example Toolkit
+ </generator>
+ <entry>
+ <title>Atom draft-07 snapshot</title>
+ <link href="http://example.org/2005/04/02/atom" rel="alternate" type="text/html"></link>
+ <link href="http://example.org/audio/ph34r_my_podcast.mp3" rel="enclosure" type="audio/mpeg" length="1337"></link>
+ <id>tag:example.org,2003:3.2397</id>
+ <updated>2005-07-31T12:29:29Z</updated>
+ <published>2003-12-13T08:29:29-04:00</published>
+ <author>
+ <name>Mark Pilgrim</name>
+ <uri>http://example.org/</uri>
+ <email>f8dy@example.com</email>
+ </author>
+ <contributor>
+ <name>Sam Ruby</name>
+ </contributor>
+ <contributor>
+ <name>Joe Gregorio</name>
+ </contributor>
+ <content type="xhtml" lang="en" base="http://diveintomark.org/"><lang>en</lang><base>http://diveintomark.org/</base>
+ <tns2:div xsi:type="div">
+ <tns2:p><tns2:i>[Update: The Atom draft is finished.]</tns2:i></tns2:p>
+ <tns2:div class="myclass"><tns2:p>Hello</tns2:p></tns2:div>
+ </tns2:div>
+ </content>
+ </entry>
+ </feed>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/AUTHORS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/AUTHORS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/AUTHORS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/COPYING b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/COPYING
new file mode 100755
index 0000000000..6b0b1270ff
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/COPYING
@@ -0,0 +1,203 @@
+
+ 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/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ChangeLog b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ChangeLog
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ChangeLog
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/GettingStarted.html b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/GettingStarted.html
new file mode 100644
index 0000000000..df5fa3ffb1
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/GettingStarted.html
@@ -0,0 +1,173 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+ <META CONTENT="text/html; charset=iso-8859-1" HTTP-EQUIV="Content-Type">
+ <META CONTENT="text/css" HTTP-EQUIV="Content-Style-Type">
+ <STYLE MEDIA="all" TYPE="text/css">
+@import url("../doc/css/maven-base.css");
+@import url("../doc/css/maven-theme.css");
+ </STYLE>
+
+ <LINK HREF="../doc/css/maven-theme.css" MEDIA="print" REL="stylesheet"
+ TYPE="text/css">
+ <TITLE>Tuscany SDO C++ Samples - Getting Started</TITLE>
+</HEAD>
+
+<BODY>
+<DIV ID="bodyColumn">
+ <DIV ID="contentBox">
+ <DIV CLASS="section">
+ <H2>Tuscany Samples - Getting Started - SDO C++ Milestone release 1</H2>
+
+ <P>Tuscany SDO C++ includes some simple technology samples that demonstrate some of the basic sceanrios for C++ SDO.
+ This page describes the samples and what is needed to install and run them.
+ </P>
+ <P>The ObjectCreation sample demonstrates building the metadata programmatically, followed by use
+ of the metadata to instantiate objects in a graph.
+ </P>
+ <P>The XSDLoading sample shows how to load metadata from an XSD, and how to check for errors during
+ parsing. The parser gathers all non-fatal errors into one list, so all errors can be checked at one
+ time after parsing. Elements which contained errors will have been omitted from the resulting metadata.
+ </P>
+ <P>The ChangeSummarySave sample modifies a data graph of employees, and saves the modified graph with
+ its change summary. The output in ChangeSummarySave-output.xml shows the summary and its relationship
+ by references to the data graph.
+ </P>
+ <P>The Substitutes sample shows how to use substitites in XSD to achieve a property which will accept a
+ range of types.
+ </P>
+ <P>The Query sample shows how to use XPath to navigate within a graph to the required element. Note
+ that exceptions such as "path not found" may well be thrown if the XPath specified does not lead to
+ a real object in the graph.
+ </P>
+ <P>The SDO samples are built together into a single executable called sdo_misc.exe on Windows and sdo_misc on Linux
+ </P>
+ </DIV>
+
+ <DIV CLASS="section">
+ <H2>Contents</H2>
+ <OL>
+ <LI><A HREF="#linuxbld">Building the samples on Linux</A></LI>
+ <LI><A HREF="#linuxrun">Running the samples on Linux</A></LI>
+ <LI><A HREF="#winbld">Building the samples on Windows</A></LI>
+ <LI><A HREF="#winrun">Running the samples on Windows</A></LI>
+ </OL>
+ </DIV>
+
+
+ <DIV CLASS="section">
+ <A NAME="linuxbld"><H2>Building the samples on Linux</H2></A>
+ <P>If using the binary distribution the samples are built and installed in
+ &lt;tuscany_sdo_install_dir&gt;/samples - go directly to <A HREF="#linuxrun">Running the samples on Linux</A>.</P>
+ <OL>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ </LI>
+ <LI>Build the source with the following command sequence:
+ <UL>
+ <LI>cd &lt;tuscany_sdo_install_dir&gt;/samples</LI>
+ <LI>./configure</LI>
+ <LI>make</LI>
+ <LI>make install</LI>
+ </UL>
+ NOTE: If you don't provide a --prefix configure option, it will by default install into
+ /usr/local/tuscany/sdo/samples/misc</LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="linuxrun"><H2>Running the samples on Linux</H2></A>
+ <OL>
+ <LI>Ensure that &lt;tuscany_sdo_install_dir&gt;/lib is included in the LD_LIBRARY_PATH environment variable
+ </LI>
+ <LI>Run the sample with the following commands:
+ <UL>
+ <LI>cd &lt;tuscany_sdo_install_dir&gt;/samples/misc/deploy</LI>
+ <LI>./bin/sdo_misc</LI>
+ </UL>
+ </LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="winbld"><H2>Building the samples on Windows</H2></A>
+ <P>If using the binary distribution the samples are built and installed in
+ &lt;tuscany_sdo_install_dir&gt;/samples - go directly to <A HREF="#winrun">Running the samples on Windows</A>.</P>
+ <OL>
+ <LI>The following environment variables are required:
+ <UL>
+ <LI>TUSCANY_SDOCPP=&lt;path to installed Tuscany SDO&gt;
+ <LI>AXIS2C_HOME=&lt;path to axis2c version 0.92&gt;</LI>
+ </UL></LI>
+ </LI>
+ <LI>You must have set up the environment for Microsoft Visual C++ tools.
+ The build command will call vcvars32 to set the environment. Ensure the
+ directory containing this is on your path. This will be where you
+ installed the compiler.
+ </LI>
+ <LI>Build the source, either via the Visual Studio 6 project under
+ &lt;tuscany_sdo_install_dir&gt;\samples\ides or via the command-line build file
+ found at &lt;tuscany_sdo_install_dir&gt;\samples\ides\devstudio6\projects\misc\build.cmd
+ which will build and deploy the samples.
+ </LI>
+ </OL>
+ </DIV>
+
+ <DIV CLASS="section">
+ <A NAME="winrun"><H2>Running the samples on Windows</H2></A>
+ <OL>
+ <LI>Ensure that &lt;tuscany_sdo_install_dir&gt;\bin is included in the PATH environment variable
+ </LI>
+ <LI>Run the sample with the following commands:
+ <UL>
+ <LI>cd &lt;tuscany_sdo_install_dir&gt;/samples/misc/deploy</LI>
+ <LI>bin\sdo_misc</LI>
+ </UL>
+ </LI>
+ </OL>
+ </DIV>
+
+
+ <DIV CLASS="section">
+ <A NAME="help"><H2>Getting Help</H2></A>
+
+ <P>First place to look is at the Tuscany FAQ at
+ <A HREF="http://incubator.apache.org/tuscany/faq.html"
+ TARGET="_blank">http://incubator.apache.org/tuscany/faq.html</A> </P>
+
+ <P>Any problem with this release can be reported to the Tuscany
+ <A HREF="http://incubator.apache.org/tuscany/mail-lists.html"
+ TARGET="_blank">mailing lists</A> or create a JIRA issue at&nbsp;<A HREF="http://issues.apache.org/jira/browse/Tuscany"
+ TARGET="_blank">http://issues.apache.org/jira/browse/Tuscany</A>.</P>
+
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+
+ <P>&nbsp;</P>
+ <TABLE CLASS="bodyTable">
+ <TBODY>
+ <TR CLASS="a">
+ <TD>
+
+ <P>Thank you for your interest in Tuscany.</P> <STRONG><EM>-The
+ Tuscany Development Team</EM></STRONG>
+
+ <P></P>
+
+ </TD>
+ </TR>
+ </TBODY>
+ </TABLE>
+
+ <P></P>
+ </DIV>
+ </DIV>
+</DIV>
+</BODY>
+
+</HTML>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/INSTALL b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/INSTALL
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/INSTALL
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/LICENSE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/LICENSE
new file mode 100755
index 0000000000..f433b1a53f
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/LICENSE
@@ -0,0 +1,177 @@
+
+ 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
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/Makefile.am
new file mode 100644
index 0000000000..68251b1e10
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/Makefile.am
@@ -0,0 +1,3 @@
+SUBDIRS = misc
+
+EXTRA_DIST = GettingStarted.html
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NEWS b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NEWS
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NEWS
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NOTICE b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NOTICE
new file mode 100644
index 0000000000..bfb81409ad
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/NOTICE
@@ -0,0 +1,2 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/) \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/README b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/README
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/README
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/autogen.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/autogen.sh
new file mode 100755
index 0000000000..3cebb0a380
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/autogen.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+for i in "libtoolize --force" aclocal autoconf autoheader
+do
+ echo -n "Running $i..."
+ $i || exit 1
+ echo 'done.'
+done
+
+echo -n 'Running automake...'
+automake --add-missing
+echo 'done.'
+exit 0
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/build.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/build.sh
new file mode 100755
index 0000000000..adfc9e6ae9
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/build.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if [ x$TUSCANY_SDOCPP = x ]; then
+echo "TUSCANY_SDOCPP not set"
+exit;
+fi
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+if [ x$AXIS2C_HOME = x ]; then
+echo "AXIS2C_HOME not set"
+exit;
+fi
+echo "Using Axis2C installed at $AXIS2C_HOME"
+
+./configure --prefix=${TUSCANY_SDOCPP} --enable-static=no
+make
+make install
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/configure.ac b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/configure.ac
new file mode 100644
index 0000000000..6fb77f3dd3
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/configure.ac
@@ -0,0 +1,23 @@
+dnl run autogen.sh to generate the configure script.
+
+AC_PREREQ(2.59)
+AC_INIT(tuscany_sdo_samples, 0.1.incubating-M1)
+AC_CANONICAL_SYSTEM
+AM_CONFIG_HEADER(config.h)
+AM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION)
+AC_PREFIX_DEFAULT(/usr/local/tuscany/sdo/samples)
+
+# Checks for programs.
+AC_PROG_CXX
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_INSTALL
+AC_PROG_LN_S
+AC_PROG_MAKE_SET
+AC_PROG_LIBTOOL
+
+AC_CONFIG_FILES([Makefile
+ misc/Makefile
+ ])
+AC_OUTPUT
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/build.cmd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/build.cmd
new file mode 100644
index 0000000000..c43c1b17ef
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/build.cmd
@@ -0,0 +1,23 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+setlocal
+if not exist ..\..\..\..\misc\deploy mkdir ..\..\..\..\misc\deploy
+if not exist ..\..\..\..\misc\deploy\bin mkdir ..\..\..\..\misc\deploy\bin
+call vcvars32
+cd sdo_misc
+nmake -f sdo_misc.mak CFG="sdo_misc - Win32 Release"
+cd ..
+endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.dsw b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.dsw
new file mode 100644
index 0000000000..816b3b2f93
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "sdo_misc"=.\sdo_misc\sdo_misc.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.ncb b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.ncb
new file mode 100644
index 0000000000..e05deb80a8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.ncb
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.opt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.opt
new file mode 100644
index 0000000000..8e3cd5168a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/misc.opt
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/BuildInstructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/BuildInstructions.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/BuildInstructions.txt
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.dsp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.dsp
new file mode 100644
index 0000000000..ad3c9daae4
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.dsp
@@ -0,0 +1,156 @@
+# Microsoft Developer Studio Project File - Name="sdo_misc" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=sdo_misc - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_misc.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_misc.mak" CFG="sdo_misc - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_misc - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "sdo_misc - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "sdo_misc - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /I "$(TUSCANY_SDOCPP)\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FD /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib /nologo /subsystem:console /machine:I386 /libpath:"$(TUSCANY_SDOCPP)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=if not exist ..\..\..\..\..\misc\deploy mkdir ..\..\..\..\..\misc\deploy if not exist ..\..\..\..\..\misc\deploy\bin mkdir ..\..\..\..\..\misc\deploy\bin copy ..\..\..\..\..\misc\*.xsd ..\..\..\..\..\misc\deploy copy ..\..\..\..\..\misc\*.xml ..\..\..\..\..\misc\deploy copy Release\*.exe ..\..\..\..\..\misc\deploy\bin
+# End Special Build Tool
+
+!ELSEIF "$(CFG)" == "sdo_misc - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FD /GZ /c
+# SUBTRACT CPP /YX
+# ADD BASE RSC /l 0x809 /d "_DEBUG"
+# ADD RSC /l 0x809 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)\lib"
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Cmds=if not exist ..\..\..\..\..\misc\deploy mkdir ..\..\..\..\..\misc\deploy if not exist ..\..\..\..\..\misc\deploy\bin mkdir ..\..\..\..\..\misc\deploy\bin copy ..\..\..\..\..\misc\*.xsd ..\..\..\..\..\misc\deploy copy ..\..\..\..\..\misc\*.xml ..\..\..\..\..\misc\deploy copy Debug\*.exe ..\..\..\..\..\misc\deploy\bin
+# End Special Build Tool
+
+!ENDIF
+
+# Begin Target
+
+# Name "sdo_misc - Win32 Release"
+# Name "sdo_misc - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\ChangeSummarySave.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\ObjectCreation.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\Query.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\samples.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\Substitutes.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\XSDLoading.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\samples.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\ChangeSummarySave.xsd
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\companysubs.xsd
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\XSDLoading.xml
+# End Source File
+# Begin Source File
+
+SOURCE=..\..\..\..\..\misc\XSDLoading.xsd
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\BuildInstructions.txt
+# End Source File
+# End Target
+# End Project
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.mak b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.mak
new file mode 100644
index 0000000000..2b382d844a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio6/projects/misc/sdo_misc/sdo_misc.mak
@@ -0,0 +1,266 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on sdo_misc.dsp
+!IF "$(CFG)" == ""
+CFG=sdo_misc - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to sdo_misc - Win32 Debug.
+!ENDIF
+
+!IF "$(CFG)" != "sdo_misc - Win32 Release" && "$(CFG)" != "sdo_misc - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "sdo_misc.mak" CFG="sdo_misc - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "sdo_misc - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "sdo_misc - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+!ERROR An invalid configuration is specified.
+!ENDIF
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE
+NULL=nul
+!ENDIF
+
+!IF "$(CFG)" == "sdo_misc - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\sdo_misc.exe"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ChangeSummarySave.obj"
+ -@erase "$(INTDIR)\ObjectCreation.obj"
+ -@erase "$(INTDIR)\Query.obj"
+ -@erase "$(INTDIR)\samples.obj"
+ -@erase "$(INTDIR)\Substitutes.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\XSDLoading.obj"
+ -@erase "$(OUTDIR)\sdo_misc.exe"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MD /W3 /GX /I "$(TUSCANY_SDOCPP)\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_misc.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\sdo_misc.pdb" /machine:I386 /out:"$(OUTDIR)\sdo_misc.exe" /libpath:"$(TUSCANY_SDOCPP)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\ChangeSummarySave.obj" \
+ "$(INTDIR)\ObjectCreation.obj" \
+ "$(INTDIR)\Query.obj" \
+ "$(INTDIR)\samples.obj" \
+ "$(INTDIR)\Substitutes.obj" \
+ "$(INTDIR)\XSDLoading.obj"
+
+"$(OUTDIR)\sdo_misc.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\sdo_misc.exe"
+ copy ..\..\..\..\..\misc\*.xsd ..\..\..\..\..\misc\deploy
+ copy ..\..\..\..\..\misc\*.xml ..\..\..\..\..\misc\deploy
+ copy Release\*.exe ..\..\..\..\..\misc\deploy\bin
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF "$(CFG)" == "sdo_misc - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\sdo_misc.exe"
+
+
+CLEAN :
+ -@erase "$(INTDIR)\ChangeSummarySave.obj"
+ -@erase "$(INTDIR)\ObjectCreation.obj"
+ -@erase "$(INTDIR)\Query.obj"
+ -@erase "$(INTDIR)\samples.obj"
+ -@erase "$(INTDIR)\Substitutes.obj"
+ -@erase "$(INTDIR)\vc60.idb"
+ -@erase "$(INTDIR)\vc60.pdb"
+ -@erase "$(INTDIR)\XSDLoading.obj"
+ -@erase "$(OUTDIR)\sdo_misc.exe"
+ -@erase "$(OUTDIR)\sdo_misc.ilk"
+ -@erase "$(OUTDIR)\sdo_misc.pdb"
+
+"$(OUTDIR)" :
+ if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(TUSCANY_SDOCPP)\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c
+
+.c{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.obj::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.c{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cpp{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+.cxx{$(INTDIR)}.sbr::
+ $(CPP) @<<
+ $(CPP_PROJ) $<
+<<
+
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\sdo_misc.bsc"
+BSC32_SBRS= \
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib tuscany_sdo.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\sdo_misc.pdb" /debug /machine:I386 /out:"$(OUTDIR)\sdo_misc.exe" /pdbtype:sept /libpath:"$(TUSCANY_SDOCPP)\lib"
+LINK32_OBJS= \
+ "$(INTDIR)\ChangeSummarySave.obj" \
+ "$(INTDIR)\ObjectCreation.obj" \
+ "$(INTDIR)\Query.obj" \
+ "$(INTDIR)\samples.obj" \
+ "$(INTDIR)\Substitutes.obj" \
+ "$(INTDIR)\XSDLoading.obj"
+
+"$(OUTDIR)\sdo_misc.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+ $(LINK32) @<<
+ $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\sdo_misc.exe"
+ copy ..\..\..\..\..\misc\*.xsd ..\..\..\..\..\misc\deploy
+ copy ..\..\..\..\..\misc\*.xml ..\..\..\..\..\misc\deploy
+ copy Debug\*.exe ..\..\..\..\..\misc\deploy\bin
+ echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("sdo_misc.dep")
+!INCLUDE "sdo_misc.dep"
+!ELSE
+!MESSAGE Warning: cannot find "sdo_misc.dep"
+!ENDIF
+!ENDIF
+
+
+!IF "$(CFG)" == "sdo_misc - Win32 Release" || "$(CFG)" == "sdo_misc - Win32 Debug"
+SOURCE=..\..\..\..\..\misc\ChangeSummarySave.cpp
+
+"$(INTDIR)\ChangeSummarySave.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\misc\ObjectCreation.cpp
+
+"$(INTDIR)\ObjectCreation.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\misc\Query.cpp
+
+"$(INTDIR)\Query.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\misc\samples.cpp
+
+"$(INTDIR)\samples.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\misc\Substitutes.cpp
+
+"$(INTDIR)\Substitutes.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\..\..\..\..\misc\XSDLoading.cpp
+
+"$(INTDIR)\XSDLoading.obj" : $(SOURCE) "$(INTDIR)"
+ $(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+
+!ENDIF
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.sln b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.sln
new file mode 100644
index 0000000000..e17079e801
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.sln
@@ -0,0 +1,21 @@
+Microsoft Visual Studio Solution File, Format Version 7.00
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdo_misc", "sdo_misc\sdo_misc.vcproj", "{0B4E79E7-D66A-4501-9941-580C3E00A382}"
+EndProject
+Global
+ GlobalSection(SolutionConfiguration) = preSolution
+ ConfigName.0 = Debug
+ ConfigName.1 = Release
+ EndGlobalSection
+ GlobalSection(ProjectDependencies) = postSolution
+ EndGlobalSection
+ GlobalSection(ProjectConfiguration) = postSolution
+ {0B4E79E7-D66A-4501-9941-580C3E00A382}.Debug.ActiveCfg = Debug|Win32
+ {0B4E79E7-D66A-4501-9941-580C3E00A382}.Debug.Build.0 = Debug|Win32
+ {0B4E79E7-D66A-4501-9941-580C3E00A382}.Release.ActiveCfg = Release|Win32
+ {0B4E79E7-D66A-4501-9941-580C3E00A382}.Release.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ EndGlobalSection
+ GlobalSection(ExtensibilityAddIns) = postSolution
+ EndGlobalSection
+EndGlobal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.suo b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.suo
new file mode 100644
index 0000000000..d31a854277
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/misc.suo
Binary files differ
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/BuildInstructions.txt b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/BuildInstructions.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/BuildInstructions.txt
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/sdo_misc.vcproj b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/sdo_misc.vcproj
new file mode 100644
index 0000000000..faf875dabd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/ides/devstudio7/projects/misc/sdo_misc/sdo_misc.vcproj
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding = "Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.00"
+ Name="sdo_misc"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)\include"
+ PreprocessorDefinitions="WIN32,NDEBUG,_CONSOLE"
+ RuntimeLibrary="2"
+ PrecompiledHeaderFile=".\Release/sdo_misc.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sdo.lib"
+ OutputFile=".\Release/sdo_misc.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)\lib"
+ ProgramDatabaseFile=".\Release/sdo_misc.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/sdo_misc.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if not exist ..\..\..\..\..\misc\deploy mkdir ..\..\..\..\..\misc\deploy
+if not exist ..\..\..\..\..\misc\deploy\bin mkdir ..\..\..\..\..\misc\deploy\bin
+copy ..\..\..\..\..\misc\*.xsd ..\..\..\..\..\misc\deploy
+copy ..\..\..\..\..\misc\*.xml ..\..\..\..\..\misc\deploy
+copy Release\*.exe ..\..\..\..\..\misc\deploy\bin
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="$(TUSCANY_SDOCPP)\include"
+ PreprocessorDefinitions="WIN32,_DEBUG,_CONSOLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ PrecompiledHeaderFile=".\Debug/sdo_misc.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="odbc32.lib odbccp32.lib tuscany_sdo.lib"
+ OutputFile=".\Debug/sdo_misc.exe"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="$(TUSCANY_SDOCPP)\lib"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/sdo_misc.pdb"
+ SubSystem="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/sdo_misc.tlb"/>
+ <Tool
+ Name="VCPostBuildEventTool"
+ CommandLine="if not exist ..\..\..\..\..\misc\deploy mkdir ..\..\..\..\..\misc\deploy
+if not exist ..\..\..\..\..\misc\deploy\bin mkdir ..\..\..\..\..\misc\deploy\bin
+copy ..\..\..\..\..\misc\*.xsd ..\..\..\..\..\misc\deploy
+copy ..\..\..\..\..\misc\*.xml ..\..\..\..\..\misc\deploy
+copy Debug\*.exe ..\..\..\..\..\misc\deploy\bin
+"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ </Configuration>
+ </Configurations>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="..\..\..\..\..\misc\ChangeSummarySave.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\ObjectCreation.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\Query.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\Substitutes.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\XSDLoading.cpp">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\samples.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\..\..\..\..\misc\samples.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ <File
+ RelativePath="..\..\..\..\..\misc\ChangeSummarySave.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\XSDLoading.xml">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\XSDLoading.xsd">
+ </File>
+ <File
+ RelativePath="..\..\..\..\..\misc\companysubs.xsd">
+ </File>
+ </Filter>
+ <File
+ RelativePath=".\BuildInstructions.txt">
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.cpp
new file mode 100644
index 0000000000..5d65ec1009
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.cpp
@@ -0,0 +1,186 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "samples.h"
+using namespace std;
+
+void ChangeSummarySave::sample()
+{
+ cout << " ********** ChangeSummarySave sample********" << endl;
+
+ try {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("ChangeSummarySave.xsd");
+
+ /**
+ * Load the schema from ChangeSummarySave.xsd
+ */
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool = mdg->getType("commonj.sdo","Boolean");
+ const Type& tcs = mdg->getType("commonj.sdo","ChangeSummary");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& tdept = mdg->getType("companyNS","DepartmentType");
+ const Type& temp = mdg->getType("companyNS","EmployeeType");
+
+
+ /**
+ * create a graph, set the change summary logging, modify the
+ * data, then save it to a file
+ */
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","ACME");
+
+ DataObjectPtr dept = mdg->create((Type&)tdept);
+ DataObjectList& dol = comp->getList("departments");
+ dol.append(dept);
+
+ dept->setCString("name","Advanced Technologies");
+ dept->setCString("location","NY");
+ dept->setCString("number","123");
+
+ DataObjectPtr emp1 = mdg->create(temp);
+ DataObjectPtr emp2 = mdg->create(temp);
+ DataObjectPtr emp3 = mdg->create(temp);
+
+ emp1->setCString("name","John Jones");
+ emp1->setCString("SN","E0001");
+
+ emp2->setCString("name","Mary Smith");
+ emp2->setCString("SN","E0002");
+ emp2->setBoolean("manager",true);
+
+ emp3->setCString("name","Jane Doe");
+ emp3->setCString("SN","E0003");
+
+ DataObjectList& dol2 = dept->getList("employees");
+ dol2.append(emp1);
+ dol2.append(emp2);
+ dol2.append(emp3);
+
+
+ /**
+ * Set the employee of the month - which is a reference, not
+ * a containment value
+ */
+
+ comp->setDataObject("employeeOfTheMonth",emp2);
+
+ /**
+ * The XSD defined the company type as having a change summary,
+ * so we can get it...
+ */
+
+ ChangeSummaryPtr cs = comp->getChangeSummary();
+
+ /**
+ * And ask it to start logging...
+ */
+
+ cs->beginLogging();
+
+ /**
+ * With logging on, create a new employee
+ */
+
+ DataObjectPtr emp4 = mdg->create(temp);
+ emp4->setCString("name","Al Smith");
+ emp4->setCString("SN","E0004");
+ emp4->setBoolean("manager",true);
+
+ /**
+ * The first recorded change happens now, as the employee is
+ * added into the data graph. Emp4 (Al Smith) will appear in the
+ * change summary as a creation. There will also be a change
+ * record for the list "employees" of this department, holding the
+ * values before Al was added.
+ */
+ dol2.append(emp4);
+
+ /**
+ * The second change is to remove element 1 from the
+ * same list - Thats Mary Smith.
+ * Mary will appear as a deletion, but there will be no extra
+ * change record for "employees", as its already been changed.
+ * Mary was employee of the month, so that reference gets
+ * emptied, and a change record is set up for it, recording
+ * Mary as the old value.
+ */
+
+ dol2.remove(1); // element 1 is Mary
+
+ DataObjectPtr emp5 = mdg->create(temp);
+ emp5->setCString("name","Bill Withers");
+ emp5->setCString("SN","E0005");
+
+
+ /**
+ * The third change is to append Bill to the same list.
+ * Bill appears as a creation, but there is no change recorded to
+ * the employees list.
+ */
+
+ dol2.append(emp5);
+
+
+ /**
+ * The company name is changed. A change record is set up for
+ * the property "name" of this company. It stores the old value
+ * "ACME"
+ */
+
+ comp->setCString("name","MegaCorp");
+
+ /**
+ * The company employee of the month is changed. The old
+ * value has already been changed from Mary to NULL, so no change
+ * record is created here at all
+ */
+
+ comp->setDataObject("employeeOfTheMonth",emp4);
+
+
+ /**
+ * Stop logging changes
+ */
+
+ cs->endLogging();
+
+
+ XMLHelperPtr xmh = HelperProvider::getXMLHelper(mdg);
+ XMLDocumentPtr doc = xmh->createDocument(comp,"companyNS","company");
+ xmh->save(doc,"ChangeSummarySave-output.xml");
+
+ /**
+ * Have a look in the file and see if you can recognise the changes
+ * above
+ */
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in ChangeSummarySave" << endl;
+ cout << e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.xsd
new file mode 100644
index 0000000000..2c7769167a
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ChangeSummarySave.xsd
@@ -0,0 +1,46 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Makefile.am b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Makefile.am
new file mode 100644
index 0000000000..07107de2c8
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Makefile.am
@@ -0,0 +1,24 @@
+deploydir=$(prefix)/samples/misc/deploy/
+prgbindir=$(deploydir)/bin
+
+prgbin_PROGRAMS = sdo_misc
+prgbin_SCRIPTS =
+EXTRA_DIST = *.xsd *.xml
+deploy_DATA = *.xsd *.xml
+
+AM_CPPFLAGS = $(CPPFLAGS)
+sdo_misc_SOURCES = samples.cpp \
+ChangeSummarySave.cpp \
+ObjectCreation.cpp \
+Query.cpp \
+Substitutes.cpp \
+XSDLoading.cpp
+
+
+noinst_HEADERS = *.h
+
+sdo_misc_LDADD = -L${TUSCANY_SDOCPP}/lib -ltuscany_sdo -lxml2
+
+
+INCLUDES = -I$(top_builddir)/misc \
+ -I${TUSCANY_SDOCPP}/include
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ObjectCreation.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ObjectCreation.cpp
new file mode 100644
index 0000000000..7f570efb76
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/ObjectCreation.cpp
@@ -0,0 +1,249 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "samples.h"
+using namespace std;
+
+void ObjectCreation::sample()
+{
+
+
+ cout << " ********** Sample ObjectCreation **********" << endl;
+
+ try {
+
+
+ /**
+ * Get a data factory. With it we can either create metadata
+ * or load it from an XSD.
+ */
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ /**
+ * Add some Types to the data factory..
+ * The booleans at on addType are:
+ * "isSequenced", "isOpen" "isAbstract" and "isDataType"
+ */
+
+ mdg->addType("myspace","Company");
+
+ mdg->addType("myspace","Department");
+
+ /**
+ * Manager is going to be a sequenced type...
+ */
+
+ mdg->addType("myspace","Manager", true, false);
+
+ mdg->addType("myspace","Employee");
+
+
+ /**
+ * We will make employee and manager sub-types of 'person'
+ */
+
+ mdg->addType("myspace","Person", true, false);
+
+
+ /**
+ * having all the types defined, we can now define the tree
+ * by giving properties to the types.
+ */
+
+ /**
+ * We could use the API passing in name and URI for each
+ * Type , or get the Types back and use them directly.
+ * Here we get back the types to use...
+ */
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& ts = mdg->getType("commonj.sdo","String");
+ const Type& ti = mdg->getType("commonj.sdo","Integer");
+ const Type& tm = mdg->getType("myspace","Manager");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+ const Type& tp = mdg->getType("myspace","Person");
+
+
+ /**
+ * Example 1 - add a property of type String to type company
+ */
+
+ mdg->addPropertyToType(tc,"name",ts);
+
+ /**
+ * Example 2 - add using the name of the company instead of the
+ * type...
+ */
+
+ mdg->addPropertyToType("myspace","Company","address",ts);
+
+ /**
+ * Example 3 - add a many valued property
+ */
+
+ mdg->addPropertyToType(tc,"departments", "myspace","Department",
+ true);
+
+
+ /**
+ * Example 4 - add a reference property
+ */
+
+ mdg->addPropertyToType(tc,"employee of the month", "myspace",
+ "Employee",false, false, false);
+
+
+ /**
+ * Add other department properties...
+ */
+
+ mdg->addPropertyToType(td,"name", ts);
+ mdg->addPropertyToType(td,"id", ti);
+ mdg->addPropertyToType(td,"manager", tm);
+ mdg->addPropertyToType(td,"employees",te,true,false,true);
+
+ /**
+ * Add a name to the person
+ */
+
+ mdg->addPropertyToType(tp,"name", ts);
+
+
+
+ /**
+ * Make employees and mamagers both substypes of person
+ */
+
+ mdg->setBaseType(te,tp);
+ mdg->setBaseType(tm,tp);
+
+ /**
+ * And give them different properties of their own.
+ */
+
+ mdg->addPropertyToType(tm,"officeid", ts);
+ mdg->addPropertyToType(te,"cubelocation", ts);
+
+
+
+ /**
+ * The data structure looks like this:
+
+ * Company
+ * ----name (String)
+ * ----address *String)
+ * ----departments (Department, many valued)
+ * ----employee of the month ( Employee - reference)
+
+ * Person
+ * ----name (String)
+
+ * Employee
+ * ----name (String - inherited from Person)
+ * ----cubelocation (String)
+
+ * Manager
+ * ----name (String - inherited from Person)
+ * ----officeid (String)
+
+ * Department
+ * ----name (String)
+ * ----id (Integer)
+ * ---- manager (Manager)
+ * ---- employees (Employee - many valued)
+
+
+ /**
+ * create an object of type Company using the DataFactory
+ */
+
+ DataObjectPtr dor = mdg->create((Type&)tc);
+
+ /**
+ * Set the company name to Acme
+ */
+
+ dor->setCString("name","Acme");
+
+ /**
+ * Set up the two departments - using the
+ * DataObject createDataObject API
+ */
+
+ DataObjectPtr dep1 = dor->createDataObject("departments");
+ dep1->setCString("name","Development");
+ dep1->setInteger("id",100);
+
+ DataObjectPtr man1 = dep1->createDataObject("manager");
+ man1->setCString("name","Herve Jones");
+
+ DataObjectPtr dep2= dor->createDataObject("departments");
+ dep2->setCString("name","Marketing");
+ dep2->setInteger("id",200);
+
+ DataObjectPtr man2 = dep2->createDataObject("manager");
+ man1->setCString("name","August Phan");
+
+ /**
+ * Give the departments some employees
+ */
+
+ DataObjectPtr emp1 = dep1->createDataObject("employees");
+ emp1->setCString("name","Fred Appleby");
+ emp1->setCString("cubelocation","100-A");
+
+ DataObjectPtr emp2 = dep1->createDataObject("employees");
+ emp2->setCString("name","Jane Bloggs");
+ emp2->setCString("cubelocation","100-B");
+
+ DataObjectPtr emp3 = dep2->createDataObject("employees");
+ emp3->setCString("name","Robin Corbet");
+ emp3->setCString("cubelocation","200-A");
+
+ DataObjectPtr emp4 = dep2->createDataObject("employees");
+ emp4->setCString("name","Martha Denby");
+ emp4->setCString("cubelocation","200-B");
+
+ cout << "Company Name:" << dor->getCString("name") << endl;
+
+ DataObjectList& depts = dor->getList("departments");
+ for (int i=0;i<depts.size();i++)
+ {
+ cout << " Department Name:" << depts[i]->getCString("name") << endl;
+
+ DataObjectList& emps = depts[i]->getList("employees");
+
+ for (int j=0;j<emps.size();j++)
+ {
+ cout << " Employee Name:" << emps[j]->getCString("name") << endl;
+ }
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in ObjectCreation" <<endl;
+ cout << e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+ return;
+}
+
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Query.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Query.cpp
new file mode 100644
index 0000000000..d86b896679
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Query.cpp
@@ -0,0 +1,176 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "samples.h"
+using namespace std;
+
+void Query::sample()
+{
+ cout << " ********** Query sample *******************" << endl;
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ /**
+ * Create some types
+ */
+
+ mdg->addType("myspace","Company");
+ mdg->addType("myspace","Department");
+ mdg->addType("myspace","Employee");
+
+
+ /* Now add the properties to the types...*/
+
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tbool= mdg->getType("commonj.sdo","Boolean");
+ const Type& tint= mdg->getType("commonj.sdo","Integer");
+
+ const Type& tc = mdg->getType("myspace","Company");
+ const Type& td = mdg->getType("myspace","Department");
+ const Type& te = mdg->getType("myspace","Employee");
+
+ /**
+ * The company
+ */
+
+ mdg->addPropertyToType(tc,"name",tstring); // single string name
+ mdg->addPropertyToType(tc,"departments",
+ td,true); // many departments
+ mdg->addPropertyToType(tc,"employee of the month"
+ , te, false, false, false); // reference to employee
+
+ /**
+ * The department
+ */
+
+ mdg->addPropertyToType(td,"name", tstring); // single string name
+ mdg->addPropertyToType(td,"employees",te,
+ true,false,true); // many employees
+
+
+ /**
+ * The employee
+ */
+
+ mdg->addPropertyToType(te,"isFullTime",tbool);
+ mdg->addPropertyToType(te,"employeeNumber",tint);
+ mdg->addPropertyToType(te,"name",tstring);
+
+
+ const Type& tcc = mdg->getType("myspace","Company");
+
+ DataObjectPtr dor = mdg->create((Type&)tcc);
+
+ // The departments
+
+ DataObjectPtr dept = dor->createDataObject("departments");
+ dept->setCString("name","Shipping");
+
+ DataObjectPtr dept2 = dor->createDataObject("departments");
+ dept2->setCString("name","Buying");
+
+ // The employees
+
+ DataObjectPtr emp1 = dept->createDataObject("employees");
+ DataObjectPtr emp2 = dept->createDataObject("employees");
+ DataObjectPtr emp3 = dept->createDataObject("employees");
+ DataObjectPtr emp4 = dept2->createDataObject("employees");
+
+
+ emp1->setBoolean("isFullTime",true);
+ emp1->setInteger("employeeNumber",65443);
+ emp1->setCString("name","Norman");
+
+
+ emp2->setBoolean("isFullTime",false);
+ emp2->setInteger("employeeNumber",64778);
+ emp2->setCString("name","Carl");
+
+ emp3->setBoolean("isFullTime",true);
+ emp3->setInteger("employeeNumber",61990);
+ emp3->setCString("name","Amanda");
+
+ emp4->setBoolean("isFullTime",true);
+ emp4->setInteger("employeeNumber",56789);
+ emp4->setCString("name","Donna");
+
+ dor->setDataObject("employee of the month",emp4); // Donna is referenced.
+
+
+ try {
+
+ // access the first employee of the first department who is not full time
+
+ DataObjectPtr dob1 = dor->getDataObject("departments[1]/employees[isFullTime=false]");
+ cout << "Carl should be the first part timer: " << dob1->getCString("name") << " is." <<endl;
+
+ // get the same employee by index
+
+ DataObjectPtr dob2 = dor->getDataObject("departments[1]/employees[2]");
+ cout << "Carl should be employees[2]:" << dob2->getCString("name") << " is." << endl;
+
+ // use the dot notation to get the same employee
+
+ DataObjectPtr dob3 = dor->getDataObject("departments.0/employees.1");
+ cout << "Carl should be employees.1:" << dob3->getCString("name") << " is." << endl;
+
+ // get the reference...
+
+ DataObjectPtr dob4 = dor->getDataObject("employee of the month");
+ cout << "Donna should be employee of the month:" << dob4->getCString("name") << " is." << endl;
+
+ // And by employee number...
+
+ DataObjectPtr dob5 = dor->getDataObject("departments[2]/employees[employeeNumber=56789]");
+ cout << "Donna should be employee 56789:" << dob5->getCString("name") << " is." << endl;
+
+ // If the query yields no value because the element doesnt exist...
+
+ try
+ {
+ DataObjectPtr dob6 = dor->getDataObject("departments[1]/employees[employeeNumber=56789]");
+ cout << "Did not get the expected exception" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Expected an IndexOutOfRangeException and got " << e.getEClassName() << endl;
+ }
+
+ // If the query yields no value because the path is invalid...
+
+
+ try
+ {
+ DataObjectPtr dob7 = dor->getDataObject("departments[fish]/employees[0]");
+ cout << "Did not get the expected exception" << endl;
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Expected an PathNotFoundException and got " << e.getEClassName() << endl;
+ }
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Unexpected error in Query " << e << endl;
+ }
+
+
+ cout << " ********** End Query Sample **************" << endl;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Substitutes.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Substitutes.cpp
new file mode 100644
index 0000000000..826e7f8aee
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/Substitutes.cpp
@@ -0,0 +1,119 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "samples.h"
+using namespace std;
+
+void Substitutes::sample()
+{
+ cout << " ********** Substitutes sample *************" << endl;
+ try
+ {
+
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+ XSDHelperPtr xsh = HelperProvider::getXSDHelper(mdg);
+ xsh->defineFile("companysubs.xsd");
+
+ /**
+ * The companysubs xsd defines some types including a
+ * type which allows substitutions. The PublicationType is
+ * the base of BookType and MagazineType, and the substitutions
+ * are enabled so that properties can be either.
+ */
+
+ const Type& tstring = mdg->getType("commonj.sdo","String");
+ const Type& tcomp = mdg->getType("companyNS","CompanyType");
+ const Type& book = mdg->getType("companyNS","BookType");
+ const Type& mag = mdg->getType("companyNS","MagazineType");
+ const Type& pub = mdg->getType("companyNS","PublicationType");
+
+
+ /**
+ * Create some data to work with
+ */
+
+ DataObjectPtr comp = mdg->create((Type&)tcomp);
+ comp->setCString("name","Puflet Publishing");
+
+
+ DataObjectPtr book1 = mdg->create(book);
+ book1->setCString("author","Mr P B Writer");
+
+ /**
+ * book has a title property because it inherits from Publication
+ */
+ book1->setCString("title","Nowhere Man");
+
+
+ DataObjectPtr mag1 = mdg->create(mag);
+
+ /**
+ * Magazine has an eidtor, and a title inherited from publication
+ */
+
+ mag1->setCString("editor","Mr B Picky");
+ // inherited from publication
+ mag1->setCString("title","Bionicle Weekly");
+
+
+ DataObjectPtr pub1 = mdg->create(pub);
+ pub1->setCString("title","Noddy In Toyland");
+
+
+ /**
+ * The property "Publication" is defined as substitutable, so
+ * any of the book, magazine or publication should be
+ * acceptable values. When the type is queried, the type
+ * returned should correspond to the current type of the
+ * property...
+ */
+
+ comp->setDataObject("Publication",pub1);
+ const Type& tpub1 = comp->getDataObject("Publication")->getType();
+ cout << "Publication is now of type " << tpub1.getName() << endl;
+
+ comp->setDataObject("Publication",book1);
+ const Type& tpub2 = comp->getDataObject("Publication")->getType();
+ cout << "Publication now is of type " << tpub2.getName() << endl;
+
+ comp->setDataObject("Publication",mag1);
+ const Type& tpub3 = comp->getDataObject("Publication")->getType();
+ cout << "Publication now is of type " << tpub3.getName() << endl;
+
+ /**
+ * As the substitutes have names, they act as a sort of
+ * alias, so we can address Publication as Book or Magazine too
+ */
+
+ comp->setDataObject("Book",book1);
+ const Type& tpub4 = comp->getDataObject("Book")->getType();
+ cout << "Book is of type " << tpub4.getName() << endl;
+
+ comp->setDataObject("Magazine",mag1);
+ const Type& tpub5 = comp->getDataObject("Magazine")->getType();
+ cout << "Magazine is of type " << tpub5.getName() << endl;
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in Substitutes"<< endl;
+ cout<< e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.cpp
new file mode 100644
index 0000000000..f1997d31bf
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.cpp
@@ -0,0 +1,108 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "samples.h"
+using namespace std;
+
+void XSDLoading::sample()
+{
+ int i,j;
+
+ cout << " ********** XSDLoading Sample **************" << endl;
+ try
+ {
+ DataFactoryPtr mdg = DataFactory::getDataFactory();
+
+ /**
+ * Get an XSD helper to load XSD information into the
+ * data factory
+ */
+
+ XSDHelperPtr myXSDHelper = HelperProvider::getXSDHelper(mdg);
+ myXSDHelper->defineFile("XSDLoading.xsd");
+
+ /**
+ * Check if there were any errors. The parse may still
+ * succeed, but errors indicate some elements were not
+ * understood
+ */
+
+ if ((i = myXSDHelper->getErrorCount()) > 0)
+ {
+ cout << "XSD Loading reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = myXSDHelper->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ /**
+ * Use the same data factory to load XML corresponding to
+ * data objects adhering to the previously loaded schema
+ */
+
+ XMLHelperPtr myXMLHelper = HelperProvider::getXMLHelper(mdg);
+
+ XMLDocumentPtr myXMLDocument = myXMLHelper->loadFile("XSDLoading.xml", "companyNS");
+
+ /**
+ * Check if there were any errors. The parse may still
+ * succeed, but errors indicate some elements did not match
+ * the schema, or were malformed.
+ *
+ */
+
+ if ((i = myXMLHelper->getErrorCount()) > 0)
+ {
+ cout << "XML Loading reported some errors:" << endl;
+ for (j=0;j<i;j++)
+ {
+ const char *m = myXMLHelper->getErrorMessage(j);
+ if (m != 0) cout << m;
+ cout << endl;
+ }
+ }
+
+ DataObjectPtr newdob = myXMLDocument->getRootDataObject();
+
+ cout << "Company Name:" << newdob->getCString("name") << endl;
+
+ DataObjectList& depts = newdob->getList("departments");
+ for (int i=0;i<depts.size();i++)
+ {
+ cout << " Department Name:" << depts[i]->getCString("name") << endl;
+
+ DataObjectList& emps = depts[i]->getList("employees");
+
+ for (int j=0;j<emps.size();j++)
+ {
+ cout << " Employee Name:" << emps[j]->getCString("name") << endl;
+ }
+ }
+
+ }
+ catch (SDORuntimeException e)
+ {
+ cout << "Exception in XSD Loading test" << endl;
+ cout << e;
+ }
+ cout << " ********** Sample ends ********************" << endl;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xml b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xml
new file mode 100644
index 0000000000..6253ca34fd
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <!-- This XML has an employee with an SN of nil, which should appear in the SDO as NULL
+ -->
+ <company xmlns="companyNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="MegaCorp" employeeOfTheMonth="#/departments.0/employees.1">
+<departments name="Advanced Technologies" location="NY" number="123">
+<employees>
+<name>Jane Doe</name>
+<SN xsi:nil="true" />
+</employees>
+</departments>
+</company> \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xsd
new file mode 100644
index 0000000000..808e075a2d
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/XSDLoading.xsd
@@ -0,0 +1,45 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<!-- This XSD recasts the properties of employee to elements in order to allow the SN property to be nillable -->
+<xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF"
+sdoxml:propertyType="company:EmployeeType"/> </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:element name="name" type="xsd:string"/>
+ <xsd:element name="SN" type="xsd:ID" nillable="true"/>
+ <xsd:element name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+</xsd:schema>
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/companysubs.xsd b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/companysubs.xsd
new file mode 100644
index 0000000000..124960676b
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/companysubs.xsd
@@ -0,0 +1,61 @@
+
+<!--
+ Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+ <xsd:schema
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:sdo="commonj.sdo"
+ xmlns:sdoxml="commonj.sdo/xml"
+ xmlns:company="companyNS"
+ targetNamespace="companyNS">
+ <xsd:element name="company" type="company:CompanyType"/>
+ <xsd:complexType name="CompanyType">
+ <xsd:sequence>
+ <xsd:element name="departments" type="company:DepartmentType" maxOccurs="unbounded"/>
+ <xsd:element name="Publication" type="company:PublicationType" maxOccurs="1"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="cs" type="sdo:ChangeSummaryType"/>
+ <xsd:attribute name="employeeOfTheMonth" type="xsd:IDREF" sdoxml:propertyType="company:EmployeeType"/>
+ </xsd:complexType>
+ <xsd:complexType name="DepartmentType">
+ <xsd:sequence>
+ <xsd:element name="employees" type="company:EmployeeType" maxOccurs="unbounded"/>
+ </xsd:sequence>
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="location" type="xsd:string"/>
+ <xsd:attribute name="number" type="xsd:int"/>
+ </xsd:complexType>
+ <xsd:complexType name="EmployeeType">
+ <xsd:attribute name="name" type="xsd:string"/>
+ <xsd:attribute name="SN" type="xsd:ID"/>
+ <xsd:attribute name="manager" type="xsd:boolean"/>
+ </xsd:complexType>
+ <xsd:complexType name="BookType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="author" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="MagazineType">
+ <xsd:restriction base="company:PublicationType" />
+ <xsd:element name="editor" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:complexType name="PublicationType">
+ <xsd:element name="title" type="xsd:string" maxOccurs="1"/>
+ </xsd:complexType>
+ <xsd:element name="Book" type="company:BookType" substitutionGroup="Publication" />
+ <xsd:element name="Magazine" type="company:MagazineType" substitutionGroup="company:Publication" />
+ </xsd:schema>
+
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.cpp b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.cpp
new file mode 100644
index 0000000000..1841d4f845
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.cpp
@@ -0,0 +1,34 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+
+#include "samples.h"
+
+/**
+ * C main to run the sample
+ */
+
+int main (int argc, char** argv)
+{
+ ObjectCreation::sample();
+ XSDLoading::sample();
+ ChangeSummarySave::sample();
+ Substitutes::sample();
+ Query::sample();
+ return 0;
+}
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.h b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.h
new file mode 100644
index 0000000000..4d2ddfde79
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/samples/misc/samples.h
@@ -0,0 +1,51 @@
+/*
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Rev$ $Date: 2005/12/22 16:54:14 $ */
+#pragma warning(disable:4786)
+
+#include "commonj/sdo/SDO.h"
+
+
+using namespace commonj::sdo;
+
+
+
+class ObjectCreation {
+ public:
+ static void sample();
+};
+
+class XSDLoading {
+ public:
+ static void sample();
+};
+
+class ChangeSummarySave {
+ public:
+ static void sample();
+};
+
+class Substitutes {
+ public:
+ static void sample();
+};
+
+class Query {
+ public:
+ static void sample();
+}; \ No newline at end of file
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.bat b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.bat
new file mode 100644
index 0000000000..d2f54c6351
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.bat
@@ -0,0 +1,41 @@
+@echo off
+
+@REM Copyright 2006 The Apache Software Foundation or its licensors, as applicable.
+@REM
+@REM Licensed under the Apache License, Version 2.0 (the "License");
+@REM you may not use this file except in compliance with the License.
+@REM You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing, software
+@REM distributed under the License is distributed on an "AS IS" BASIS,
+@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@REM See the License for the specific language governing permissions and
+@REM limitations under the License.
+
+
+
+@setlocal
+
+if "%AXIS2C_HOME%" == "" (
+echo "AXIS2C_HOME not set"
+goto end
+)
+echo using Axis2C: %AXIS2C_HOME%"
+
+if "%TUSCANY_SDOCPP%" == "" (
+echo "TUSCANY_SDOCPP not set"
+set TUSCANY_SDOCPP=%cd%\deploy
+)
+echo using TUSCANY_SDOCPP: %TUSCANY_SDOCPP%
+
+set PATH=%TUSCANY_SDOCPP%\bin;%AXIS2C_HOME%\lib;%PATH%
+
+
+set SCATESTPATH=%cd%\projects\tuscany_sdo\sdo_test\Release
+cd runtime\core\test
+%SCATESTPATH%\sdo_test
+
+:end
+@endlocal
diff --git a/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.sh b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.sh
new file mode 100755
index 0000000000..8e2dd108ce
--- /dev/null
+++ b/sca-cpp/tags/cpp-0.1.incubating-M1-final/sdo/sdotest.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+# Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+APFULLDIR=`pwd`
+export SDO4CPP_HOME="$APFULLDIR"
+if [ x$TUSCANY_SDOCPP = x ]; then
+export TUSCANY_SDOCPP="$SDO4CPP_HOME"
+fi
+
+echo "Using SDO installed at $TUSCANY_SDOCPP"
+
+export LD_LIBRARY_PATH=$TUSCANY_SDOCPP/lib:$LD_LIBRARY_PATH
+cd runtime/core/test
+./tuscany_sdo_test