From eaccbb3bf9672ccdf6422ed6c7582141551b7d66 Mon Sep 17 00:00:00 2001 From: Logneon Date: Fri, 23 Jan 2009 10:30:06 +0000 Subject: [PATCH] CMIS-WS .NET tests git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12874 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../dotnet/CmisWS/Properties/AssemblyInfo.cs | 36 + .../System.Xml.XmlElement.datasource | 10 + .../CmisWS/Properties/NUnit/nunit.core.dll | Bin 0 -> 86016 bytes .../NUnit/nunit.core.extensions.dll | Bin 0 -> 6144 bytes .../NUnit/nunit.core.interfaces.dll | Bin 0 -> 40960 bytes .../Properties/NUnit/nunit.core.tests.dll | Bin 0 -> 118784 bytes .../NUnit/nunit.extensions.tests.dll | Bin 0 -> 7168 bytes .../Properties/NUnit/nunit.fixtures.dll | Bin 0 -> 9728 bytes .../Properties/NUnit/nunit.framework.dll | Bin 0 -> 77824 bytes .../NUnit/nunit.framework.extensions.dll | Bin 0 -> 5120 bytes .../Properties/NUnit/nunit.framework.xml | 5614 +++ .../CmisWS/Properties/NUnit/nunit.mocks.dll | Bin 0 -> 10752 bytes .../CmisWS/Properties/NUnit/nunit.uikit.dll | Bin 0 -> 274432 bytes .../Properties/NUnit/nunit.uikit.tests.dll | Bin 0 -> 40960 bytes .../CmisWS/Properties/NUnit/nunit.util.dll | Bin 0 -> 114688 bytes .../CmisWS/Properties/log4net/log4net.dll | Bin 0 -> 270336 bytes .../CmisWS/Properties/log4net/log4net.xml | 28655 ++++++++++++++++ .../DiscoveryService/DiscoveryService.wsdl | 46 + .../DiscoveryServicePort.wsdl | 1434 + .../DiscoveryService/Reference.cs | 2020 ++ .../DiscoveryService/Reference.svcmap | 30 + ...DiscoveryService.cmisObjectType.datasource | 10 + ...DiscoveryService.cmisObjectType.datasource | 10 + .../DiscoveryService/configuration.svcinfo | 11 + .../DiscoveryService/configuration91.svcinfo | 280 + .../MultiFilingService.wsdl | 94 + .../MultiFilingServicePort.wsdl | 1464 + .../MultiFilingService/Reference.cs | 418 + .../MultiFilingService/Reference.svcmap | 30 + .../MultiFilingService/configuration.svcinfo | 11 + .../configuration91.svcinfo | 280 + .../NavigationService/NavigationService.wsdl | 223 + .../NavigationServicePort.wsdl | 1522 + .../NavigationService/Reference.cs | 2402 ++ .../NavigationService/Reference.svcmap | 30 + ...avigationService.cmisObjectType.datasource | 10 + ...avigationService.cmisObjectType.datasource | 10 + .../NavigationService/configuration.svcinfo | 11 + .../NavigationService/configuration91.svcinfo | 280 + .../ObjectService/ObjectService.wsdl | 526 + .../ObjectService/ObjectServicePort.wsdl | 1684 + .../ObjectService/Reference.cs | 2361 ++ .../ObjectService/Reference.svcmap | 30 + ...ervice.cmisAllowableActionsType.datasource | 10 + ...ctService.cmisContentStreamType.datasource | 10 + ...ts.ObjectService.cmisObjectType.datasource | 10 + ...ervice.cmisAllowableActionsType.datasource | 10 + ...ctService.cmisContentStreamType.datasource | 10 + ...nt.ObjectService.cmisObjectType.datasource | 10 + .../ObjectService/configuration.svcinfo | 11 + .../ObjectService/configuration91.svcinfo | 280 + .../RepositoryService/Reference.cs | 4685 +++ .../RepositoryService/Reference.svcmap | 30 + .../RepositoryService/RepositoryService.wsdl | 154 + .../RepositoryServicePort.wsdl | 1491 + ...ts.RepositoryService.cmisAnyXml.datasource | 10 + ....cmisRepositoryCapabilitiesType.datasource | 10 + ...Service.cmisRepositoryEntryType.datasource | 10 + ...yService.cmisTypeDefinitionType.datasource | 10 + ...nt.RepositoryService.cmisAnyXml.datasource | 10 + ....cmisRepositoryCapabilitiesType.datasource | 10 + ...Service.cmisRepositoryEntryType.datasource | 10 + ...yService.cmisTypeDefinitionType.datasource | 10 + .../RepositoryService/configuration.svcinfo | 11 + .../RepositoryService/configuration91.svcinfo | 280 + .../VersioningService/Reference.cs | 2186 ++ .../VersioningService/Reference.svcmap | 30 + .../VersioningService/VersioningService.wsdl | 235 + .../VersioningServicePort.wsdl | 1534 + ...ersioningService.cmisObjectType.datasource | 10 + ...ersioningService.cmisObjectType.datasource | 10 + .../VersioningService/configuration.svcinfo | 11 + .../VersioningService/configuration91.svcinfo | 280 + .../Source/AbstractCmisServicesHelper.cs | 720 + .../Source/CmisManipulationsStrategy.cs | 10 + .../CmisWS/Source/CmisTypesConverter.cs | 8 + .../Source/DiscoveryServiceClientTest.cs | 36 + .../CmisWS/Source/DocumentCreatorStrategy.cs | 38 + .../CmisWS/Source/FolderCreatorStrategy.cs | 27 + .../Source/MultiFilingServiceClientTest.cs | 42 + .../Source/NavigationServiceClientTest.cs | 173 + ...ionServiceToObjectServiceTypesConverter.cs | 210 + .../CmisWS/Source/ObjectServiceClientTest.cs | 324 + .../Source/RepositoryServiceClientTest.cs | 100 + .../CmisWS/Source/SecurityMessageHeader.cs | 129 + .../SoapRequestHeaderProcessorAttribute.cs | 35 + .../Source/SoapRequestMassagesInspector.cs | 31 + .../Source/VersioninServiceClientTest.cs | 171 + ...ingServiceToObjectServiceTypesConverter.cs | 210 + .../test/dotnet/CmisWS/WcfCmisWSTests.csproj | 271 + source/test/dotnet/CmisWS/WcfCmisWSTests.sln | 20 + source/test/dotnet/CmisWS/WcfCmisWSTests.suo | Bin 0 -> 51712 bytes source/test/dotnet/CmisWS/app.config | 176 + source/test/dotnet/CmisWS/build.bat | 16 + source/test/dotnet/CmisWS/readme.txt | 45 + 95 files changed, 63712 insertions(+) create mode 100644 source/test/dotnet/CmisWS/Properties/AssemblyInfo.cs create mode 100644 source/test/dotnet/CmisWS/Properties/DataSources/System.Xml.XmlElement.datasource create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.extensions.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.interfaces.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.tests.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.extensions.tests.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.fixtures.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.framework.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.framework.extensions.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.framework.xml create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.mocks.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.uikit.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.uikit.tests.dll create mode 100644 source/test/dotnet/CmisWS/Properties/NUnit/nunit.util.dll create mode 100644 source/test/dotnet/CmisWS/Properties/log4net/log4net.dll create mode 100644 source/test/dotnet/CmisWS/Properties/log4net/log4net.xml create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryService.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryServicePort.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.cs create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.svcmap create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfCmisWSTests.DiscoveryService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfTestClient.DiscoveryService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration91.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingService.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingServicePort.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.cs create mode 100644 source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.svcmap create mode 100644 source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration91.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/NavigationService.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/NavigationServicePort.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/Reference.cs create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/Reference.svcmap create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/WcfCmisWSTests.NavigationService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/WcfTestClient.NavigationService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/configuration.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/NavigationService/configuration91.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/ObjectService.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/ObjectServicePort.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/Reference.cs create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/Reference.svcmap create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisAllowableActionsType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisContentStreamType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisAllowableActionsType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisContentStreamType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/configuration.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/ObjectService/configuration91.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.cs create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.svcmap create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryService.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryServicePort.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisAnyXml.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryCapabilitiesType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryEntryType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisTypeDefinitionType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisAnyXml.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryEntryType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisTypeDefinitionType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/configuration.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/RepositoryService/configuration91.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/Reference.cs create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/Reference.svcmap create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/VersioningService.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/VersioningServicePort.wsdl create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/WcfCmisWSTests.VersioningService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/WcfTestClient.VersioningService.cmisObjectType.datasource create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/configuration.svcinfo create mode 100644 source/test/dotnet/CmisWS/Service References/VersioningService/configuration91.svcinfo create mode 100644 source/test/dotnet/CmisWS/Source/AbstractCmisServicesHelper.cs create mode 100644 source/test/dotnet/CmisWS/Source/CmisManipulationsStrategy.cs create mode 100644 source/test/dotnet/CmisWS/Source/CmisTypesConverter.cs create mode 100644 source/test/dotnet/CmisWS/Source/DiscoveryServiceClientTest.cs create mode 100644 source/test/dotnet/CmisWS/Source/DocumentCreatorStrategy.cs create mode 100644 source/test/dotnet/CmisWS/Source/FolderCreatorStrategy.cs create mode 100644 source/test/dotnet/CmisWS/Source/MultiFilingServiceClientTest.cs create mode 100644 source/test/dotnet/CmisWS/Source/NavigationServiceClientTest.cs create mode 100644 source/test/dotnet/CmisWS/Source/NavigationServiceToObjectServiceTypesConverter.cs create mode 100644 source/test/dotnet/CmisWS/Source/ObjectServiceClientTest.cs create mode 100644 source/test/dotnet/CmisWS/Source/RepositoryServiceClientTest.cs create mode 100644 source/test/dotnet/CmisWS/Source/SecurityMessageHeader.cs create mode 100644 source/test/dotnet/CmisWS/Source/SoapRequestHeaderProcessorAttribute.cs create mode 100644 source/test/dotnet/CmisWS/Source/SoapRequestMassagesInspector.cs create mode 100644 source/test/dotnet/CmisWS/Source/VersioninServiceClientTest.cs create mode 100644 source/test/dotnet/CmisWS/Source/VersioningServiceToObjectServiceTypesConverter.cs create mode 100644 source/test/dotnet/CmisWS/WcfCmisWSTests.csproj create mode 100644 source/test/dotnet/CmisWS/WcfCmisWSTests.sln create mode 100644 source/test/dotnet/CmisWS/WcfCmisWSTests.suo create mode 100644 source/test/dotnet/CmisWS/app.config create mode 100644 source/test/dotnet/CmisWS/build.bat create mode 100644 source/test/dotnet/CmisWS/readme.txt diff --git a/source/test/dotnet/CmisWS/Properties/AssemblyInfo.cs b/source/test/dotnet/CmisWS/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..201bfc1e13 --- /dev/null +++ b/source/test/dotnet/CmisWS/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WcfCmisWSTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("WcfCmisWSTests")] +[assembly: AssemblyCopyright("Copyright © 2008")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2afbaa7c-3738-498d-9553-5baf710e38d5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/test/dotnet/CmisWS/Properties/DataSources/System.Xml.XmlElement.datasource b/source/test/dotnet/CmisWS/Properties/DataSources/System.Xml.XmlElement.datasource new file mode 100644 index 0000000000..43fddb9501 --- /dev/null +++ b/source/test/dotnet/CmisWS/Properties/DataSources/System.Xml.XmlElement.datasource @@ -0,0 +1,10 @@ + + + + System.Xml.XmlElement, System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.dll b/source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.dll new file mode 100644 index 0000000000000000000000000000000000000000..652c94ef374eb827d984183c4bf81a5e953e5db9 GIT binary patch literal 86016 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%0Db?*FL3w&+@EA>` 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 PweqV__O*`xw+Q?TAJ6*- literal 0 HcmV?d00001 diff --git a/source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.interfaces.dll b/source/test/dotnet/CmisWS/Properties/NUnit/nunit.core.interfaces.dll new file mode 100644 index 0000000000000000000000000000000000000000..37cf6091567d3999abb8a458fa669a8c7c96aede GIT binary patch literal 40960 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

&r`ZsadD>IPK^SvCEa$4TTHxbhLs(z@>UAk~L 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 D#iD3( literal 0 HcmV?d00001 diff --git a/source/test/dotnet/CmisWS/Properties/NUnit/nunit.framework.extensions.dll b/source/test/dotnet/CmisWS/Properties/NUnit/nunit.framework.extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..871d004db3bdd22098f35663d12b78cd9659eacb GIT binary patch literal 5120 zcmeHKeQX>@6@PnYyLM8$ElI7UX`8WZsNLAh`QpS4wB;`6II$f&?wvmhG&t+?_`G;; z_t@Qw?Lv|N=!aS*DuqOfP%1(At|A50pr$FLRay~&Xyc-`X(R%PsGtO4zS5AQK={2m zpM7x*Dx&{@GUxftyf<&&y!YnK&badvU!Win6`@|bM05x(mx#iD50e4}W%q+BB{l7?+Nz8I9k&Dz4WMa!0iNIOGPFE3wIGo!kD1JPzJNWXt> zUZ9u~tg72plwAZmk6f)CekrKoiK>jh?cfTbe`#zw!vNUvTSs^*7hfkSvQb zbsJF!cOpdJesyv>XVkp>2?1T^~R#C=sId1!S(vaYbR<0#r;F1<`9*ql}parCa1e zTfkbd`$+KI?sXR}ckMfC&-vGMjqj{^qU)~j96aCuryUPWpUGBS|NPr~j!(V#y^VkT z>w^cLI&q*ObYbOdo1S^>-3_t!+m;@z{G~o{^Q$NS{L_4Pc55XwROqwnwISi zPbUui;-RB2zP@5gZ$5LhuI}gV?&P}1x9&aCIGlX)Y6!(|(IoFm5j@TL zUrUv6hds&{je7E3qB}dCp{ynECOd1JzCMgEpd54DQ61-8+Memyo<3w*6qgxk_)#Be zG??`zb@j4%>#X>OS#e5xNyoL!K}t+`zD(2Hq@R{TV<@}g&^fMp-kc@z+(hM>Zw{K4=@!J zGkOdcTdO`aL80>OrLPBG|K`$7oA&4f#;#Z1OjGGI_utpIyy^6#fs)c9p=qTMEDhF@ zA}W{@07skr3JwYtO%m;bo)S)B(D6jH5$UbY@$vS>&#&o7@4R;1Z+;LtwfM}Z!-t>T ze)rCzzwdtH*#_49Z|o~i*(XjN`_P5fi@zSB=YnlP z} ziN?O^;2X!D-m&)8s+IeTVd@RhLWDytVWYh z&nBO!jn#>8C=_l0G>h1XfdeB&x8qoNW-MA*u1T~bn>^94i!M1fYPzHKqSH){7}63k zUG$7O^&)D?acPREF8UnTv3<|kzL35UuNxNKBiQ(ih`ENDf*6b!aXuTKh)WNtB!_f- zur(@HryZ{*jmmNd-*Hn!H)(XEu77y;FPAo+J&IdMT~MXk%sc2-CVK*v{jQPea_kM` zNtxj@(=*~aV;&-O0q>c7so=X^%)L*9kB8f0S)GPy=e{^nst*;*U-}@4$h?VH z$^YL7@a;~tjA-(5A5{`kXaPRU@!Rp<2r9lN`EqYj6S{r4e+PgYD2`qmZJ{pEZNOIa zx%{x`5C7mJU!-o<;@S3NYE(VoFS~P@-GZt?t3fXGn0Tj2=(K5=95t&3S_pTu3ke&y zyQSU`CPr;F&adf1_~$@_O+KVd@KXzD+NESd@H_WwqCt)UHL15(4EoZPQEN=VBLkFF z`n#wX8u`VdLk2fAxb^Ttn_Z&?k{(_kymkh1bG8Y{hH%*DWcwiNLV8Xn482XLYf#yq zZFnVVDgwTewPA}@V3AGPS$l?|D`)ALvTYPPB#pxc37PyV9=Jo$!7pH<9oj+Y-wcVA z(#)P`@Csw=Q#69Pgjdyko}gNA>+k^ztN4YfVW!s%UJUbi|19W`pt~{O0VT0=IpX`D z=xf6K_8G4{^!uShz<)_&Gz$GLupXRF^pk2`iIvy}mg|9(qsF6Z{c+4Q!H=rZK8(4j zHoWxEZhz1Ag=YN?Lt8i2PfcGD_f7U!Lvr=W#w>E$?FlMDG7gamV|p^Qx- + + + nunit.framework + + + +

+ EmptyStringConstraint tests whether a string is empty. + + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + The Constraint class is the base of all built-in or + user-defined constraints in NUnit. It provides the operator + overloads used to combine constraints. + + + + + Static UnsetObject used to detect derived constraints + failing to set the actual value. + + + + + If true, all string comparisons will ignore case + + + + + If true, strings in error messages will be clipped + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + If non-zero, equality comparisons within the specified + tolerance will succeed. + + + + + IComparer object used in comparisons for some constraints. + + + + + The actual value being tested against a constraint + + + + + Flag the constraint to use a tolerance when determining equality. + Currently only used for doubles and floats. + + Tolerance to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the constraint and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Class used to detect any derived constraints + that fail to set the actual value in their + Matches override. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ConstraintBuilder is used to resolve the Not and All properties, + which serve as prefix operators for constraints. With the addition + of an operand stack, And and Or could be supported, but we have + left them out in favor of a simpler, more type-safe implementation. + Use the & and | operator overloads to combine constraints. + + + + + Implicitly convert ConstraintBuilder to an actual Constraint + at the point where the syntax demands it. + + + + + + + Resolves the chain of constraints using an + EqualConstraint as base. + + + + + Resolves the chain of constraints using a + SameAsConstraint as base. + + + + + Resolves the chain of constraints using a + LessThanConstraint as base. + + + + + Resolves the chain of constraints using a + GreaterThanConstraint as base. + + + + + Resolves the chain of constraints using a + LessThanOrEqualConstraint as base. + + + + + Resolves the chain of constraints using a + LessThanOrEqualConstraint as base. + + + + + Resolves the chain of constraints using a + GreaterThanOrEqualConstraint as base. + + + + + Resolves the chain of constraints using a + GreaterThanOrEqualConstraint as base. + + + + + Resolves the chain of constraints using an + ExactTypeConstraint as base. + + + + + Resolves the chain of constraints using an + InstanceOfTypeConstraint as base. + + + + + Resolves the chain of constraints using an + AssignableFromConstraint as base. + + + + + Resolves the chain of constraints using a + ContainsConstraint as base. This constraint + will, in turn, make use of the appropriate + second-level constraint, depending on the + type of the actual argument. + + + + + Resolves the chain of constraints using a + CollectionContainsConstraint as base. + + The expected object + + + + Resolves the chain of constraints using a + StartsWithConstraint as base. + + + + + Resolves the chain of constraints using a + StringEndingConstraint as base. + + + + + Resolves the chain of constraints using a + StringMatchingConstraint as base. + + + + + Resolves the chain of constraints using a + CollectionEquivalentConstraint as base. + + + + + Resolves the chain of constraints using a + CollectionContainingConstraint as base. + + + + + Resolves the chain of constraints using a + CollectionSubsetConstraint as base. + + + + + Resolves the chain of constraints using a + PropertyConstraint as base + + + + + Resolves the chain of constraints using a + PropertyCOnstraint on Length as base + + + + + + + Resolves the chain of constraints using a + PropertyCOnstraint on Length as base + + + + + + + Modifies the ConstraintBuilder by pushing a Prop operator on the + ops stack and the name of the property on the opnds stack. + + + + + + + Resolve a constraint that has been recognized by applying + any pending operators and returning the resulting Constraint. + + A constraint that incorporates all pending operators + + + + Resolves the chain of constraints using + EqualConstraint(null) as base. + + + + + Resolves the chain of constraints using + EqualConstraint(true) as base. + + + + + Resolves the chain of constraints using + EqualConstraint(false) as base. + + + + + Resolves the chain of constraints using + Is.NaN as base. + + + + + Resolves the chain of constraints using + Is.Empty as base. + + + + + Resolves the chain of constraints using + Is.Unique as base. + + + + + Modifies the ConstraintBuilder by pushing a Not operator on the stack. + + + + + Modifies the ConstraintBuilder by pushing a Not operator on the stack. + + + + + Modifies the ConstraintBuilder by pushing an All operator on the stack. + + + + + Modifies the ConstraintBuilder by pushing a Some operator on the stack. + + + + + Modifies the constraint builder by pushing All and Not operators on the stack + + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + CollectionTally counts (tallies) the number of + occurences of each object in one or more enuerations. + + + + + Construct a CollectionTally object from a collection + + + + + + Remove the counts for a collection from the tally, + so long as their are sufficient items to remove. + The tallies are not permitted to become negative. + + The collection to remove + True if there were enough items to remove, otherwise false + + + + Test whether all the counts are equal to a given value + + The value to be looked for + True if all counts are equal to the value, otherwise false + + + + Get the count of the number of times an object is present in the tally + + + + + EmptyCollectionConstraint tests whether a colletion is empty. + + + + + Check that the collection is empty + + + + + + + Write the constraint description to a MessageWriter + + + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + Check that all items are unique. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Write a descripton of the constraint to a MessageWriter + + + + + + CollectionEquivalentCOnstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Write description of this constraint + + The MessageWriter to write to + + + + Helper method to compare two arrays + + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual collections or arrays. If both are identical, the value is + only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Abstract base class used for prefixes + + + + + The base constraint + + + + + Construct given a base constraint + + + + + + Set all modifiers applied to the prefix into + the base constraint before matching + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + Construct a TypeConstraint for a given Type + + + + + + Write the actual value for a failing constraint test to a + MessageWriter. TypeCOnstraints override this method to write + the name of the type. + + The writer on which the actual value is displayed + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + + + + + Test that an object is of the exact type specified + + + + + + + Write the description of this constraint to a MessageWriter + + + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + + + + + Test whether an object is of the specified type or a derived type + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Test whether an object can be assigned from the specified type + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + Abstract base class for constraints that compare values to + determine if one is greater than, equal to or less than + the other. + + + + + The value against which a comparison is to be made + + + + + If true, less than returns success + + + + + if true, equal returns success + + + + + if true, greater than returns success + + + + + The predicate used as a part of the description + + + + + Initializes a new instance of the class. + + The value against which to make a comparison. + if set to true less succeeds. + if set to true equal succeeds. + if set to true greater succeeds. + String used in describing the constraint. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is less than the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + Initializes a new instance of the class. + + The expected value. + + + + The Numerics class contains common operations on numeric values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the value + referred to by tolerance is null, this method may set it to a default. + + The expected value + The actual value + A reference to the numeric tolerance in effect + True if the values are equal + + + + Compare two numeric values, performing the usual numeric conversions. + + The expected value + The actual value + + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Summary description for PropertyConstraint. + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + BinaryOperation is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryOperation from two other constraints + + The first constraint + The second constraint + + + + AndConstraint succeeds only if both members succeed. + + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + The Is class is a helper class with properties and methods + that supply a number of constraints used in Asserts. + + + + + Is.Null returns a static constraint that tests for null + + + + + Is.True returns a static constraint that tests whether a value is true + + + + + Is.False returns a static constraint that tests whether a value is false + + + + + Is.NaN returns a static constraint that tests whether a value is an NaN + + + + + Is.Empty returns a static constraint that tests whether a string or collection is empty + + + + + Is.Unique returns a static constraint that tests whether a collection contains all unque items. + + + + + Is.EqualTo returns a constraint that tests whether the + actual value equals the supplied argument + + + + + + + Is.SameAs returns a constraint that tests whether the + actual value is the same object as the supplied argument. + + + + + + + Is.GreaterThan returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Is.GreaterThanOrEqualTo returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Is.AtLeast is a synonym for Is.GreaterThanOrEqualTo + + + + + Is.LessThan returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Is.LessThanOrEqualTo returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Is.AtMost is a synonym for Is.LessThanOrEqualTo + + + + + Is.TypeOf returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Is.InstanceOfType returns a constraint that tests whether + the actual value is of the type supplied as an argument + or a derived type. + + + + + Is.AssignableFrom returns a constraint that tests whether + the actual value is assignable from the type supplied as + an argument. + + + + + + + Is.EquivalentTo returns a constraint that tests whether + the actual value is a collection containing the same + elements as the collection supplied as an arument + + + + + Is.SubsetOf returns a constraint that tests whether + the actual value is a subset of the collection + supplied as an arument + + + + + Is.Not returns a ConstraintBuilder that negates + the constraint that follows it. + + + + + Is.All returns a ConstraintBuilder, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. This property is + a synonym for Has.AllItems. + + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + The Text class is a helper class with properties and methods + that supply a number of constraints used with strings. + + + + + Contains returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + DoesNotContain returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + StartsWith returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + DoesNotStartWith returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + EndsWith returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + DoesNotEndWith returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Matches returns a constraint that succeeds if the actual + value matches the pattern supplied as an argument. + + + + + + + DoesNotMatch returns a constraint that failss if the actual + value matches the pattern supplied as an argument. + + + + + + + Text.All returns a ConstraintBuilder, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the values of a property + + The collection of property values + + + + + Summary description for HasNoPrefixB. + + + + + Returns a new ConstraintBuilder, which will apply the + following constraint to a named property of the object + being tested. + + The name of the property + + + + Returns a new PropertyConstraint checking for the + existence of a particular property value. + + The name of the property to look for + The expected value of the property + + + + Returns a new PropertyConstraint for the Length property + + + + + + + Returns a new PropertyConstraint or the Count property + + + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + The expected object + + + + Has.No returns a ConstraintBuilder that negates + the constraint that follows it. + + + + + Has.AllItems returns a ConstraintBuilder, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Has.Some returns a ConstraintBuilder, which will apply + the following constraint to all members of a collection, + succeeding if any of them succeed. It is a synonym + for Has.Item. + + + + + Has.None returns a ConstraintBuilder, which will apply + the following constraint to all members of a collection, + succeeding only if none of them succeed. + + + + + Nested class that allows us to restrict the number + of key words that may appear after Has.No. + + + + + Return a ConstraintBuilder conditioned to apply + the following constraint to a property. + + The property name + A ConstraintBuilder + + + + Return a Constraint that succeeds if the expected object is + not contained in a collection. + + The expected object + A Constraint + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display if the condition is true + Arguments to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display if the condition is true + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to be displayed when the object is null + Arguments to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to be displayed when the object is null + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to be displayed when the object is not null + Arguments to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to be displayed when the object is not null + + + + Verifies that the object that is passed in is equal to null + If the object is not null null then an + is thrown. + + The object that is to be tested + + + + Verifies that the double is passed is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to be displayed when the object is not null + Arguments to be used in formatting the message + + + + Verifies that the double is passed is an NaN value. + If the object is not NaN then an + is thrown. + + The object that is to be tested + The message to be displayed when the object is not null + + + + Verifies that the double is passed is an NaN value. + If the object is not NaN then an + is thrown. + + The object that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Emtpy + + The string to be tested + The message to be displayed on failure + + + + Assert that a string is empty - that is equal to string.Emtpy + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Emtpy + + The string to be tested + The message to be displayed on failure + + + + Assert that a string is empty - that is equal to string.Emtpy + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The messge to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The messge to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + A message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + A message to display in case of failure + An array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + A message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + A message to display in case of failure + An array of objects to be used in formatting the message + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + + + + Verifies that two ints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + + + + Verifies that two longs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two uints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that two uints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + + + + Verifies that two uints are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two ulongs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that two ulongs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + + + + Verifies that two ulongs are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that two decimal are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message that will be displayed on failure + + + + Verifies that two decimals are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equals then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equals then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message that will be displayed on failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equals then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two floats are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equals then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message displayed upon failure + Arguments to be used in formatting the message + + + + Verifies that two floats are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equals then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message displayed upon failure + + + + Verifies that two floats are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equals then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. All + non-numeric types are compared by using the Equals method. + Arrays are compared by comparing each element using the same rules. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display if objects are not equal + Arguments to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. All + non-numeric types are compared by using the Equals method. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display if objects are not equal + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. All + non-numeric types are compared by using the Equals method. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two objects are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two objects are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two ints are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two ints are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two ints are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two longss are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two longs are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two longs are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two uints are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two uints are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two uints are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two ulongs are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two ulongs are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two ulong are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two decimals are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two decimals are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two decimals are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two floats are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two floats are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two floats are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two doubles are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two doubles are not equal. If they are equal + an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two doubles are not equal. If they are equal + an is thrown. + + The expected object + The actual object + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are not the same object. + Arguments to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to be displayed when the object is null + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to be displayed when the two objects are the same object. + Arguments to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to be displayed when the objects are the same + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + NOTE: The use of asserters for extending NUnit has + now been replaced by the use of constraints. This + method is marked obsolete. + + Test the condition asserted by an asserter and throw + an assertion exception using provided message on failure. + + An object that implements IAsserter + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeedingt if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeedingt if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater or equal to than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater or equal to than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater or equal to than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than or equal to the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message that will be displayed on failure + + + + Verifies that the first value is greater than the second + value. If they are not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message that will be displayed on failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Gets the number of assertions executed so far and + resets the counter to zero. + + + + + Enumeration indicating how the expected message parameter is to be used + + + + Expect an exact match + + + Expect a message containing the parameter string + + + Match the regular expression provided as a parameter + + + + ExpectedExceptionAttribute + + + + + + Constructor for a non-specific exception + + + + + Constructor for a given type of exception + + The type of the expected exception + + + + Constructor for a given exception name + + The full name of the expected exception + + + + Constructor for a given type of exception and expected message text + + The type of the expected exception + The expected message text + + + + Constructor for a given exception name and expected message text + + The full name of the expected exception + The expected messge text + + + + Gets or sets the expected exception type + + + + + Gets or sets the full Type name of the expected exception + + + + + Gets or sets the expected message text + + + + + Gets or sets the user message displayed in case of failure + + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets the name of a method to be used as an exception handler + + + + + A set of Assert methods operationg on one or more collections + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + ICollection of objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + ICollection of objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + ICollection of objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + ICollection of objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + ICollection of objects to be considered + The message that will be displayed on failure + + + + Asserts that all items contained in collection are not equal to null. + + ICollection of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + ICollection of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + ICollection of objects to be considered + The message that will be displayed on failure + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + ICollection of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The IComparer to use in comparing objects from each ICollection + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The IComparer to use in comparing objects from each ICollection + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The IComparer to use in comparing objects from each ICollection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The IComparer to use in comparing objects from each ICollection + + + + Asserts that expected and actual are not exactly equal. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The IComparer to use in comparing objects from each ICollection + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The IComparer to use in comparing objects from each ICollection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not equivalent. + + The first ICollection of objects to be considered + The second ICollection of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + ICollection of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + ICollection of objects to be considered + Object to be found within collection + The message that will be displayed on failure + + + + Asserts that collection contains actual as an item. + + ICollection of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + ICollection of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + ICollection of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + + + + Asserts that collection does not contain actual as an item. + + ICollection of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is not a subject of subset. + + The ICollection superset to be considered + The ICollection subset to be considered + + + + Asserts that superset is not a subject of subset. + + The ICollection superset to be considered + The ICollection subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is not a subject of subset. + + The ICollection superset to be considered + The ICollection subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is a subset of subset. + + The ICollection superset to be considered + The ICollection subset to be considered + + + + Asserts that superset is a subset of subset. + + The ICollection superset to be considered + The ICollection subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is a subset of subset. + + The ICollection superset to be considered + The ICollection subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing ICollection + + + + NOTE: The use of asserters for extending NUnit has + now been replaced by the use of constraints. This + class is marked obsolete. + + AbstractAsserter is the base class for all asserters. + Asserters encapsulate a condition test and generation + of an AssertionException with a tailored message. They + are used by the Assert class as helper objects. + + User-defined asserters may be passed to the + Assert.DoAssert method in order to implement + extended asserts. + + + + + NOTE: The use of asserters for extending NUnit has + now been replaced by the use of constraints. This + interface is marked obsolete. + + The interface implemented by an asserter. Asserters + encapsulate a condition test and generation of an + AssertionException with a tailored message. They + are used by the Assert class as helper objects. + + User-defined asserters may be passed to the + Assert.DoAssert method in order to implement + extended asserts. + + + + + Test the condition for the assertion. + + True if the test succeeds + + + + Return the message giving the failure reason. + The return value is unspecified if no failure + has occured. + + + + + The user-defined message for this asserter. + + + + + Arguments to use in formatting the user-defined message. + + + + + Our failure message object, initialized as needed + + + + + Constructs an AbstractAsserter + + The message issued upon failure + Arguments to be used in formatting the message + + + + Test method to be implemented by derived types. + Default always succeeds. + + True if the test succeeds + + + + AssertionFailureMessage object used internally + + + + + Message related to a failure. If no failure has + occured, the result is unspecified. + + + + + The Assertion class is obsolete and has been + replaced by the Assert class. + + + + + Asserts that a condition is true. If it isn't it throws + an . + + The message to display is the condition + is false + The evaluated condition + + + + Asserts that a condition is true. If it isn't it throws + an . + + The evaluated condition + + + + /// Asserts that two doubles are equal concerning a delta. If the + expected value is infinity then the delta value is ignored. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + /// Asserts that two singles are equal concerning a delta. If the + expected value is infinity then the delta value is ignored. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + Asserts that two objects are equal. If they are not + an is thrown. + + + Asserts that two ints are equal. If they are not + an is thrown. + + + Asserts that two ints are equal. If they are not + an is thrown. + + + Asserts that two doubles are equal concerning a delta. + If the expected value is infinity then the delta value is ignored. + + + + Asserts that two floats are equal concerning a delta. + If the expected value is infinity then the delta value is ignored. + + + + + Asserts that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. Numeric + types are compared via string comparision on their contents to + avoid problems comparing values between different types. All + non-numeric types are compared by using the Equals method. + If they are not equal an is thrown. + + + + Asserts that an object isn't null. + + + Asserts that an object isn't null. + + + Asserts that an object is null. + + + Asserts that an object is null. + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + + + Asserts that two objects refer to the same object. + If they are not an is thrown. + + + + Fails a test with no message. + + + Fails a test with the given message. + + + + Thrown when an assertion failed. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + AssertionFailureMessage encapsulates a failure message + issued as a result of an Assert failure. + + + + + Number of characters before a highlighted position before + clipping will occur. Clipped text is replaced with an + elipsis "..." + + + + + Number of characters after a highlighted position before + clipping will occur. Clipped text is replaced with an + elipsis "..." + + + + + Prefix used to start an expected value line. + Must be same length as actualPrefix. + + + + + Prefix used to start an actual value line. + Must be same length as expectedPrefix. + + + + + Construct an AssertionFailureMessage with a message + and optional arguments. + + + + + + + Construct an empty AssertionFailureMessage + + + + + Add an expected value line to the message containing + the text provided as an argument. + + Text describing what was expected. + + + + Add an actual value line to the message containing + the text provided as an argument. + + Text describing the actual value. + + + + Add an expected value line to the message containing + a string representation of the object provided. + + An object representing the expected value + + + + Add an expected value line to the message containing a double + and the tolerance used in making the comparison. + + The expected value + The tolerance specified in the Assert + + + + Add an actual value line to the message containing + a string representation of the object provided. + + An object representing what was actually found + + + + Display two lines that communicate the expected value, and the actual value + + The expected value + The actual value found + + + + Display two lines that communicate the expected value, the actual value and + the tolerance used in comparing two doubles. + + The expected value + The actual value found + The tolerance specified in the Assert + + + + Draws a marker under the expected/actual strings that highlights + where in the string a mismatch occurred. + + The position of the mismatch + + + + Reports whether the string lengths are the same or different, and + what the string lengths are. + + The expected string + The actual string value + + + + Called to create additional message lines when two objects have been + found to be unequal. If the inputs are strings, a special message is + rendered that can help track down where the strings are different, + based on differences in length, or differences in content. + + If the inputs are not strings, the ToString method of the objects + is used to show what is different about them. + + The expected value + The actual value + True if a case-insensitive comparison is being performed + + + + Called to create additional message lines when two doubles have been + found to be unequal, within the specified tolerance. + + + + + Constructs a message that can be displayed when the content of two + strings are different, but the string lengths are the same. The + message will clip the strings to a reasonable length, centered + around the first position where they are mismatched, and draw + a line marking the position of the difference to make comparison + quicker. + + The expected string value + The actual string value + True if a case-insensitive comparison is being performed + + + + Display a standard message showing the differences found between + two arrays that were expected to be equal. + + The expected array value + The actual array value + The index at which a difference was found + + + + Display a standard message showing the differences found between + two collections that were expected to be equal. + + The expected collection value + The actual collection value + The index at which a difference was found + + + + Get an array of indices representing the point in a collection or + array corresponding to a single int index into the collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Displays elements from a list on a line + + Text to prefix the line with + The list of items to display + The index in the list of the first element to display + The maximum number of elements to display + + + + Formats an object for display in a message line + + The object to be displayed + + + + + Tests two objects to determine if they are strings. + + + + + + + + Renders up to M characters before, and up to N characters after + the specified index position. If leading or trailing text is + clipped, and elipses "..." is added where the missing text would + be. + + Clips strings to limit previous or post newline characters, + since these mess up the comparison + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + + + + -1 if no mismatch found, or the index where mismatch found + + + + Turns CR, LF, or TAB into visual indicator to preserve visual marker + position. This is done by replacing the '\r' into '\\' and 'r' + characters, and the '\n' into '\\' and 'n' characters, and '\t' into + '\\' and 't' characters. + + Thus the single character becomes two characters for display. + + + + + + + Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + The name of the category + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple itemss may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-deliminted list of platforms + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for a modifier + + The modifier. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a collection or + array corresponding to a single int index into the collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + Summary description for SetCultureAttribute. + + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + The property name + + + + + The property value + + + + + Construct a PropertyAttribute with a name and value + + The name of the property + The property value + + + + Constructor for use by inherited classes that use the + name of the type as the property name. + + + + + Gets the property name + + + + + Gets the property value + + + + + Construct given the name of a culture + + + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Write the text for a modifier. + + The modifier. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The constraint for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + Basic Asserts on strings. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The expected expression + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The expected expression + The actual string + The message to display in case of failure + + + + Asserts that a string matches an expected regular expression pattern. + + The expected expression + The actual string + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter names for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to + . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to . + + The evaluated condition + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + Summary description for FileAssert. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if objects are not equal + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the Streams are the same. + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. + + + + + Default tolerance for floating point equality + + + + + Obsolete class, formerly used to identify tests through + inheritance. Avoid using this class for new tests. + + + + + Method called immediately before running the test. + + + + + Method Called immediately after running the test. It is + guaranteed to be called, even if an exception is thrown. + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + SetUpFixtureAttribute is used to identify a SetUpFixture + + + + + Attribute used to mark a static (shared in VB) property + that returns a list of tests. + + + + + Attribute used to identify a method that is called + immediately after each test is run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Descriptive text for this test + + + + + [TestFixture] + public class ExampleClass + {} + + + + + Descriptive text for this fixture + + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute without giving a reason + for ignoring the test. + + + + + Constructs the attribute giving a reason for ignoring the test + + The reason for ignoring the test + + + + The reason for ignoring a test + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + The reason test is marked explicit + + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct the attribute + + Text describing the test + + + + Gets the test description + + + + + Interface implemented by a user fixture in order to + validate any expected exceptions. It is only called + for test methods marked with the ExpectedException + attribute. + + + + + Method to handle an expected exception + + The exception to be handled + + + diff --git a/source/test/dotnet/CmisWS/Properties/NUnit/nunit.mocks.dll b/source/test/dotnet/CmisWS/Properties/NUnit/nunit.mocks.dll new file mode 100644 index 0000000000000000000000000000000000000000..1d624c9effbebf47691572eb9c54770eba667011 GIT binary patch literal 10752 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 literal 0 HcmV?d00001 diff --git a/source/test/dotnet/CmisWS/Properties/NUnit/nunit.uikit.dll b/source/test/dotnet/CmisWS/Properties/NUnit/nunit.uikit.dll new file mode 100644 index 0000000000000000000000000000000000000000..265e45c095f99d5dd7aa2ab102a6b665472021a9 GIT binary patch literal 274432 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 z zH%aE1Ud>G}6VQ>AERho4T;9r>(Q1kEC!EGH{V9B$17jYT8gH2Uze#$JX19_xW`xvJ zB6LD6iIjk~)__sU6VsO|U!3Khpbc5ECF=<9{5ZwBbUjZ=akOCnKv=VjI#p_kMY_0> zLd5H6%7Lvsp<(>Mb7a!rk!dmJ*;?ilS7eA|j@>mv&WDeG&$u(xKX;kut;)AYXV}~? zI*ayFp6R|>RLi+)8xW^tBTlUE$hqNBo+bz%-T7xcp(P8+=jfWbU9yCdPGEdgbc`%e z=HpV^&aqP~zL?Tfi|b;DN4|HPMRA0Eb2-OeRxxjaUt>qJ#OyiM+MkeEt~Wj-OZ2-Dci9W#Njy2jLx;_c9DraGb-aWW}wJ0y}sm4V0m?{0pX zA|`WlRpF$$rCwK2_mf+2> zKcGWsWM#!(cah5<`y>~is^)=bXjh%%!_O|sbLEs2bsy&{n&I*c^Ljn*8D(BqX=b{K za2Q0(_eGWCah~TcF6chVeZI@jzPr!!V4~@fmER}7Uw+S?d3|~~vz$e~Xhs#5%y1UE z&v$xJXm_6;#}wz699Df71SM)hiM!bQ2c&AkupIe!R9=1MlB||DewX`?+c*7w*PR{L z?s@ueTc3F*``JgHo7ipOzd!pj>7y09UikK%@s97te3<=x;@Ve!{O5pS>n^Ef{QIwyPczz1M3Bb&A<#a3jxY`g#7e`%3co)JJbI%99iA8vs z8JJX_hHpPGFG9PH#1JDzIm4T$09{3 zan~Jh9Frj1hbJ|&$JG0Sps^;oCWSRIgo^Vp$YaAHXKSsAO6DM(UrBWfnZr9`(19@Y zmn<)Okc|2c27?cTL1>~bN<_z^Qzw}}lVT+$CzqtuEq==+bR3@4s^jND>l_{}RGb$; z?k~d3U|z;7U4^{5uz4a7Xi7ugp0yEMMcM{p*V+(6h1vo7P(?LY^nI%2F25w&B{k-- zz1|uK-?qNjL2a*7!HJ#iEG%P9j5s6CAu$=5MuJYRh!`VEh%6i0 zftgC_A#X-`O3G$Q7qhfcZkfm9D$bo-)lV6T2*Inc+tWJCrYczh1Gz*N%@7==h9n2)zA24Zd(TtM9M$Y0=ceYPj(<{E% zS!_Nv^Gir=a2LD1bA8@^Sp&VB`%)MjW7B|?`vq+1^EFu}1C4VR7P?F@saWeG$6es| zmRhP^;{e5&!A<=M^2KZVHuw8Z@F{tM)9ZD4imUy{`}FPeZ)$Q5@@?i5GKh)aI|#dp z4?94Rv^+_~q_P>MUbnYQJ`56S+M>{Aq$w@6JCE8s!RaY=4J#e5OIGtBUw?+h#>N_f zKPk$VU!3(PnDKP3RJ^pU`iU7?6#Z@v-ss9W+QFMt8QmScyQmM2Wb?*yWAPM&Thwb0 zBsgRMCVIScyrU5hasD#kXbcp8v>%KYR`J5f!MCY0j&jJFu;}m0pNwz8gZ!jfk<0&+ z>gfN8zpkFjFj7Qh0pg_1NDc4N-aQ;*_A+`pj+9$3M=QByIap5 z_k-+=J?K7UcK9ms2lXJE1oa@b-9tANbBwvP4!Y+kjgwr7c8&NStP#`ed&bt|*M#V< znAc;yw-aYjedSGW+ldd&F7LD74!LISJh9=n*>K&Bsx!Ccx~mNOU8eC$M0W#DmLB3`!C&m%gz7Z*ZZ}z zs;su%AD-#hS!}x#2i?%yk?=*IO;bh=y!Yh6*(Xmreq_m=W5$S`x7)MD6R+9zoOdOk ze_P338EIiAV71-%6#V<(w?^`wAH!AJ2K+btdjd}<>}{^4_`eK}*nqF**`UkY3LL8~ z_-Opa7W_E=Vn0p>zbDsb=r89kcHz^wrvm3-qO2wDek^QD$t9@9E$PwCy z-v#wB*@wl{e9-n`H=hp!#m?`+8tTDPE!JT%8j9_^Zu_N!!qTyJa;w4cekoVAqlTIc z#jxC~hG4R`Xx1&#a6W(9ha(Fdv{)4$%|9OCAG#3paGOwW)`VTo$6`h(N@#+v1ks`_ ze}cjdM`ZB1*t?i4@iLZEhMC%roP$|;e}gq0A79?!JM@9yAb%X*~hb_Tfpbl0OVukU0JrLS_G#h+`VP{R0+K zZwe!*DI+l(bgYduFl&CO9W^*}R)g9;JXdQXuf|xxUam4E5G;3SBL5Du&$1tk94?DG z^LbIPKQ3&`zHQlO(89Lt+m?OXvhOLjE&H}*-*4GZU`iT;!jqjdN^QHop1gM`QwZvJ zFQ|TZ((1SFjK9L%ka}!uWyFvPHg+DH(_;@|{*RrE^AQ%Cp99xLn4b{A&ju%8PqI#+p(m6)yI#A9&>c(Mwj% z{Ak&cDNEMBbVJ5=8CROpKYa!#k*FB!{umi&{kCI4Ci_6^a$Ov3!@3D^)-tzi7;V*K`T$+*#4 z=w#ymgZNLwPu3F@;wNKB2Ke{m7t7TJKQ?mF<43z0hOoztg2#Fp{Oe05 zGaMm{79vg71csFMBUx>1t%>^?7C8qlS!fbB!>GFq_RSy>g^VlLoh#Qeiq$fZ#41`B z87>M84vn@ONS0`OMG)=VkXWJ>5^JIrq;vX$(HY_hMyM(1b1!XM0V&zJX+gVsr@YfhQiK^e-j{4mvvUPXRYa;A& zhwbEG*CgBJ&eq*Q?n3iFJWj%V_hEkl`*|J}AN#0nKR-P7^XB)pn|E=O-t!(h_T0<; zcJ#L8o3EPNB>n2Ue>?Z;v-X~N!(Hw(Z+fH2GdG{U=a$>V#{R@HCsfEDJr_?%xogUg z_uTdVH}~9~P;&G9rCU$Ff5zqG7GAk((xX=Ud+LS+z1Cyl?9of|E_N>&aMYe9-P~us z^6cWVZ%n_k^YSjofAGPM3sOJ6{)-PjTYu)tFScCT_v@zH`+u|PyZcwkK0nu8v+JkH z&)vS}#|Q3NC-(a@ZgFkC{D#skr~UoNtq*>c@yqj%Z`q#r)%iO&H@0{eP^=Y-v8yW%UZpg78yDnf`S%c7yK>!t`J+}0oLAmr=sOp_I`rnN9>}@ zPVJHZ_S9FlY&q?&xa&{9WzUPJM?L=dnVYZmRfe6gE#<#CMz>_f3SzctwVDI(4e)&nI1{`M;8a5YFP?9M-!!g`gdKyWt%7*ha9u@Md*Zti z`K~9df@fLt(g*kCj3OZ)O*PO z7(8;gzYP5(;*l|ub9i0^eIw{sLC;2L>M8hg&ab+Wu-=620q-qfS%1?HzTYGF`S895 zzenIVis!T8orb*2iR%jJ&j42zE}RPeM*Lobt|k7d_{FiV+#Y`k9)DSmrs^DjkwKaW z$6r>0+TTfGD8*pz!Rjx=8nQqmk{y+#h-cJBY&9pBQjWUTh8Sv8mZ6%yGE^h`Clw%& z?91gs#Ja8djVNX9!;@MCS_E3>@Mxjp$k0oF*;1*LF)9&d7J`|(E!8d1c#3jHZNyfQ zHh|c*HpEb&WXPnyjB!W_k<80uO^sV`5LUNP*HG73;uD_ODpV&bYuDNkLxqyTl3w|g zpF;lp13z_(^Co0%LdmRxQX+9*&vheHjwjO9m=L-Y{Iz|>C=hUmd04AjG=H0ogy zgY|GZh#`6i9`NeIvYQY+gdg_m25N{N1T~x<-UfM~jNZ!9DOm}15|=bZkqt1vD`M47 zZq3O8_DjjE9W^vR-4Iwt4I?R}vI~o4)KEyQBHT}KdR>E+4}#Rgiqs>5c6E3YR^bK{ zS)*PBLi=EZ&@_JsT0rEHr21m^U=4^oINe9mR|tq)5JDqw4O&3tX0hJ?3dH|F6cBlE z$vuV1PXUpKFSVzFX36bHqW%>UOKt~8d^4NlSaLgjw6}s}i8d>Oyza$bJC;gCWFDFe0dEZx7Eg)XGa z9&z8e14#`}Y87S?Xr05Og^KeO$h}M1O;);Fg>*vA<=u5>%=irS5{}R+$_9`+hC>P! z)m@Wa|zG+X8DXMfPp=ro^^C23FB> zJ5eL|ha4)P3zA-blE}O2QJv|khmu)^nGXtEu9``&;T$T$0uWh!ZX!yztW=kwNWMG= zcOlEdlUhajFKE?D42&UEoUcKy*2rYGi;((NcR}X(#~O{)kXglO-p!(s8kA5GjsUTK zj~p6*g_T40Y$|&;mA$L1Z%bW!S6O>kS#z&hdskWC9~*_J z?YUF|hsYet@O}O65!LSwo2@&BHV<;TlC3*icL#fD*8gsM_m}trtmm^d?Y$%XN2}?2 za&TwI*m-;?jZ8h)p8f8%-@W#`H~361`&;9nJM(sXckm60tvg$H{}+w1UGD61XP3K> zqdo1u@xfOMTX(kZ{x6yoyWH93&MtTM_v~RC6t(-t2j8IBy0dlnf6*A*tPT za^7LR-v^mB*NU~;f95_8vSqM;k6_uK;CQ0%$tAykAau(;giwnj&XSfO}Sp4krHMwM_tN6GX{rUxTr0nw5J-Z~& zl~YpGeVnUkhRZX|>-D&2lzCmHQqyB+huDz9m#_b@#H!x6U+JWXeJK9S_A5W=X!1$! z^Ie(gfu5P^Q(OnSGfa=H{66{p^8J$`f};4C%O7@|Du*t-$7r*+8-YaMLId|PDd*x)M zeQ~F}bNu_!=N*^5@khXt?g8d168qoekG_H0to*Kg&WvHg^9 zQ}tdpvS-bdibtEs{`Bi^ZQXVAE%}+UKh4F*82ztLdvC&r|9#eZ-|Bbsr(QMuoCIpx z7ra|#-}%Wr%l;}`xmub{w_3@wyz}k{UJK5*+~RPTz z;K}|hm*O7}&N1Lz!gT^TFL51#{~T~;u}j4PzeihH-=jIKCUmOvlz;ucyiWrV`~m*M zWaonr@FpI^1{t!hJ{$Q0D96IMm__(y+zVJ%bv~QCw714>E|+q$gwU395iSQo`*E5Y0Xj0Z8EvKyCn1gguG`PzO3mzpTfcjerNX zCwG#>R6DtKHQB#F&8!_YbXD1-5cGDUvAhEmYP4)%5suI*&T5d5Jd}H=AZtKn1N=hD zi0oK$U>dqi_NAze*eXyvwwvf$8)B$X9Y7ys-Ftql?p8*=|NT-Ju$PRKd-I%tUu6PgU&`@g{(-NpjZCRMnu^v#uL#F_j_TGxjzP`fHg-ORLI5@`y&Vy zvJaa|43zCPicrLX7ypkS?^rvzRf8q$Ady)+YN%-ELZC$}rd^Sh-Un9hlG%Jhix!^T zD%zuH8HT~aWH+EpblEt*{ae@lj!2)A;;-;>Idl} z#>Pa|Hnmj<q=`a(Uw7kB6m8mvR@MD*dmj zs^p1_Kk*Xh5B?Fyet!%3fq+xNPab^mE`jI!;N1%sN}xtq1iHZUtEzShfxr;$4+cFT zJQ!ZMaJMy_;2?NW0K9NvFkH1;gcXsI2l60z5dtHn{w-VtxfRw4wuFbmq_8@iP{>VJ z_{o#$iXK8??RgN+A6zV|*-JT>a-7cPFX!bv`+tY4oaYDqf>nYRDT4E>c9VU(s&-lK z3w`h+^G^O%%&(Zgo4fFkqGD=3m}4O9PtU>L6SGl|uCi5fmtTxL_`hpw{XAsnITfGl z`&`UPDw^glJ;~+FJF&QMZengp5$lfiS7e;mHODKTld;8RMRHHdb9!Bq-9=_-uCvfp z%sJ+cqG`p>B3DAuG=iODyso0OqG@HNu9Hh$o)c%gJRWzRi(M+^hjej9E#lS0+dAy$ z?PQ-YM}-Zw4;|r%jewlA4;`@&9r2bnwGSOJYJM0ktiL$xPq5dt3`?U50HJ%6AnGa<#+|ZDokp6%iWA+se=ELzY z3Kzu}TX09M9*I}4g|l_XyXPRcKgbDR>i!_BN|QiijX6vt)(K;dG1qVUz>ulrO03s~ zu3igg*NB6!5%pYmj3=^%ZoMDBm#(pxF3<7R_}XSJ_{WG3!|V4FUsR{Ki}Om(EA1|) zibP%V24Z`bnlW(NS)?|~) z+*sc{F4q*d>%4m2lGU=w=qcf<@nNW*`qQCfIOd^kg!IH?WRxd1N_r=H3`dW|yv7h_ z)VN6_y~Y@0Y?NVOOEu!T`vUhW<5gnXtSL7~Rq?b1zg@)nThuON4gOn= z?f9>a+7h*okYA18aVs^=cld9U*uWI|w&SjcwhAeKBd)cC|A>@ZjGa7f#s7Cxa&+^% zV-K47Ir^LEPolq!{w{h$^si`Z4^(I(N*S@p`>U}74QwW5>oo5L#)J4?VU!!68E(UA zEajR?N**-s2jfm-0doC_yo;03EsyJN|Q;g=ud{Xk2adp%O#w%d{X8a89&&JlM zUo^B6uD?g`bExP|(Vs=X75!TDtI;n-FN^*Ft!>A5r?HmQes3fgDTV{CF_iRW#!L84 zH%>R+HaZ&V#uDQwqlvKsO(^3zqpQ)v_|WKUbT{5HdK!IlL8I4QHuM+*k zbp!H?hN{q%JpC74eTAOCBrRT`vyDmU;&|%Na$}@%99%~jIrtAIzGsXKYSw#3f!5{~ zz-x?0k!lxOHTmx*pQIj;R^pNpwUN|Up`Xvm@gnqb3QwPqziY{HskzBMcND(w6U$em zDG!}~Vmv@hQoi@0yS-fGEVXW5^p@z4qyH2Atk&3n94|$`9{ol14oco$o%dVe@GbJj z!M8o>A7UJ9^fR6{8W~AwFa_W5NJ$!enNh}bDwyvY4UMM89bgaQ>Po6UC!cm1Qg1|S zl9nnow~rLvfm9WIG<{?g(-M7P3^3Xo|1lb)vCq*|U*mP7moW@&_A`z#RvJeenaGok z&ni-WF8(vo+D7AHt^2*W(i(iFp_SUb6ODgroM(It^=O@vzUb;ZV=NMFCntV}Vgz}% z&KM8nZerXA)Q|S$L*q*Le{MWRX?`ziv(Dok25l6jtP+jA=y)^w<>*(Umqss%exA~{ zih8Qxv6mcLM_u^c7>cfLLjxyrji5xeH}1i0iWH0up_QiSZ5w5vlkqheBe{Bk)4{l$ zI(id4HY2Cho*#L7ftvX-<#0W^pGiLE!to8H?Ll4cMk)H1)J>-3=D@iZoceGdg8awA zaWy<+poyhCe@1LxG*Cjh-v!65{^U%`gv=U$F()t@QHX*K6#xTNikd?W9MoXhD zZWWL;A>Z*x`Z@XWIUGOIssS7+NeRsK;t#zNMwBx`6qKt0BT1_Q_91;v;s|y<@kEI&Z1ThrxtXfR4fChl`)_4 z|6in%^7Slnzey|dmGL)9%KPAUg1)ISic}nr#IKh(8ByB@e3u$2CN&}@bONK*7G93>qJUg^e(P;cNJ zyO$i2($N#TZ)p{Ng2&a=&X3{7yCHfz?fV;!*QtTaxL!qPOQYY6{t+#$CQqu!^%=(N zQHi=`j3+$}NcWpQeT;zj2;(lGv0T&8M@Qo`o|bVfr3AD?OK($-t0hf* zT33@I$%9hvUl8&OwKD~H4<%6Em(9^v52V-yhg52V^g6_CMP800rR&Ly?PzisI@zY% z-(|+l_--P_W{LVZ`kCk#(9G+UCTXo+Mo;3tLTj&R6+a-Jld0cJ;hacH8&F<15#RR0*_?akN6$(CWWSo^I0hZ#Cs@j((%2lXneB z`wsoKH~~KW;G7L!4(->+T5}orcER@;($wB)4HpOHZ-4R6BibZs-CsdpOL5Z{t10;A=WC|Qqflu?e;tHPDN(L^ZRI}qwy>$ z>Ca{AYcS~V+qj9l(yxxR{N0iYjky`Zdn>po|eEZ9_m!;!V2Wh77{x$E;|LFGQTlyt0(M~U=H?@Mk)X}sl?T~#Jx^F|P(gMnz zlz{|e2X%ilaUBUp2E2yAU)rv-;B-1#S_bWD)Va~*!g}7TQl_LgCH={3iQzjm^(($< zq@C70O4`HU;N2KGwxG2tV)~8e$x_eY8-)~#H&vQ(D$;DDY*o^7N)PQ@-kQ>TP?Vsz z(A3Mi$0aTMGRoOYybnL42O;J7C$xGUt@}&Vi9X2Lo}7LexuumFM_(n4mZJ&o8>F?R z@gcsmxK1QpeT{p0x`lN0<_*8Lx@~`&_+NzM3fj&gl#xM5{iBxjH#8=1lo-(!ayy7$ zmr&p~q&OYu7Js}PTH8*}e2ETL{CHx4Np;=fwQ_YFPNR>aYoG9aaD09Qv+vyn^6 z=r5#5S_tX?$(P-)l$IyB7SXR>$(yVd(v2dXFUgHq>Qg-F6K%BzyD@LG4YXn7X_ZFe z*NW>>^nN98jy050^Q&MdvFziGybDe3g7$Va`3-%rkKufp?lrm5{2FLewcZm&`Y1_3 z3N722gsd{AquN)Mq^PqmOzNJ(Nmn zN(EYYn4a2aK+-pmlDn46?8R+^zkKJ(J90a9>A&zQ#a)TszJPl<8h;(>-qLTV(ly8X-sSW25-*fQa3iow{eo78))Rdeoto!#V=rD~q z*XXaUEu=(JC?#wowc&T9--(>_$%Uu*w*1Dpjjw}GjT`X!4{x>=#Pt%b?N?}Y5%ug# z=yt*5XKh1RueBtW5vd9Co|A9f-;w$qY8zh)U@oS-`~c5aY3E)*8>{eH$^AjJ{XSn9 zmE^YIeFc}_$-&)*$S8d`bR{K+zJrvY-)W(MusUqV8X+x*)D*GI$opjr@k%}74FUBQ zt$~fCSyC#cWRrg0rTyib^&9=Pllyk!{DJ>8pdoSHW9!^es5@juIP>w2bm5`yOaB zTKN@Cd`6zgMUS75pQF~1>nmxscYrG?+F^W)E4e7z{+=+g;fRa^i{$bp`Xkp5;Qk7R z^w~E8OU!%WyB$pVGFl7nF4~5@aF%Z|EDyqg5Rp^9f5bL6IF{ZqeW_sEn9)E{N{wbJ znt8^QtO3Tk=&#&J#+`0Bpo-G4VYV0h3sV1}b+3Q!f>d9=4|(&U zOJ&XI$Ik?3M*ED+djcYUBs<`pKf^Tj89jUA#T{7$4JI`C({{Bzm z;~xCS9Zx>;<89ad>&Kn1KPKx+FM0Hl#W`oJc-FtZbm`^4y!N-pd%gZaO!T{b$K6x; z;O>2u=kM(C{`Nha-|w-_`;qZ;x6i%f#(myu&l6u={Qb#4TzAc`pC&(d`pNo}_*{QB(QTHiM*CUsh2%;bu_F$G&<656$GlXUGT!y3w()VHVaOg`q(R$p67&DsyxmUZ=3t&BfT#C@zdEC@iy1%V)MCI za;;-L`0teKvzcAliAE%a)rwe?)aMlU8(GP@lUbDiBJ2XzxxUB(!a|w9&+o+;rLtHP zxP<4PTr;8j0-P1l6odCU@NCw^Ude=!$@uldZv=1~=4ZABPJ!>4TygN|2hMx=pUQO$ zyuKv9$B1VT{9YzJ23Xef{scW1Se2+JdMeci|0eL2^|>?gdy#Zpid^?2|K0F%gS!Wq zFC=vaX}cPph4A|V|Eq}mR%lmoeNWgK$Z!VqcOv&{@ZzC6miyh{{s7J6#ND4b79!KF zzz%R9hVEJT+>8H6@CQQs0#`D;wsFq_r$6Dz@VSFw$^#zX4Oql`Q0s#OI0P>P&PFfo zL)Z5PF9Uvt7O*1H1IN0DwBLm|qc&peLc;>eR@d4PLr19Hpbv7gEYnGn%rm-W zb+vz;YTbf4D0`jv$G|Gw{UCSWA9ARG4@%jd!BD@KKUqjS0a1$)u`mLy4X1#2uAMk= zP5Y|-AqTH-{|@Ag+BjR2d^z>7Yi)?3$-NTv%-YbymC_8_tI@eZZ>EnScM%} zIBRDXsK3__gg98AZ$R8T(wMFKb<>s&jFd1`-|}i;iFafv4yXS(+USt@rHsm626b1T z1jt#D9vHusJW$6E?;kx_tN#MMW9{6ndK|}lBeQnYP|ckP0n62ElRTWRHbN4j>;tLK zn`#rXra=hQ*WY=&g-w;8AXsD9LBNXr&{X*etUBw-yELo{{K%nN%YvlG{`iN}+X{$s za(Uml*hFHc8i{z)Sj$cq*2-CTY5T~Gy>3R?0TnxIfY6G3QGgAh*5kATuk3Un#O+S+H?|Loj_khKp- z7MQkCZNj1jr*RBu$QdkzHLX8`k`am$n&!GZpM6v4NLy!WJ=8ra13m=2Z4Cfjx_)){@VOBdTfFC)MM$7|2 z3oC(D%9Qq&%oJ{+(xrid;?4Qj2hw+Z0zwoYjxbR1Cv>OODNdZ>o{)+ruNyxCDI~@lm*XM!Xm=RYHOTTcuL(iW4JYwP?I%?~Z7Y z;?HvzXZ0GJJtimCx5XjMwlv_e_t<6>(Pr@hfd znd}fd%2QG{t6C$?{QEovdbjX<=eTm+Mb5%%{A7Q?q`5^iN(vh}i%Z?vWgd^KICrk; z6<_QuHlLc!Dk*h)-Lqxe7k9DS>qBT(>?&}EdN-ft^5nXTy}>ay_4x-1*wE)|#*_>+ z&RtmOGQp%`%|FLo;P#eU_LphQel%#n7lRpWZ*;*lsOq0o8q3eR&qbUd*&AIr=;1N9 z(vdE=eh&IO%;|K{`(RQ+VwB8Hh?7NEvfj$x-NN48;=s3tK8zbk47GcZeR?>voO+qx z0d2L&xS5iR8ePwoSkJ{97QP7nL3>Hqc`T>fWTyMJbU&`xRp#|L3p3Lvl+7q~=bqr2 z8~zvtT|o|Vw~)Wam!Msb?L0nQ3&sz+qSWuUx_-auY~9fvImnV{>+XM5cZS`+I^_Km zqYS%#*!AO3k8rZTF^iAuWuL7Xa^70~Zd>g4$D!}PTi@Rwb{^Y#oa1paxLR;9U%-)^ zgd@wtWSBSXu{E|WwQtYEFc4DDEm-z@F7JPStl_V_&i8Ljjj#9XlbNS(uk$^aS5(lD zsc)U{&09B>%Q|1{p1A(Cx~pb>wCtrDGPcWFTUl58)W^@K$Qs(z)@5B~t?cZrzmLD? z%Jow&IP0dVE9Z2|J(BrGTge{(`cxjP*PpInN*Q|===Gze_&*3N>q6N>Ot1g^k^59G zgG<)FZes$Iy&lua>W0azZtzdL{D>ux0gE=nt;bvmQiSUIT-aSVKvi%X?+swF585XSw-9;OEW`JLPhum zM7vXR$eohVT~X{Qw7#jaox)Bdwx`g_CfVVS^J`c%&79-wEG`(6!|qPJCfQ*u&LQ&- z+4?U*&lr|jzA-Y7II<)A+JTvB&g?Yji1IO7+Q>gowZGiri#nt}febaz_{!LBY2KhGg zWm*suzjqLJ6CZYfAZd9r4|r19j8d=LTjq6_6erZ2TN!%fWYgKsLU$e$;3qgerLJM6 z+1?4!dsM)2ou>t?m{3_s_tJ7wQC*`KX0 zTaVw)Blew%*k(9&K~3fo8;;m|Y^L#DW%fMpeIfi>n{4e1?_y5MO z6R-u=7>phA^`4D9``v)+e7Y$SY{0dijeBa{fNLXx0kMzAicy5sViN%Yww!QFT%*{V zCjcp&!6yc!2n{~*pdNz3CsAUG%;56~s0U>5SqQ;FSVKm!zfT?3kRL&b$Qtq!i1qum zZ~PUevV~eh^qTBHX*q*5*EBXNP9EedTR+I)YivwZZEGKdKrhX0u$QIewPA%FxrI{y zQe?GlUtWpuVl!=(p3Xi>{MG_@4G7rTPFW^7=Cu{Hb_gl!1aGVN$^5BDa2|V8i?_Ri2 z0yV-S&;_1fRkce91cqpTFz5l{!SKR`yRG2_2f>R1;Drl=;i}yttcZ*}kO#qw5Ev=- zZ{Z@yt*}n8B|H=+h1KDNLTVH=TcBeKhxcVcnj+_c=XQg2C-Z_V0x>^_M_)AZ}jHX_^mF!=VC2(tg$Mr7L4 zc*c>H-jTtsMj7yaEO&7dc1SI zgIyfyQTn#%aL6Q-_@n(`ys(llE9GGKK4l!`U{gJgqAPz=cD~a;>DO8McDkka1!;e2 z`5EakQW#O!fpOBCOcB{7NJDADOw!%j?OnNLeEyu&1rS^^t zhhrk*P@QkmLy-KFUwzt_ijR)qzD7L~uPZj9dT;-f5iF_Ef1>^K&papHIv?!AX*aIw zaL=-;fn^Kk98Z$P)+awX7kweu2XaRj2RvUZtX=G%aEs8I^$4gvWJ~lCrY=opX3(q% z_J9?M*|IK>$ecV=GredO)q@Qh1Cc_f&-?&dy{<||{3Nf_TUI*U$uXw&TGBt)u+_vj zE5&Ed?>?c#T`Z<+#gUtHdEds#v%LJ}O03t4qaMz}OXu^{ zHfPsAS6Alg%Gk|TR32_V?k)Js7>WJG zTF7ZP;fMpz-Po`{Wd9=2Nfw7% z2jgG%SFOE>a0Y9F&gW2plH%^!HHTL0{{V`}R9et6yd_qf$i}TJL9O3?fxkqXY>!)48wkt|LuyXYw7>A}FMRt8-&<;* zv}xTbNG4fZe$`+1@?d}ANA`uEp_iWPVJIa zC#R3jJmRPacD{LxjD`33?3@AfN39qrWuw^6N z^l%)lgV$3TKL9Nc;V5L%y;S>9yK(##8E6?Z4*oqScF~+MF}oE%Rp%v$i-T0&Sr6JdSGy<{>}lZeIQb}q7utC zjlE^ghl{@{6cm>_FQS4H4`F&ZLaU??fz&Y^QmDL-fNGmz?1>ikL<`yYlnzc@+$Hpb z(S|+I!ZyQLtuTgdhM}!F#NC>k zPxiQ6vb}~q*J5(mQBQp~=s}#_Y|j_ym*2DJA$N-E@r;lOdcHut?)Zl8-KO_bIVGIY z?JyYAbY1Bfj(Mm>595!Dk$o^@qp<&&yIktMDyQ=q8#QjyNUt%*7#n36(QH7(I$C|D za_5SvGUAQYxGH0~G0x~~#5k0=QOf8Xt&E{usayuQafHOQP)0dn<;jv7%oK`0*rW)FaKVWtoF^@TkCUWKeEcahIhiS}&?%HqGge6 zRQ$E{IzOfCi!8!bd<9d7`tIhl)SXJ5QizUKOYYdzOiuAR_qG4|*f9*DXZA9;I-_N!>8bxZ<-rQ@OH zP8GV}k~RW;&3hun$c}Hs{Y44m$~KzB zZ@_n>4>#6moS1DS8%2c5d$5Q%%8O`1t~lRQwu!B&Z;G!nnwW5!GHyzYH5&P7Z!#Ji z8;sYDv$$51uCt6^@!4o>_r-ftR8`D&V+Zoq(DwsxH5fu8Pe;mAlqrkwi^dO*8cR60 zjN0JmhBPn6Tw#0=z^@`|wdMmaO(Q&yH|2}Ei6`L~8YWt~34YsSp4IxSk#BC|y?%Ny zV&T*@?p|Z6G0}L!)CTS^4W12k;PvKONLLX$%~RI<+BS~C?z!;iM?@*zoeq2=tjnR$4289UkQh&qe^p-Ql-nY zF6%p^guaLIGilijhOP}UMaDMza%TKRj+;njGJ4mwB~@zK&X{Z?HWmzDU1}7UO?lf+ zU84qxpZ_8b=@AZ&RR)K8hV%vvdUfT^siU{6#2h6Z(2$J~|Des_|A+SVs@LB;_4sSi zwg=eu09VoB`p7;AgOoN`)bDXRT4a7R?EOE&S|b0K*I!uYMTI*9DtIoGbsm&|PeK2D zCzew zu8-{Z5z$W3$foB!}E=Yxeia-WcM$x|m4F7|%9X0e=4zH8>s&rR$$@Za6sXTEaNyBjM# z%Nnlwdh6NM>-Nt7ZsD3EQEMgN-jTH_VxT>Z}Jg#&WO7yUcxqw~cU zHfZm?7rjSW%E5Nkf%SK?FYZIYvIlMw%dcMGk~29ba+gh7Wj)|H?yIpcyiI+P-<{B< z0x#kDXZXlE!O7774H^d7)n2~q%dn5V&NT_Vjo^RD9Qa(WtGMnUyrtkkEB3Z2gkJ=` ztR)-^&2nI|yR{_VN8u;y2gP(Dd+^?Y-(%42LzXh|rf_eJe-3=BxZVOUjr$U=yNUY} z!oPw(i~Bv`{YpHUsrEX;r3!)P+S1*2C=}hUh^! zTC@9Dw)YLugCK=w@o}Jr=s{4!Evx$yzsTM##&mV{z+l zm?~kCSr-$lXl@2Hd(}k{D(p$i8pnCCo%hGUD&&J8ci$g!sDKYcGSW{X z3yWpBZ62-%_rP?T)5M~p{j;(P{T*ceBa(_ z%}VO(!cZGQsIYAzJE@csI*UJ9@>|NEoaAM;Ql)APFVpc9k^>X}Mc58LaJJS2oyxN9 zoC9YOn#9wEk-5S9B;E8%f5EG_r!OLzB@y==cEX7BH$^x5XJk#rt(dp^MnV)S`0bDm z_Ub$lah>FhD14M-(X=DtI^wp zl3B%R$O3S-{14_FDnbf~Ib~Wuf!)7S1d`TQ&NeNMpbdTuMm-{7WEFEvE3!BeqENw4 zfYcsiJml3}_86nR)1bY?eU{VXWK+Q=#bre^T%J*$k}`XY(H>*8#~3l+{Sjk~%_h6% zcuy?z&MISX4X@W-Tu>UY=V1MQuh;KxNB!2F@mH946;;1;ILff|_>lX(b{-$>HX0M^ z_n8qQUj42g^}BVkb;n@mK`!R8b!Y3Ydk^``OwTSW^p<&C#}&KEydGy^X8MG(8HMiL z6I^o-@2*C6d)I%!p}flMI&0TiyUv!mrcG0EQ4|Gb_wNp^L8<3o7Iu4Qw|91X_t$Fg z7E@&3e|PiCOr2CWauxbE^gGE_T2ki8b(MDaKb^$tFgcr}s5H04Q|O*?7~eSoRS32%KAhdvlk0%xp5I1`;Oom}UO*9Q-G7$^7Vn%wM+8ISJl3 z;GIb3AHNs*{9`#cygZ?V9UfuA+d_^s7xBJYj)}5ARWXq{o|S1TgNi}H8T6RM9=HCPT&bm`8p5>dO4=T zi$+~)a=>(+0{-D`Csl)Q}COc=yj2?UUfWxwTfIY@@XeQbE-IJ`} z9bH>@7!3|`K0phWz0`aA7waf&``6*Ke_hz{gUe(egT=4@a+}}wm6i6zolmE`?~?rr zWS;`rqag3N>?N=4TK3|+1+TxfxbduaKK$t4D~e`}_~^598viK!5Qsf&O2wm1Wbc82 zqi^Z9`Ih`lv57tO^sZAr{O_~QsaFj@=k;kNMIW>7UhH9SV&C%H#Kf-k0RHmx+r~KR zMD@Tg6T8=2T$gd(3XKy#v6YFPY(6+*Bm0%GlexrJ)(xBn;4I_$9G<_DMc^5j49?aE zq1J6CfS+m=ND#OP`JcfE!HbXQ2P4QTyJ8k!mT@n@YLSg>?X6Lmwg)F>4YxWUBy-LC zGlKG0wlwT>R{c}-diC!ZXXm_hi7}=L1qc&ozKw=E*S{q`h zP_hx{;37ntP5$I?Kab*YV4{u1_SJR&EUW^GsjSET(L=@DAoevs(aEe5Junfk68l>1 zZ>2FcIMwRHAWpP!Tidw zUz+iys#Nux_RC@#pi&h|RSJLhCRJHkDnCnAWU0z5Ri%To@>PDms>oNB`Kn4|XH}^D z3RO{|Dl1f#CeEr<`IV}oQdL%}D$OgaO66CniYisfXS(RB? zRXSqe{QRtn{H)6StST)B!TA+g6%|>P6zGesJ%#6Vf03`@D|F=gs-K{mAR0It|`_M_R_HDJsgDd1{ZN9=$1fT(6{@ zoAWC#?NT%_>9VZ+?0cG&{dC6Y#cQ7}XI#RUv~%tHXV*Ww{?%0UF!gV|rT(>#QA69k zdPT$7UW4MwKk0Kt;||Rpn{)I(hThOJ`s$>~H=dk6rQ@mYWpA&@P&YR1GdSa&n=(e+ zndv(I?tkBW-}ozsUYgLfMXIiQ!zUd-oHK}ZyjbqlZ0V)<>CvxOKk;h7=#Emec&~N1 znDIUCk4)itlGh^}^9aUeFDd2ii{HtU)Xr_}H;!M2Q74bd;U2f00V4J>>@d8rWQHK~ zW9ZO0Wyo`F<%~YH+sIO^v5?pkak9DRalZwmx4E$PtL@x7bDzq^qk6!1kKx{iOZ;!( z5*}k9O{S$$qf?Ju?;%nj>1i5$MZ9IK8NQ<>hcC9_}rj< z?$V))8!RC7b^ZJv{>kbS9lA#QY|+ml8BSH1k&qEw% zG;pXfj^qZ-*dcuZ{%>i_Rk#jyL#+5Oj9uVxsLyzIsKhvtwo9CF8>iiwxDK^d`}dC* z|2*yP)^3*s@fn5NOx>3td|pdPZqQPFpYUZu0{g6sJmpCX;4nW)IDeHS_~{KL?cX+h zye0xw>1}yHEJPlTkW3KLSlcdg~a|z3*i=j!~zFeZ7I1hy_Imd5Vx6%Z7u#s zwOPRPg0|PQuj+r>ipJ8@C3JPVJm1}}V}oqfu)XAPS_g@DMThpJIweE+_sQtkpp81I zv&gx-vv9taG?$mDMUgDpr-4WW&)9yvuy-m9x_Ij#Uvf7H9ppMRx*k|?Z*x(t%OAj(x zeVcU#X<5}tQaZ7>XkbBa!C9)^k8#_mb-hKZtUlrv;F5|yg0oD!+q65fulN*c_e$JT z)U(vfM(Vr1C8T0{vZQ5qUvZD@m)zh|bt5%ALAB~H{CoEo&c(RN>dF2KNbifd32FzS z3F_(rqSZ$Rh@1%nMdwonYJc1|>WhJ*s}qh*Zm>vA<8_{_t~pjp&J)K<$$1GkS;Y-H z1I)RDB$hk1yG*+u;wG!LgG7fh$5r%fsoEX)WkP#h_7c>j<0O^~wfm8F;|6zZ@QP3J zK0G_ru)&fdmv*nhO;%qFmXa1fWc^@j%@C2ibjXY$ZPXh>-cMh_`SDb-(T{~z#APz{Dj==-NJi46cWOc80pVRIK!-O_=xUMh5 zCDmiJd%AYd#Z6Yv50^Bq0Vi1%XRjZetnSqA($zdCsE(t=t;D5u8YTHSceK=| zhet1PG*Sg!KNy{?lE;XIowPf0jL10)x0$+OjO6&+V}!#-T!-p)d@^bD9xo~VCvJjz z>39kKM7wb($a7O%hdTcR$(_rzdk=0Swfux9PH3dQ!A(}1Pmorz%UF?W(bzK@bX4oc zt{B@mw5_xkj0BWf^YCnNfRWG1;p5in#45*=sRV_3$UPF!e!ixs;RH)Ka zdo@ajl@QicWiX~KT&@5*g5^V#G;}jinmR_ErlE(_QyMx;L$7JNo(yUW-KQElmf?GW zHh|eqovAL+&~6=;tFGrgnW`G{LOhDeI=AVt4C5))1?Vmf^)a%IG%nhfUA z>RR=Nx{nw9H2osI1t^-QLav_76Z$~Y{mtm8`T%{b4E(PHlCUo{^oS4oT4TQE!~9M~ zfw_`vfO=33FofrKTs_r7AM~>iI?kAf)Q%|8#6mR;-&EBWXckbmhWh)U5gMA{gGM1r zs&Z@SF?E6ty8tLnJ+8(X68m*@Ee5D3)JcY<_HLk~u{oTi=^g{KDSDWsp*Mk!Q!lF1 zHN^W~4O7e1ObvandA_ga8Af`l+U$dF($F3atyFg!psIvu(aY!RpPH^4P(z>v8tM%+ zLhVv-Xy_!M{%VhUTSEmvP1QcNTtk-vjiD%hsG-}UpCZgKR_YYpOaE$sN-{R8@bSBW}D$B^$kQeA=HPV=>q051`s}qe9 z4c!XVlw6pjp@%dy)woDQF94+}r*T!3==uYoQ5vdw%RV+@^84xNYJJaF2;Q2X|mxF>X#=DelQ}vlZ{pxC?N-ahKpz9w$6+ zixWQoio1-QT$AuU&nBM@2|~3!VGXV$QE*bU+fKV#+8w6d$%z{XJu`7L?m7C|o4AeV zYZ8CMt>N$YxhBa$7Cn~K2zPOkNdBgFe@JSM&qnR;N@~S(qlW3YM`*W8!wjB9PD5>N z*qi4Yl4s%GmRyEwa=Ry4(r)5BmOPv1|0D~~x3s%byWePcXYwWZJ5nU{`IO6WUrV`K zFjKC_{UPOU+|Al`r0VjVDv}(j-J??<;<=xG9-R6p&&TWMiQ1i}-F)qulF!mOW?JUz z=PPvRb=ti}yZ_Yg^f=-6fad>%_IXabuW71x_47yC{ZhL>rAivNYWH7pi=Z`g{L{1* zJb#-eIk+}Wbn=^aV;hyK7_H$LWomm=;~ij{8k^8q@U0wF6QK>y$6v-$o0O`F<+p-4 zvHU*mKH6kR)Wq_o+Wl0!tF^mFyRl6rw25{*X}7m_kJs*W?UrfxTJ7Gc-AA>%M7t}r zyIQ;3w7Un_Pz{^ij@!7Il&B-M+fKXPn%x!UP{%eG*L)r! A}kE1S})qDv4`OSaA zo!Ptq9}l61%4=~SO?Y7oDI0TIh-R+U?%mpbs>Q>EzTe`}Xop(W;z^!O{jb-dds{q< zPm?2-;C47dXnSe*_?GMNxv}Lo-0xfNi*`6XZ41+U=sd1{H2qm z!Yn`Oou!@W+F4pQ6Tfd~<)DS>Ecj+ycSh%?_?WfQtm$SQFX$|7zFE^}>*p&p<_(<3 z;x99^yR0y#l+V-dHMl+14PAt@8P```?t%0AF8AYZ@A3$)`F`os^=XHn!zo>dQDV>3 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 literal 0 HcmV?d00001 diff --git a/source/test/dotnet/CmisWS/Properties/NUnit/nunit.uikit.tests.dll b/source/test/dotnet/CmisWS/Properties/NUnit/nunit.uikit.tests.dll new file mode 100644 index 0000000000000000000000000000000000000000..adc71bbf82ddfcf94e0e84b193440718bac20bb6 GIT binary patch literal 40960 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 J@ITW6{~HAkTk8M- literal 0 HcmV?d00001 diff --git a/source/test/dotnet/CmisWS/Properties/NUnit/nunit.util.dll b/source/test/dotnet/CmisWS/Properties/NUnit/nunit.util.dll new file mode 100644 index 0000000000000000000000000000000000000000..4bbb18c60f66db370152ebe35f93c468ede7c61b GIT binary patch literal 114688 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 + + + log4net + + + + + Appender that logs to a database. + + + + appends logging events to a table within a + database. The appender can be configured to specify the connection + string by setting the property. + The connection type (provider) can be specified by setting the + property. For more information on database connection strings for + your specific database see http://www.connectionstrings.com/. + + + Records are written into the database either using a prepared + statement or a stored procedure. The property + is set to (System.Data.CommandType.Text) to specify a prepared statement + or to (System.Data.CommandType.StoredProcedure) to specify a stored + procedure. + + + The prepared statement text or the name of the stored procedure + must be set in the property. + + + The prepared statement or stored procedure can take a number + of parameters. Parameters are added using the + method. This adds a single to the + ordered list of parameters. The + type may be subclassed if required to provide database specific + functionality. The specifies + the parameter name, database type, size, and how the value should + be generated using a . + + + + An example of a SQL Server table that could be logged to: + + CREATE TABLE [dbo].[Log] ( + [ID] [int] IDENTITY (1, 1) NOT NULL , + [Date] [datetime] NOT NULL , + [Thread] [varchar] (255) NOT NULL , + [Level] [varchar] (20) NOT NULL , + [Logger] [varchar] (255) NOT NULL , + [Message] [varchar] (4000) NOT NULL + ) ON [PRIMARY] + + + + An example configuration to log to the above table: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Julian Biddle + Nicko Cadell + Gert Driesen + Lance Nehring + + + + Abstract base class implementation of that + buffers events in a fixed size buffer. + + + + This base class should be used by appenders that need to buffer a + number of events before logging them. For example the + buffers events and then submits the entire contents of the buffer to + the underlying database in one go. + + + Subclasses should override the + method to deliver the buffered events. + + The BufferingAppenderSkeleton maintains a fixed size cyclic + buffer of events. The size of the buffer is set using + the property. + + A is used to inspect + each event as it arrives in the appender. If the + triggers, then the current buffer is sent immediately + (see ). Otherwise the event + is stored in the buffer. For example, an evaluator can be used to + deliver the events immediately when an ERROR event arrives. + + + The buffering appender can be configured in a mode. + By default the appender is NOT lossy. When the buffer is full all + the buffered events are sent with . + If the property is set to true then the + buffer will not be sent when it is full, and new events arriving + in the appender will overwrite the oldest event in the buffer. + In lossy mode the buffer will only be sent when the + triggers. This can be useful behavior when you need to know about + ERROR events but not about events with a lower level, configure an + evaluator that will trigger when an ERROR event arrives, the whole + buffer will be sent which gives a history of events leading up to + the ERROR event. + + + Nicko Cadell + Gert Driesen + + + + Abstract base class implementation of . + + + + This class provides the code for common functionality, such + as support for threshold filtering and support for general filters. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface for your own strategies for printing log statements. + + + + Implementors should consider extending the + class which provides a default implementation of this interface. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Log the logging event in Appender specific way. + + The event to log + + + This method is called to log a message into this appender. + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + The name uniquely identifies the appender. + + + + + Interface for appenders that support bulk logging. + + + + This interface extends the interface to + support bulk logging of objects. Appenders + should only implement this interface if they can bulk log efficiently. + + + Nicko Cadell + + + + Log the array of logging events in Appender specific way. + + The events to log + + + This method is called to log an array of events into this appender. + + + + + + Interface used to delay activate a configured object. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then the method + must be called by the container after its all the configured properties have been set + and before the component can be used. + + + Nicko Cadell + + + + Activate the options that were previously set with calls to properties. + + + + This allows an object to defer activation of its options until all + options have been set. This is required for components which have + related options that remain ambiguous until all are set. + + + If a component implements this interface then this method must be called + after its properties have been set before the component can be used. + + + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Default constructor + + + Empty default constructor + + + + + Finalizes this appender by calling the implementation's + method. + + + + If this appender has not been closed then the Finalize method + will call . + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Closes the appender and release resources. + + + + Release any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + This method cannot be overridden by subclasses. This method + delegates the closing of the appender to the + method which must be overridden in the subclass. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The event to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the abstract method. + + + + + + Performs threshold checks and invokes filters before + delegating actual logging to the subclasses specific + method. + + The array of events to log. + + + This method cannot be overridden by derived classes. A + derived class should override the method + which is called by this method. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + Calls and checks that + it returns true. + + + + + If all of the above steps succeed then the + will be passed to the method. + + + + + + Test if the logging event should we output by this appender + + the event to test + true if the event should be output, false if the event should be ignored + + + This method checks the logging event against the threshold level set + on this appender and also against the filters specified on this + appender. + + + The implementation of this method is as follows: + + + + + + Checks that the severity of the + is greater than or equal to the of this + appender. + + + + Checks that the chain accepts the + . + + + + + + + + + Adds a filter to the end of the filter chain. + + the filter to add to this appender + + + The Filters are organized in a linked list. + + + Setting this property causes the new filter to be pushed onto the + back of the filter chain. + + + + + + Clears the filter list for this appender. + + + + Clears the filter list for this appender. + + + + + + Checks if the message level is below this appender's threshold. + + to test against. + + + If there is no threshold set, then the return value is always true. + + + + true if the meets the + requirements of this appender. + + + + + Is called when the appender is closed. Derived classes should override + this method if resources need to be released. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Subclasses of should implement this method + to perform actual logging. + + The event to append. + + + A subclass must implement this method to perform + logging of the . + + This method will be called by + if all the conditions listed for that method are met. + + + To restrict the logging of events in the appender + override the method. + + + + + + Append a bulk array of logging events. + + the array of logging events + + + This base class implementation calls the + method for each element in the bulk array. + + + A sub class that can better process a bulk array of events should + override this method in addition to . + + + + + + Called before as a precondition. + + + + This method is called by + before the call to the abstract method. + + + This method can be overridden in a subclass to extend the checks + made before the event is passed to the method. + + + A subclass should ensure that they delegate this call to + this base class if it is overridden. + + + true if the call to should proceed. + + + + Renders the to a string. + + The event to render. + The event rendered as a string. + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Where possible use the alternative version of this method + . + That method streams the rendering onto an existing Writer + which can give better performance if the caller already has + a open and ready for writing. + + + + + + Renders the to a string. + + The event to render. + The TextWriter to write the formatted event to + + + Helper method to render a to + a string. This appender must have a + set to render the to + a string. + + If there is exception data in the logging event and + the layout does not process the exception, this method + will append the exception text to the rendered string. + + + Use this method in preference to + where possible. If, however, the caller needs to render the event + to a string then does + provide an efficient mechanism for doing so. + + + + + + The layout of this appender. + + + See for more information. + + + + + The name of this appender. + + + See for more information. + + + + + The level threshold of this appender. + + + + There is no level threshold filtering by default. + + + See for more information. + + + + + + It is assumed and enforced that errorHandler is never null. + + + + It is assumed and enforced that errorHandler is never null. + + + See for more information. + + + + + + The first filter in the filter chain. + + + + Set to null initially. + + + See for more information. + + + + + + The last filter in the filter chain. + + + See for more information. + + + + + Flag indicating if this appender is closed. + + + See for more information. + + + + + The guard prevents an appender from repeatedly calling its own DoAppend method + + + + + StringWriter used to render events + + + + + Gets or sets the threshold of this appender. + + + The threshold of the appender. + + + + All log events with lower level than the threshold level are ignored + by the appender. + + + In configuration files this option is specified by setting the + value of the option to a level + string, such as "DEBUG", "INFO" and so on. + + + + + + Gets or sets the for this appender. + + The of the appender + + + The provides a default + implementation for the property. + + + + + + The filter chain. + + The head of the filter chain filter chain. + + + Returns the head Filter. The Filters are organized in a linked list + and so all Filters on this Appender are available through the result. + + + + + + Gets or sets the for this appender. + + The layout of the appender. + + + See for more information. + + + + + + + Gets or sets the name of this appender. + + The name of the appender. + + + The name uniquely identifies the appender. + + + + + + Tests if this appender requires a to be set. + + + + In the rather exceptional case, where the appender + implementation admits a layout but can also work without it, + then the appender should return true. + + + This default implementation always returns true. + + + + true if the appender requires a layout object, otherwise false. + + + + + The default buffer size. + + + The default size of the cyclic buffer used to store events. + This is set to 512 by default. + + + + + Initializes a new instance of the class. + + + + Protected default constructor to allow subclassing. + + + + + + Initializes a new instance of the class. + + the events passed through this appender must be + fixed by the time that they arrive in the derived class' SendBuffer method. + + + Protected constructor to allow subclassing. + + + The should be set if the subclass + expects the events delivered to be fixed even if the + is set to zero, i.e. when no buffering occurs. + + + + + + Flush the currently buffered events + + + + Flushes any events that have been buffered. + + + If the appender is buffering in mode then the contents + of the buffer will NOT be flushed to the appender. + + + + + + Flush the currently buffered events + + set to true to flush the buffer of lossy events + + + Flushes events that have been buffered. If is + false then events will only be flushed if this buffer is non-lossy mode. + + + If the appender is buffering in mode then the contents + of the buffer will only be flushed if is true. + In this case the contents of the buffer will be tested against the + and if triggering will be output. All other buffered + events will be discarded. + + + If is true then the buffer will always + be emptied by calling this method. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Close this appender instance. + + + + Close this appender instance. If this appender is marked + as not then the remaining events in + the buffer must be sent when the appender is closed. + + + + + + This method is called by the method. + + the event to log + + + Stores the in the cyclic buffer. + + + The buffer will be sent (i.e. passed to the + method) if one of the following conditions is met: + + + + The cyclic buffer is full and this appender is + marked as not lossy (see ) + + + An is set and + it is triggered for the + specified. + + + + Before the event is stored in the buffer it is fixed + (see ) to ensure that + any data referenced by the event will be valid when the buffer + is processed. + + + + + + Sends the contents of the buffer. + + The first logging event. + The buffer containing the events that need to be send. + + + The subclass must override . + + + + + + Sends the events. + + The events that need to be send. + + + The subclass must override this method to process the buffered events. + + + + + + The size of the cyclic buffer used to hold the logging events. + + + Set to by default. + + + + + The cyclic buffer used to store the logging events. + + + + + The triggering event evaluator that causes the buffer to be sent immediately. + + + The object that is used to determine if an event causes the entire + buffer to be sent immediately. This field can be null, which + indicates that event triggering is not to be done. The evaluator + can be set using the property. If this appender + has the ( property) set to + true then an must be set. + + + + + Indicates if the appender should overwrite events in the cyclic buffer + when it becomes full, or if the buffer should be flushed when the + buffer is full. + + + If this field is set to true then an must + be set. + + + + + The triggering event evaluator filters discarded events. + + + The object that is used to determine if an event that is discarded should + really be discarded or if it should be sent to the appenders. + This field can be null, which indicates that all discarded events will + be discarded. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + The events delivered to the subclass must be fixed. + + + + + Gets or sets a value that indicates whether the appender is lossy. + + + true if the appender is lossy, otherwise false. The default is false. + + + + This appender uses a buffer to store logging events before + delivering them. A triggering event causes the whole buffer + to be send to the remote sink. If the buffer overruns before + a triggering event then logging events could be lost. Set + to false to prevent logging events + from being lost. + + If is set to true then an + must be specified. + + + + + Gets or sets the size of the cyclic buffer used to hold the + logging events. + + + The size of the cyclic buffer used to hold the logging events. + + + + The option takes a positive integer + representing the maximum number of logging events to collect in + a cyclic buffer. When the is reached, + oldest events are deleted as new events are added to the + buffer. By default the size of the cyclic buffer is 512 events. + + + If the is set to a value less than + or equal to 1 then no buffering will occur. The logging event + will be delivered synchronously (depending on the + and properties). Otherwise the event will + be buffered. + + + + + + Gets or sets the that causes the + buffer to be sent immediately. + + + The that causes the buffer to be + sent immediately. + + + + The evaluator will be called for each event that is appended to this + appender. If the evaluator triggers then the current buffer will + immediately be sent (see ). + + If is set to true then an + must be specified. + + + + + Gets or sets the value of the to use. + + + The value of the to use. + + + + The evaluator will be called for each event that is discarded from this + appender. If the evaluator triggers then the current buffer will immediately + be sent (see ). + + + + + + Gets or sets a value indicating if only part of the logging event data + should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the + event data to be fixed and serialized. This will improve performance. + + + See for more information. + + + + + + Gets or sets a the fields that will be fixed in the event + + + The event fields that will be fixed before the event is buffered + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + + Initializes a new instance of the class. + + + Public default constructor to initialize a new instance of this class. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Override the parent method to close the database + + + + Closes the database command and database connection. + + + + + + Inserts the events into the database. + + The events to insert into the database. + + + Insert all the events specified in the + array into the database. + + + + + + Adds a parameter to the command. + + The parameter to add to the command. + + + Adds a parameter to the ordered list of command parameters. + + + + + + Writes the events to the database using the transaction specified. + + The transaction that the events will be executed under. + The array of events to insert into the database. + + + The transaction argument can be null if the appender has been + configured not to use transactions. See + property for more information. + + + + + + Formats the log message into database statement text. + + The event being logged. + + This method can be overridden by subclasses to provide + more control over the format of the database statement. + + + Text that can be passed to a . + + + + + Connects to the database. + + + + + Retrieves the class type of the ADO.NET provider. + + + + Gets the Type of the ADO.NET provider to use to connect to the + database. This method resolves the type specified in the + property. + + + Subclasses can override this method to return a different type + if necessary. + + + The of the ADO.NET provider + + + + Prepares the database command and initialize the parameters. + + + + + Flag to indicate if we are using a command object + + + + Set to true when the appender is to use a prepared + statement or stored procedure to insert into the database. + + + + + + The list of objects. + + + + The list of objects. + + + + + + The security context to use for privileged calls + + + + + The that will be used + to insert logging events into a database. + + + + + The database command. + + + + + Database connection string. + + + + + String type name of the type name. + + + + + The text of the command. + + + + + The command type. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Indicates whether to use transactions when writing to the database. + + + + + Gets or sets the database connection string that is used to connect to + the database. + + + The database connection string used to connect to the database. + + + + The connections string is specific to the connection type. + See for more information. + + + Connection string for MS Access via ODBC: + "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" + + Another connection string for MS Access via ODBC: + "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" + + Connection string for MS Access via OLE DB: + "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" + + + + + Gets or sets the type name of the connection + that should be created. + + + The type name of the connection. + + + + The type name of the ADO.NET provider to use. + + + The default is to use the OLE DB provider. + + + Use the OLE DB Provider. This is the default value. + System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the MS SQL Server Provider. + System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Use the ODBC Provider. + Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for ODBC .NET Data Provider. + + Use the Oracle Provider. + System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + This is an optional package that you can download from + http://msdn.microsoft.com/downloads + search for .NET Managed Provider for Oracle. + + + + + Gets or sets the command text that is used to insert logging events + into the database. + + + The command text used to insert logging events into the database. + + + + Either the text of the prepared statement or the + name of the stored procedure to execute to write into + the database. + + + The property determines if + this text is a prepared statement or a stored procedure. + + + + + + Gets or sets the command type to execute. + + + The command type to execute. + + + + This value may be either (System.Data.CommandType.Text) to specify + that the is a prepared statement to execute, + or (System.Data.CommandType.StoredProcedure) to specify that the + property is the name of a stored procedure + to execute. + + + The default value is (System.Data.CommandType.Text). + + + + + + Should transactions be used to insert logging events in the database. + + + true if transactions should be used to insert logging events in + the database, otherwise false. The default value is true. + + + + Gets or sets a value that indicates whether transactions should be used + to insert logging events in the database. + + + When set a single transaction will be used to insert the buffered events + into the database. Otherwise each event will be inserted without using + an explicit transaction. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Should this appender try to reconnect to the database on error. + + + true if the appender should try to reconnect to the database after an + error has occurred, otherwise false. The default value is false, + i.e. not to try to reconnect. + + + + The default behaviour is for the appender not to try to reconnect to the + database if an error occurs. Subsequent logging events are discarded. + + + To force the appender to attempt to reconnect to the database set this + property to true. + + + When the appender attempts to connect to the database there may be a + delay of up to the connection timeout specified in the connection string. + This delay will block the calling application's thread. + Until the connection can be reestablished this potential delay may occur multiple times. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to insert + logging events into a database. Classes deriving from + can use this property to get or set this . Use the + underlying returned from if + you require access beyond that which provides. + + + + + Parameter type used by the . + + + + This class provides the basic database parameter properties + as defined by the interface. + + This type can be subclassed to provide database specific + functionality. The two methods that are called externally are + and . + + + + + + Initializes a new instance of the class. + + + Default constructor for the AdoNetAppenderParameter class. + + + + + Prepare the specified database command object. + + The command to prepare. + + + Prepares the database command object by adding + this parameter to its collection of parameters. + + + + + + Renders the logging event and set the parameter value in the command. + + The command containing the parameter. + The event to be rendered. + + + Renders the logging event using this parameters layout + object. Sets the value of the parameter on the command object. + + + + + + The name of this parameter. + + + + + The database type for this parameter. + + + + + Flag to infer type rather than use the DbType + + + + + The precision for this parameter. + + + + + The scale for this parameter. + + + + + The size for this parameter. + + + + + The to use to render the + logging event into an object for this parameter. + + + + + Gets or sets the name of this parameter. + + + The name of this parameter. + + + + The name of this parameter. The parameter name + must match up to a named parameter to the SQL stored procedure + or prepared statement. + + + + + + Gets or sets the database type for this parameter. + + + The database type for this parameter. + + + + The database type for this parameter. This property should + be set to the database type from the + enumeration. See . + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the type from the value. + + + + + + + Gets or sets the precision for this parameter. + + + The precision for this parameter. + + + + The maximum number of digits used to represent the Value. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the precision from the value. + + + + + + + Gets or sets the scale for this parameter. + + + The scale for this parameter. + + + + The number of decimal places to which Value is resolved. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the scale from the value. + + + + + + + Gets or sets the size for this parameter. + + + The size for this parameter. + + + + The maximum size, in bytes, of the data within the column. + + + This property is optional. If not specified the ADO.NET provider + will attempt to infer the size from the value. + + + + + + + Gets or sets the to use to + render the logging event into an object for this + parameter. + + + The used to render the + logging event into an object for this parameter. + + + + The that renders the value for this + parameter. + + + The can be used to adapt + any into a + for use in the property. + + + + + + Appends logging events to the terminal using ANSI color escape sequences. + + + + AnsiColorTerminalAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific level of message to be set. + + + This appender expects the terminal to understand the VT100 control set + in order to interpret the color codes. If the terminal or console does not + understand the control codes the behavior is not defined. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + When configuring the ANSI colored terminal appender, a mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + + These color values cannot be combined together to make new colors. + + + The attributes can be any combination of the following: + + Brightforeground is brighter + Dimforeground is dimmer + Underscoremessage is underlined + Blinkforeground is blinking (does not work on all terminals) + Reverseforeground and background are reversed + Hiddenoutput is hidden + Strikethroughmessage has a line through it + + While any of these attributes may be combined together not all combinations + work well together, for example setting both Bright and Dim attributes makes + no sense. + + + Patrick Wagstrom + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Ansi code to reset terminal + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Add a mapping of level to color + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colours + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + Target is the value of the console output stream. + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible display attributes + + + + The following flags can be combined together to + form the ANSI color attributes. + + + + + + + text is bright + + + + + text is dim + + + + + text is underlined + + + + + text is blinking + + + Not all terminals support this attribute + + + + + text and background colors are reversed + + + + + text is hidden + + + + + text is displayed with a strikethrough + + + + + The enum of possible foreground or background color values for + use with the color mapping method + + + + The output can be in one for the following ANSI colors. + + + + + + + color is black + + + + + color is red + + + + + color is green + + + + + color is yellow + + + + + color is blue + + + + + color is magenta + + + + + color is cyan + + + + + color is white + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + An entry in the + + + + This is an abstract base class for types that are stored in the + object. + + + Nicko Cadell + + + + Default protected constructor + + + + Default protected constructor + + + + + + Initialize any options defined on this entry + + + + Should be overridden by any classes that need to initialise based on their options + + + + + + The level that is the key for this mapping + + + The that is the key for this mapping + + + + Get or set the that is the key for this + mapping subclass. + + + + + + Initialize the options for the object + + + + Combine the and together + and append the attributes. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level + + + + + + The color attributes for the specified level + + + + Required property. + The color attributes for the specified level + + + + + + The combined , and + suitable for setting the ansi terminal color. + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a AppenderCollection instance. + + list to create a readonly wrapper arround + + An AppenderCollection wrapper that is read-only. + + + + + An empty readonly static AppenderCollection + + + + + Initializes a new instance of the AppenderCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the AppenderCollection class + that has the specified initial capacity. + + + The number of elements that the new AppenderCollection is initially capable of storing. + + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified AppenderCollection. + + The AppenderCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the AppenderCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire AppenderCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire AppenderCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the AppenderCollection. + + The to be added to the end of the AppenderCollection. + The index at which the value has been added. + + + + Removes all elements from the AppenderCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the AppenderCollection. + + The to check for. + true if is found in the AppenderCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the AppenderCollection. + + The to locate in the AppenderCollection. + + The zero-based index of the first occurrence of + in the entire AppenderCollection, if found; otherwise, -1. + + + + + Inserts an element into the AppenderCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the AppenderCollection. + + The to remove from the AppenderCollection. + + The specified was not found in the AppenderCollection. + + + + + Removes the element at the specified index of the AppenderCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the AppenderCollection. + + An for the entire AppenderCollection. + + + + Adds the elements of another AppenderCollection to the current AppenderCollection. + + The AppenderCollection whose elements should be added to the end of the current AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a array to the current AppenderCollection. + + The array whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Adds the elements of a collection to the current AppenderCollection. + + The collection whose elements should be added to the end of the AppenderCollection. + The new of the AppenderCollection. + + + + Sets the capacity to the actual number of elements. + + + + + Return the collection elements as an array + + the array + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the AppenderCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the AppenderCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + + + + + Appends log events to the ASP.NET system. + + + + + Diagnostic information and tracing messages that you specify are appended to the output + of the page that is sent to the requesting browser. Optionally, you can view this information + from a separate trace viewer (Trace.axd) that displays trace information for every page in a + given application. + + + Trace statements are processed and displayed only when tracing is enabled. You can control + whether tracing is displayed to a page, to the trace viewer, or both. + + + The logging event is passed to the or + method depending on the level of the logging event. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the ASP.NET trace + + the event to log + + + Write the logging event to the ASP.NET trace + HttpContext.Current.Trace + (). + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Buffers events and then forwards them to attached appenders. + + + + The events are buffered in this appender until conditions are + met to allow the appender to deliver the events to the attached + appenders. See for the + conditions that cause the buffer to be sent. + + The forwarding appender can be used to specify different + thresholds and filters for the same appender at different locations + within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Interface for attaching appenders to objects. + + + + Interface for attaching, removing and retrieving appenders. + + + Nicko Cadell + Gert Driesen + + + + Attaches an appender. + + The appender to add. + + + Add the specified appender. The implementation may + choose to allow or deny duplicate appenders. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Returns an attached appender with the specified. + If no appender with the specified name is found null will be + returned. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Gets all attached appenders. + + + A collection of attached appenders. + + + + Gets a collection of attached appenders. + If there are no attached appenders the + implementation should return an empty + collection rather than null. + + + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Send the events. + + The events that need to be send. + + + Forwards the events to the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this buffering appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Appends logging events to the console. + + + + ColoredConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. It also allows the color of a specific type of message to be set. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes directly to the application's attached console + not to the System.Console.Out or System.Console.Error TextWriter. + The System.Console.Out and System.Console.Error streams can be + programmatically redirected (for example NUnit does this to capture program output). + This appender will ignore these redirections because it needs to use Win32 + API calls to colorize the output. To respect these redirections the + must be used. + + + When configuring the colored console appender, mapping should be + specified to map a logging level to a color. For example: + + + + + + + + + + + + + + The Level is the standard log4net logging level and ForeColor and BackColor can be any + combination of the following values: + + Blue + Green + Red + White + Yellow + Purple + Cyan + HighIntensity + + + + Rick Hobbs + Nicko Cadell + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + Add a mapping of level to color - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the foreground and background colors + for a level. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to color mappings set on this appender. + + + + + + Flag to write output to the error stream rather than the standard output stream + + + + + Mapping from level object to color value + + + + + The console output stream writer to write to + + + + This writer is not thread safe. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + The enum of possible color values for use with the color mapping method + + + + The following flags can be combined together to + form the colors. + + + + + + + color is blue + + + + + color is green + + + + + color is red + + + + + color is white + + + + + color is yellow + + + + + color is purple + + + + + color is cyan + + + + + color is intensified + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and the color it should be displayed in. + + + + + + Initialize the options for the object + + + + Combine the and together. + + + + + + The mapped foreground color for the specified level + + + + Required property. + The mapped foreground color for the specified level. + + + + + + The mapped background color for the specified level + + + + Required property. + The mapped background color for the specified level. + + + + + + The combined and suitable for + setting the console color. + + + + + Appends logging events to the console. + + + + ConsoleAppender appends log events to the standard output stream + or the error output stream using a layout specified by the + user. + + + By default, all output is written to the console's standard output stream. + The property can be set to direct the output to the + error stream. + + + NOTE: This appender writes each message to the System.Console.Out or + System.Console.Error that is set at the time the event is appended. + Therefore it is possible to programmatically redirect the output of this appender + (for example NUnit does this to capture program output). While this is the desired + behavior of this appender it may have security implications in your application. + + + Nicko Cadell + Gert Driesen + + + + The to use when writing to the Console + standard output stream. + + + + The to use when writing to the Console + standard output stream. + + + + + + The to use when writing to the Console + standard error output stream. + + + + The to use when writing to the Console + standard error output stream. + + + + + + Initializes a new instance of the class. + + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + + The instance of the class is set up to write + to the standard output stream. + + + + + Initializes a new instance of the class + with the specified layout. + + the layout to use for this appender + flag set to true to write to the console error stream + + When is set to true, output is written to + the standard error output stream. Otherwise, output is written to the standard + output stream. + + + + + This method is called by the method. + + The event to log. + + + Writes the event to the console. + + + The format of the output will depend on the appender's layout. + + + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + Target is the value of the console output stream. + This is either "Console.Out" or "Console.Error". + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + debug system. + + + Events are written using the + method. The event's logger name is passed as the value for the category name to the Write method. + + + Nicko Cadell + + + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + If is true then the + is called. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Writes events to the system event log. + + + + The EventID of the event log entry can be + set using the EventLogEventID property () + on the . + + + There is a limit of 32K characters for an event log message + + + When configuring the EventLogAppender a mapping can be + specified to map a logging level to an event log entry type. For example: + + + <mapping> + <level value="ERROR" /> + <eventLogEntryType value="Error" /> + </mapping> + <mapping> + <level value="DEBUG" /> + <eventLogEntryType value="Information" /> + </mapping> + + + The Level is the standard log4net logging level and eventLogEntryType can be any value + from the enum, i.e.: + + Erroran error event + Warninga warning event + Informationan informational event + + + + Aspi Havewala + Douglas de la Torre + Nicko Cadell + Gert Driesen + Thomas Voss + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class + with the specified . + + The to use with this appender. + + + Obsolete constructor. + + + + + + Add a mapping of level to - done by the config file + + The mapping to add + + + Add a mapping to this appender. + Each mapping defines the event log entry type for a level. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create an event log source + + + Uses different API calls under NET_2_0 + + + + + This method is called by the + method. + + the event to log + + Writes the event to the system event log using the + . + + If the event has an EventID property (see ) + set then this integer will be used as the event log event id. + + + There is a limit of 32K characters for an event log message + + + + + + Get the equivalent for a + + the Level to convert to an EventLogEntryType + The equivalent for a + + Because there are fewer applicable + values to use in logging levels than there are in the + this is a one way mapping. There is + a loss of information during the conversion. + + + + + The log name is the section in the event logs where the messages + are stored. + + + + + Name of the application to use when logging. This appears in the + application column of the event log named by . + + + + + The name of the machine which holds the event log. This is + currently only allowed to be '.' i.e. the current machine. + + + + + Mapping from level object to EventLogEntryType + + + + + The security context to use for privileged calls + + + + + The name of the log where messages will be stored. + + + The string name of the log where messages will be stored. + + + This is the name of the log as it appears in the Event Viewer + tree. The default value is to log into the Application + log, this is where most applications write their events. However + if you need a separate log for your application (or applications) + then you should set the appropriately. + This should not be used to distinguish your event log messages + from those of other applications, the + property should be used to distinguish events. This property should be + used to group together events into a single log. + + + + + + Property used to set the Application name. This appears in the + event logs when logging. + + + The string used to distinguish events from different sources. + + + Sets the event log source property. + + + + + This property is used to return the name of the computer to use + when accessing the event logs. Currently, this is the current + computer, denoted by a dot "." + + + The string name of the machine holding the event log that + will be logged into. + + + This property cannot be changed. It is currently set to '.' + i.e. the local machine. This may be changed in future. + + + + + Gets or sets the used to write to the EventLog. + + + The used to write to the EventLog. + + + + The system security context used to write to the EventLog. + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + A class to act as a mapping between the level that a logging call is made at and + the color it should be displayed as. + + + + Defines the mapping between a level and its event log entry type. + + + + + + The for this entry + + + + Required property. + The for this entry + + + + + + Appends logging events to a file. + + + + Logging events are sent to the file specified by + the property. + + + The file can be opened in either append or overwrite mode + by specifying the property. + If the file path is relative it is taken as relative from + the application base directory. The file encoding can be + specified by setting the property. + + + The layout's and + values will be written each time the file is opened and closed + respectively. If the property is + then the file may contain multiple copies of the header and footer. + + + This appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + The supports pluggable file locking models via + the property. + The default behavior, implemented by + is to obtain an exclusive write lock on the file until this appender is closed. + The alternative model, , only holds a + write lock while the appender is writing a logging event. + + + Nicko Cadell + Gert Driesen + Rodrigo B. de Oliveira + Douglas de la Torre + Niall Daley + + + + Sends logging events to a . + + + + An Appender that writes to a . + + + This appender may be used stand alone if initialized with an appropriate + writer, however it is typically used as a base class for an appender that + can open a to write to. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initializes a new instance of the class and + sets the output destination to a new initialized + with the specified . + + The layout to use with this appender. + The to output to. + + + Obsolete constructor. + + + + + + Initializes a new instance of the class and sets + the output destination to the specified . + + The layout to use with this appender + The to output to + + The must have been previously opened. + + + + Obsolete constructor. + + + + + + This method determines if there is a sense in attempting to append. + + + + This method checked if an output target has been set and if a + layout has been set. + + + false if any of the preconditions fail. + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + This method writes all the bulk logged events to the output writer + before flushing the stream. + + + + + + Close this appender instance. The underlying stream or writer is also closed. + + + Closed appenders cannot be reused. + + + + + Writes the footer and closes the underlying . + + + + Writes the footer and closes the underlying . + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Clears internal references to the underlying + and other variables. + + + + Subclasses can override this method for an alternate closing behavior. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Called to allow a subclass to lazily initialize the writer + + + + This method is called when an event is logged and the or + have not been set. This allows a subclass to + attempt to initialize the writer multiple times. + + + + + + This is the where logging events + will be written to. + + + + + Immediate flush means that the underlying + or output stream will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logging events are not actually persisted if and when the application + crashes. + + + The default value is true. + + + + + + Gets or set whether the appender will flush at the end + of each append operation. + + + + The default behavior is to flush at the end of each + append operation. + + + If this option is set to false, then the underlying + stream can defer persisting the logging event to a later + time. + + + + Avoiding the flush operation at the end of each append results in + a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + Sets the where the log output will go. + + + + The specified must be open and writable. + + + The will be closed when the appender + instance is closed. + + + Note: Logging to an unopened will fail. + + + + + + Gets or set the and the underlying + , if any, for this appender. + + + The for this appender. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Gets or sets the where logging events + will be written to. + + + The where logging events are written. + + + + This is the where logging events + will be written to. + + + + + + Default constructor + + + + Default constructor + + + + + + Construct a new appender using the layout, file and append mode. + + the layout to use with this appender + the full path to the file to write to + flag to indicate if the file should be appended to + + + Obsolete constructor. + + + + + + Construct a new appender using the layout and file specified. + The file will be appended to. + + the layout to use with this appender + the full path to the file to write to + + + Obsolete constructor. + + + + + + Activate the options on the file appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This will cause the file to be opened. + + + + + + Closes any previously opened file and calls the parent's . + + + + Resets the filename and the file stream. + + + + + + Called to initialize the file writer + + + + Will be called for each logged message until the file is + successfully opened. + + + + + + This method is called by the + method. + + The event to log. + + + Writes a log statement to the output stream if the output stream exists + and is writable. + + + The format of the output will depend on the appender's layout. + + + + + + This method is called by the + method. + + The array of events to log. + + + Acquires the output file locks once before writing all the events to + the stream. + + + + + + Writes a footer as produced by the embedded layout's property. + + + + Writes a footer as produced by the embedded layout's property. + + + + + + Writes a header produced by the embedded layout's property. + + + + Writes a header produced by the embedded layout's property. + + + + + + Closes the underlying . + + + + Closes the underlying . + + + + + + Closes the previously opened file. + + + + Writes the to the file and then + closes the file. + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + Calls but guarantees not to throw an exception. + Errors are passed to the . + + + + + + Sets and opens the file where the log output will go. The specified file must be writable. + + The path to the log file. Must be a fully qualified path. + If true will append to fileName. Otherwise will truncate fileName + + + If there was already an opened file, then the previous file + is closed first. + + + This method will ensure that the directory structure + for the specified exists. + + + + + + Sets the quiet writer used for file output + + the file stream that has been opened for writing + + + This implementation of creates a + over the and passes it to the + method. + + + This method can be overridden by sub classes that want to wrap the + in some way, for example to encrypt the output + data using a System.Security.Cryptography.CryptoStream. + + + + + + Sets the quiet writer being used. + + the writer over the file stream that has been opened for writing + + + This method can be overridden by sub classes that want to + wrap the in some way. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + Flag to indicate if we should append to the file + or overwrite the file. The default is to append. + + + + + The name of the log file. + + + + + The encoding to use for the file stream. + + + + + The security context to use for privileged calls + + + + + The stream to log to. Has added locking semantics + + + + + The locking model to use + + + + + Gets or sets the path to the file that logging will be written to. + + + The path to the file that logging will be written to. + + + + If the path is relative it is taken as relative from + the application base directory. + + + + + + Gets or sets a flag that indicates whether the file should be + appended to or overwritten. + + + Indicates whether the file should be appended to or overwritten. + + + + If the value is set to false then the file will be overwritten, if + it is set to true then the file will be appended to. + + The default value is true. + + + + + Gets or sets used to write to the file. + + + The used to write to the file. + + + + The default encoding set is + which is the encoding for the system's current ANSI code page. + + + + + + Gets or sets the used to write to the file. + + + The used to write to the file. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + Gets or sets the used to handle locking of the file. + + + The used to lock the file. + + + + Gets or sets the used to handle locking of the file. + + + There are two built in locking models, and . + The former locks the file from the start of logging to the end and the + later lock only for the minimal amount of time when logging each message. + + + The default locking model is the . + + + + + + Write only that uses the + to manage access to an underlying resource. + + + + + True asynchronous writes are not supported, the implementation forces a synchronous write. + + + + + Exception base type for log4net. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class with + the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Locking model base class + + + + Base class for the locking models available to the derived loggers. + + + + + + Open the output file + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + Gets or sets the for this LockingModel + + + The for this LockingModel + + + + The file appender this locking model is attached to and working on + behalf of. + + + The file appender is used to locate the security context and the error handler to use. + + + The value of this property will be set before is + called. + + + + + + Hold an exclusive lock on the output file + + + + Open the file once for writing and hold it open until is called. + Maintains an exclusive lock on the file during this time. + + + + + + Open the file specified and prepare for logging. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Does nothing. The lock is already taken + + + + + + Release the lock on the file + + + + Does nothing. The lock will be released when the file is closed. + + + + + + Acquires the file lock for each write + + + + Opens the file once for each / cycle, + thus holding the lock for the minimal amount of time. This method of locking + is considerably slower than but allows + other processes to move/delete the log file whilst logging continues. + + + + + + Prepares to open the file when the first message is logged. + + The filename to use + Whether to append to the file, or overwrite + The encoding to use + + + Open the file specified and prepare for logging. + No writes will be made until is called. + Must be called before any calls to , + and . + + + + + + Close the file + + + + Close the file. No further writes will be made. + + + + + + Acquire the lock on the file + + A stream that is ready to be written to. + + + Acquire the lock on the file in preparation for writing to it. + Return a stream pointing to the file. + must be called to release the lock on the output file. + + + + + + Release the lock on the file + + + + Release the lock on the file. No further writes will be made to the + stream until is called again. + + + + + + This appender forwards logging events to attached appenders. + + + + The forwarding appender can be used to specify different thresholds + and filters for the same appender at different locations within the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Closes the appender and releases resources. + + + + Releases any resources allocated within the appender such as file handles, + network connections, etc. + + + It is a programming error to append to a closed appender. + + + + + + Forward the logging event to the attached appenders + + The event to log. + + + Delivers the logging event to all the attached appenders. + + + + + + Forward the logging events to the attached appenders + + The array of events to log. + + + Delivers the logging events to all the attached appenders. + + + + + + Adds an to the list of appenders of this + instance. + + The to add to this appender. + + + If the specified is already in the list of + appenders, then it won't be added again. + + + + + + Looks for the appender with the specified name. + + The name of the appender to lookup. + + The appender with the specified name, or null. + + + + Get the named appender attached to this appender. + + + + + + Removes all previously added appenders from this appender. + + + + This is useful when re-reading configuration information. + + + + + + Removes the specified appender from the list of appenders. + + The appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + Implementation of the interface + + + + + Gets the appenders contained in this appender as an + . + + + If no appenders can be found, then an + is returned. + + + A collection of the appenders in this appender. + + + + + Logs events to a local syslog service. + + + + This appender uses the POSIX libc library functions openlog, syslog, and closelog. + If these functions are not available on the local system then this appender will not work! + + + The functions openlog, syslog, and closelog are specified in SUSv2 and + POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. + + + This appender talks to a local syslog service. If you need to log to a remote syslog + daemon and you cannot configure your local syslog service to do this you may be + able to use the to log via UDP. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a local syslog service. + + + + + Add a mapping of level to severity + + The mapping to add + + + Adds a to this appender. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Close the syslog when the appender is closed + + + + Close the syslog when the appender is closed + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + + The facility. The default facility is . + + + + + The message identity + + + + + Marshaled handle to the identity string. We have to hold on to the + string as the openlog and syslog APIs just hold the + pointer to the ident and dereference it for each log message. + + + + + Mapping from level object to syslog severity + + + + + Open connection to system logger. + + + + + Generate a log message. + + + + The libc syslog method takes a format string and a variable argument list similar + to the classic printf function. As this type of vararg list is not supported + by C# we need to specify the arguments explicitly. Here we have specified the + format string with a single message argument. The caller must set the format + string to "%s". + + + + + + Close descriptor used to write to system logger. + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + syslog severities + + + + The log4net Level maps to a syslog severity using the + method and the + class. The severity is set on . + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facility defines which subsystem the logging comes from. + This is set on the property. + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Stores logging events in an array. + + + + The memory appender stores all the logging events + that are appended in an in-memory array. + + + Use the method to get + the current list of events that have been appended. + + + Use the method to clear the + current list of events. + + + Julian Biddle + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Gets the events that have been logged. + + The events that have been logged + + + Gets the events that have been logged. + + + + + + This method is called by the method. + + the event to log + + Stores the in the events list. + + + + + Clear the list of events + + + Clear the list of events + + + + + The list of events that have been appended. + + + + + Value indicating which fields in the event should be fixed + + + By default all fields are fixed + + + + + Gets or sets a value indicating whether only part of the logging event + data should be fixed. + + + true if the appender should only fix part of the logging event + data, otherwise false. The default is false. + + + + Setting this property to true will cause only part of the event + data to be fixed and stored in the appender, hereby improving performance. + + + See for more information. + + + + + + Gets or sets the fields that will be fixed in the event + + + + The logging event needs to have certain thread specific values + captured before it can be buffered. See + for details. + + + + + + Logs entries by sending network messages using the + native function. + + + + You can send messages only to names that are active + on the network. If you send the message to a user name, + that user must be logged on and running the Messenger + service to receive the message. + + + The receiver will get a top most window displaying the + messages one at a time, therefore this appender should + not be used to deliver a high volume of messages. + + + The following table lists some possible uses for this appender : + + + + + Action + Property Value(s) + + + Send a message to a user account on the local machine + + + = <name of the local machine> + + + = <user name> + + + + + Send a message to a user account on a remote machine + + + = <name of the remote machine> + + + = <user name> + + + + + Send a message to a domain user account + + + = <name of a domain controller | uninitialized> + + + = <user name> + + + + + Send a message to all the names in a workgroup or domain + + + = <workgroup name | domain name>* + + + + + Send a message from the local machine to a remote machine + + + = <name of the local machine | uninitialized> + + + = <name of the remote machine> + + + + + + + Note : security restrictions apply for sending + network messages, see + for more information. + + + + + An example configuration section to log information + using this appender from the local machine, named + LOCAL_PC, to machine OPERATOR_PC : + + + + + + + + + + Nicko Cadell + Gert Driesen + + + + The DNS or NetBIOS name of the server on which the function is to execute. + + + + + The sender of the network message. + + + + + The message alias to which the message should be sent. + + + + + The security context to use for privileged calls + + + + + Initializes the appender. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified. + + + The required property was not specified. + + + + This method is called by the method. + + The event to log. + + + Sends the event using a network message. + + + + + + Sends a buffer of information to a registered message alias. + + The DNS or NetBIOS name of the server on which the function is to execute. + The message alias to which the message buffer should be sent + The originator of the message. + The message text. + The length, in bytes, of the message text. + + + The following restrictions apply for sending network messages: + + + + + Platform + Requirements + + + Windows NT + + + No special group membership is required to send a network message. + + + Admin, Accounts, Print, or Server Operator group membership is required to + successfully send a network message on a remote server. + + + + + Windows 2000 or later + + + If you send a message on a domain controller that is running Active Directory, + access is allowed or denied based on the access control list (ACL) for the securable + object. The default ACL permits only Domain Admins and Account Operators to send a network message. + + + On a member server or workstation, only Administrators and Server Operators can send a network message. + + + + + + + For more information see Security Requirements for the Network Management Functions. + + + + + If the function succeeds, the return value is zero. + + + + + + Gets or sets the sender of the message. + + + The sender of the message. + + + If this property is not specified, the message is sent from the local computer. + + + + + Gets or sets the message alias to which the message should be sent. + + + The recipient of the message. + + + This property should always be specified in order to send a message. + + + + + Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. + + + DNS or NetBIOS name of the remote server on which the function is to execute. + + + + For Windows NT 4.0 and earlier, the string should begin with \\. + + + If this property is not specified, the local computer is used. + + + + + + Gets or sets the used to call the NetSend method. + + + The used to call the NetSend method. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appends log events to the OutputDebugString system. + + + + OutputDebugStringAppender appends log events to the + OutputDebugString system. + + + The string is passed to the native OutputDebugString + function. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Write the logging event to the output debug string API + + the event to log + + + Write the logging event to the output debug string API + + + + + + Stub for OutputDebugString native method + + the string to output + + + Stub for OutputDebugString native method + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Logs events to a remote syslog daemon. + + + + The BSD syslog protocol is used to remotely log to + a syslog daemon. The syslogd listens for for messages + on UDP port 514. + + + The syslog UDP protocol is not authenticated. Most syslog daemons + do not accept remote log messages because of the security implications. + You may be able to use the LocalSyslogAppender to talk to a local + syslog service. + + + There is an RFC 3164 that claims to document the BSD Syslog Protocol. + This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. + This appender generates what the RFC calls an "Original Device Message", + i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation + this format of message will be accepted by all current syslog daemon + implementations. The daemon will attach the current time and the source + hostname or IP address to any messages received. + + + Syslog messages must have a facility and and a severity. The severity + is derived from the Level of the logging event. + The facility must be chosen from the set of defined syslog + values. The facilities list is predefined + and cannot be extended. + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + Rob Lyon + Nicko Cadell + + + + Sends logging events as connectionless UDP datagrams to a remote host or a + multicast group using an . + + + + UDP guarantees neither that messages arrive, nor that they arrive in the correct order. + + + To view the logging results, a custom application can be developed that listens for logging + events. + + + When decoding events send via this appender remember to use the same encoding + to decode the events as was used to send the events. See the + property to specify the encoding to use. + + + + This example shows how to log receive logging events that are sent + on IP address 244.0.0.1 and port 8080 to the console. The event is + encoded in the packet as a unicode string and it is decoded as such. + + IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); + UdpClient udpClient; + byte[] buffer; + string loggingEvent; + + try + { + udpClient = new UdpClient(8080); + + while(true) + { + buffer = udpClient.Receive(ref remoteEndPoint); + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); + Console.WriteLine(loggingEvent); + } + } + catch(Exception e) + { + Console.WriteLine(e.ToString()); + } + + + Dim remoteEndPoint as IPEndPoint + Dim udpClient as UdpClient + Dim buffer as Byte() + Dim loggingEvent as String + + Try + remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) + udpClient = new UdpClient(8080) + + While True + buffer = udpClient.Receive(ByRef remoteEndPoint) + loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) + Console.WriteLine(loggingEvent) + Wend + Catch e As Exception + Console.WriteLine(e.ToString()) + End Try + + + An example configuration section to log information using this appender to the + IP 224.0.0.1 on port 8080: + + + + + + + + + + Gert Driesen + Nicko Cadell + + + + Initializes a new instance of the class. + + + The default constructor initializes all fields to their default values. + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The appender will be ignored if no was specified or + an invalid remote or local TCP port number was specified. + + + The required property was not specified. + The TCP port number assigned to or is less than or greater than . + + + + This method is called by the method. + + The event to log. + + + Sends the event using an UDP datagram. + + + Exceptions are passed to the . + + + + + + Closes the UDP connection and releases all resources associated with + this instance. + + + + Disables the underlying and releases all managed + and unmanaged resources associated with the . + + + + + + Initializes the underlying connection. + + + + The underlying is initialized and binds to the + port number from which you intend to communicate. + + + Exceptions are passed to the . + + + + + + The IP address of the remote host or multicast group to which + the logging event will be sent. + + + + + The TCP port number of the remote host or multicast group to + which the logging event will be sent. + + + + + The cached remote endpoint to which the logging events will be sent. + + + + + The TCP port number from which the will communicate. + + + + + The instance that will be used for sending the + logging events. + + + + + The encoding to use for the packet. + + + + + Gets or sets the IP address of the remote host or multicast group to which + the underlying should sent the logging event. + + + The IP address of the remote host or multicast group to which the logging event + will be sent. + + + + Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to + 239.255.255.255). Multicast packets can pass across different networks through routers, so + it is possible to use multicasts in an Internet scenario as long as your network provider + supports multicasting. + + + Hosts that want to receive particular multicast messages must register their interest by joining + the multicast group. Multicast messages are not sent to networks where no host has joined + the multicast group. Class D IP addresses are used for multicast groups, to differentiate + them from normal host addresses, allowing nodes to easily detect if a message is of interest. + + + Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: + + + + + IP Address + Description + + + 224.0.0.1 + + + Sends a message to all system on the subnet. + + + + + 224.0.0.2 + + + Sends a message to all routers on the subnet. + + + + + 224.0.0.12 + + + The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. + + + + + + + A complete list of actually reserved multicast addresses and their owners in the ranges + defined by RFC 3171 can be found at the IANA web site. + + + The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative + addresses. These addresses can be reused with other local groups. Routers are typically + configured with filters to prevent multicast traffic in this range from flowing outside + of the local network. + + + + + + Gets or sets the TCP port number of the remote host or multicast group to which + the underlying should sent the logging event. + + + An integer value in the range to + indicating the TCP port number of the remote host or multicast group to which the logging event + will be sent. + + + The underlying will send messages to this TCP port number + on the remote host or multicast group. + + The value specified is less than or greater than . + + + + Gets or sets the TCP port number from which the underlying will communicate. + + + An integer value in the range to + indicating the TCP port number from which the underlying will communicate. + + + + The underlying will bind to this port for sending messages. + + + Setting the value to 0 (the default) will cause the udp client not to bind to + a local port. + + + The value specified is less than or greater than . + + + + Gets or sets used to write the packets. + + + The used to write the packets. + + + + The used to write the packets. + + + + + + Gets or sets the underlying . + + + The underlying . + + + creates a to send logging events + over a network. Classes deriving from can use this + property to get or set this . Use the underlying + returned from if you require access beyond that which + provides. + + + + + Gets or sets the cached remote endpoint to which the logging events should be sent. + + + The cached remote endpoint to which the logging events will be sent. + + + The method will initialize the remote endpoint + with the values of the and + properties. + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Syslog port 514 + + + + + Initializes a new instance of the class. + + + This instance of the class is set up to write + to a remote syslog daemon. + + + + + Add a mapping of level to severity + + The mapping to add + + + Add a mapping to this appender. + + + + + + This method is called by the method. + + The event to log. + + + Writes the event to a remote syslog daemon. + + + The format of the output will depend on the appender's layout. + + + + + + Initialize the options for this appender + + + + Initialize the level to syslog severity mappings set on this appender. + + + + + + Translates a log4net level to a syslog severity. + + A log4net level. + A syslog severity. + + + Translates a log4net level to a syslog severity. + + + + + + Generate a syslog priority. + + The syslog facility. + The syslog severity. + A syslog priority. + + + Generate a syslog priority. + + + + + + The facility. The default facility is . + + + + + The message identity + + + + + Mapping from level object to syslog severity + + + + + Message identity + + + + An identifier is specified with each log message. This can be specified + by setting the property. The identity (also know + as the tag) must not contain white space. The default value for the + identity is the application name (from ). + + + + + + Syslog facility + + + Set to one of the values. The list of + facilities is predefined and cannot be extended. The default value + is . + + + + + syslog severities + + + + The syslog severities. + + + + + + system is unusable + + + + + action must be taken immediately + + + + + critical conditions + + + + + error conditions + + + + + warning conditions + + + + + normal but significant condition + + + + + informational + + + + + debug-level messages + + + + + syslog facilities + + + + The syslog facilities + + + + + + kernel messages + + + + + random user-level messages + + + + + mail system + + + + + system daemons + + + + + security/authorization messages + + + + + messages generated internally by syslogd + + + + + line printer subsystem + + + + + network news subsystem + + + + + UUCP subsystem + + + + + clock (cron/at) daemon + + + + + security/authorization messages (private) + + + + + ftp daemon + + + + + NTP subsystem + + + + + log audit + + + + + log alert + + + + + clock daemon + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + reserved for local use + + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + A class to act as a mapping between the level that a logging call is made at and + the syslog severity that is should be logged at. + + + + + + The mapped syslog severity for the specified level + + + + Required property. + The mapped syslog severity for the specified level + + + + + + Delivers logging events to a remote logging sink. + + + + This Appender is designed to deliver events to a remote sink. + That is any object that implements the + interface. It delivers the events using .NET remoting. The + object to deliver events to is specified by setting the + appenders property. + + The RemotingAppender buffers events before sending them. This allows it to + make more efficient use of the remoting infrastructure. + + Once the buffer is full the events are still not sent immediately. + They are scheduled to be sent using a pool thread. The effect is that + the send occurs asynchronously. This is very important for a + number of non obvious reasons. The remoting infrastructure will + flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + Because the events are sent asynchronously using pool threads it is possible to close + this appender before all the queued events have been sent. + When closing the appender attempts to wait until all the queued events have been sent, but + this will timeout after 30 seconds regardless. + + If this appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. If the runtime terminates the threads before + the queued events have been sent then they will be lost. To ensure that all events + are sent the appender must be closed before the application exits. See + for details on how to shutdown + log4net programmatically. + + + Nicko Cadell + Gert Driesen + Daniel Cazzulino + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Send the contents of the buffer to the remote sink. + + + The events are not sent immediately. They are scheduled to be sent + using a pool thread. The effect is that the send occurs asynchronously. + This is very important for a number of non obvious reasons. The remoting + infrastructure will flow thread local variables (stored in the ), + if they are marked as , across the + remoting boundary. If the server is not contactable then + the remoting infrastructure will clear the + objects from the . To prevent a logging failure from + having side effects on the calling application the remoting call must be made + from a separate thread to the one used by the application. A + thread is used for this. If no thread is available then + the events will block in the thread pool manager until a thread is available. + + The events to send. + + + + Override base class close. + + + + This method waits while there are queued work items. The events are + sent asynchronously using work items. These items + will be sent once a thread pool thread is available to send them, therefore + it is possible to close the appender before all the queued events have been + sent. + + This method attempts to wait until all the queued events have been sent, but this + method will timeout after 30 seconds regardless. + + If the appender is being closed because the + event has fired it may not be possible to send all the queued events. During process + exit the runtime limits the time that a + event handler is allowed to run for. + + + + + A work item is being queued into the thread pool + + + + + A work item from the thread pool has completed + + + + + Send the contents of the buffer to the remote sink. + + + This method is designed to be used with the . + This method expects to be passed an array of + objects in the state param. + + the logging events to send + + + + The URL of the remote sink. + + + + + The local proxy (.NET remoting) for the remote logging sink. + + + + + The number of queued callbacks currently waiting or executing + + + + + Event used to signal when there are no queued work items + + + This event is set when there are no queued work items. In this + state it is safe to close the appender. + + + + + Gets or sets the URL of the well-known object that will accept + the logging events. + + + The well-known URL of the remote sink. + + + + The URL of the remoting sink that will accept logging events. + The sink must implement the + interface. + + + + + + Interface used to deliver objects to a remote sink. + + + This interface must be implemented by a remoting sink + if the is to be used + to deliver logging events to the sink. + + + + + Delivers logging events to the remote sink + + Array of events to log. + + + Delivers logging events to the remote sink + + + + + + Appender that rolls log files based on size or date or both. + + + + RollingFileAppender can roll log files based on size or date or both + depending on the setting of the property. + When set to the log file will be rolled + once its size exceeds the . + When set to the log file will be rolled + once the date boundary specified in the property + is crossed. + When set to the log file will be + rolled once the date boundary specified in the property + is crossed, but within a date boundary the file will also be rolled + once its size exceeds the . + When set to the log file will be rolled when + the appender is configured. This effectively means that the log file can be + rolled once per program execution. + + + A of few additional optional features have been added: + + Attach date pattern for current log file + Backup number increments for newer files + Infinite number of backups by file size + + + + + + For large or infinite numbers of backup files a + greater than zero is highly recommended, otherwise all the backup files need + to be renamed each time a new backup is created. + + + When Date/Time based rolling is used setting + to will reduce the number of file renamings to few or none. + + + + + + Changing or without clearing + the log file directory of backup files will cause unexpected and unwanted side effects. + + + + + If Date/Time based rolling is enabled this appender will attempt to roll existing files + in the directory without a Date/Time tag based on the last write date of the base log file. + The appender only rolls the log file when a message is logged. If Date/Time based rolling + is enabled then the appender will not roll the log file at the Date/Time boundary but + at the point when the next message is logged after the boundary has been crossed. + + + + The extends the and + has the same behavior when opening the log file. + The appender will first try to open the file for writing when + is called. This will typically be during configuration. + If the file cannot be opened for writing the appender will attempt + to open the file again each time a message is logged to the appender. + If the file cannot be opened for writing when a message is logged then + the message will be discarded by this appender. + + + When rolling a backup file necessitates deleting an older backup file the + file to be deleted is moved to a temporary name before being deleted. + + + + + A maximum number of backup files when rolling on date/time boundaries is not supported. + + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + Edward Smit + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Sets the quiet writer being used. + + + This method can be overridden by sub classes. + + the writer to set + + + + Write out a logging event. + + the event to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Write out an array of logging events. + + the events to write to file. + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Performs any required rolling before outputting the next event + + + + Handles append time behavior for RollingFileAppender. This checks + if a roll over either by date (checked first) or time (checked second) + is need and then appends to the file last. + + + + + + Creates and opens the file for logging. If + is false then the fully qualified name is determined and used. + + the name of the file to open + true to append to existing file + + This method will ensure that the directory structure + for the specified exists. + + + + + Get the current output file name + + the base file name + the output file name + + The output file name is based on the base fileName specified. + If is set then the output + file name is the same as the base file passed in. Otherwise + the output file depends on the date pattern, on the count + direction or both. + + + + + Determines curSizeRollBackups (only within the current roll point) + + + + + Generates a wildcard pattern that can be used to find all files + that are similar to the base file name. + + + + + + + Builds a list of filenames for all files matching the base filename plus a file + pattern. + + + + + + + Initiates a roll over if needed for crossing a date boundary since the last run. + + + + + Initializes based on existing conditions at time of . + + + + Initializes based on existing conditions at time of . + The following is done + + determine curSizeRollBackups (only within the current roll point) + initiates a roll over if needed for crossing a date boundary since the last run. + + + + + + + Does the work of bumping the 'current' file counter higher + to the highest count when an incremental file name is seen. + The highest count is either the first file (when count direction + is greater than 0) or the last file (when count direction less than 0). + In either case, we want to know the highest count that is present. + + + + + + + Takes a list of files and a base file name, and looks for + 'incremented' versions of the base file. Bumps the max + count up to the highest count seen. + + + + + + + Calculates the RollPoint for the datePattern supplied. + + the date pattern to calculate the check period for + The RollPoint that is most accurate for the date pattern supplied + + Essentially the date pattern is examined to determine what the + most suitable roll point is. The roll point chosen is the roll point + with the smallest period that can be detected using the date pattern + supplied. i.e. if the date pattern only outputs the year, month, day + and hour then the smallest roll point that can be detected would be + and hourly roll point as minutes could not be detected. + + + + + Initialize the appender based on the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Sets initial conditions including date/time roll over information, first check, + scheduledFilename, and calls to initialize + the current number of backups. + + + + + + Rollover the file(s) to date/time tagged file(s). + + set to true if the file to be rolled is currently open + + + Rollover the file(s) to date/time tagged file(s). + Resets curSizeRollBackups. + If fileIsOpen is set then the new file is opened (through SafeOpenFile). + + + + + + Renames file to file . + + Name of existing file to roll. + New name for file. + + + Renames file to file . It + also checks for existence of target file and deletes if it does. + + + + + + Test if a file exists at a specified path + + the path to the file + true if the file exists + + + Test if a file exists at a specified path + + + + + + Deletes the specified file if it exists. + + The file to delete. + + + Delete a file if is exists. + The file is first moved to a new filename then deleted. + This allows the file to be removed even when it cannot + be deleted, but it still can be moved. + + + + + + Implements file roll base on file size. + + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. Moreover, File is + renamed File.1 and closed. + + + A new file is created to receive further log output. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + + + + Implements file roll. + + the base name to rename + + + If the maximum number of size based backups is reached + (curSizeRollBackups == maxSizeRollBackups) then the oldest + file is deleted -- its index determined by the sign of countDirection. + If countDirection < 0, then files + {File.1, ..., File.curSizeRollBackups -1} + are renamed to {File.2, ..., + File.curSizeRollBackups}. + + + If maxSizeRollBackups is equal to zero, then the + File is truncated with no backup files created. + + + If maxSizeRollBackups < 0, then File is + renamed if needed and no files are deleted. + + + This is called by to rename the files. + + + + + + Get the start time of the next window for the current rollpoint + + the current date + the type of roll point we are working with + the start time for the next roll point an interval after the currentDateTime date + + + Returns the date of the next roll point after the currentDateTime date passed to the method. + + + The basic strategy is to subtract the time parts that are less significant + than the rollpoint from the current time. This should roll the time back to + the start of the time window for the current rollpoint. Then we add 1 window + worth of time and get the start time of the next window for the rollpoint. + + + + + + This object supplies the current date/time. Allows test code to plug in + a method to control this class when testing date/time based rolling. + + + + + The date pattern. By default, the pattern is set to ".yyyy-MM-dd" + meaning daily rollover. + + + + + The actual formatted filename that is currently being written to + or will be the file transferred to on roll over + (based on staticLogFileName). + + + + + The timestamp when we shall next recompute the filename. + + + + + Holds date of last roll over + + + + + The type of rolling done + + + + + The default maximum file size is 10MB + + + + + There is zero backup files by default + + + + + How many sized based backups have been made so far + + + + + The rolling file count direction. + + + + + The rolling mode used in this appender. + + + + + Cache flag set if we are rolling by date. + + + + + Cache flag set if we are rolling by size. + + + + + Value indicating whether to always log to the same file. + + + + + FileName provided in configuration. Used for rolling properly + + + + + The 1st of January 1970 in UTC + + + + + Gets or sets the date pattern to be used for generating file names + when rolling over on date. + + + The date pattern to be used for generating file names when rolling + over on date. + + + + Takes a string in the same format as expected by + . + + + This property determines the rollover schedule when rolling over + on date. + + + + + + Gets or sets the maximum number of backup files that are kept before + the oldest is erased. + + + The maximum number of backup files that are kept before the oldest is + erased. + + + + If set to zero, then there will be no backup files and the log file + will be truncated when it reaches . + + + If a negative number is supplied then no deletions will be made. Note + that this could result in very slow performance as a large number of + files are rolled over unless is used. + + + The maximum applies to each time based group of files and + not the total. + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size in bytes that the output file is allowed to reach before being + rolled over to backup files. + + + + This property is equivalent to except + that it is required for differentiating the setter taking a + argument from the setter taking a + argument. + + + The default maximum file size is 10MB (10*1024*1024). + + + + + + Gets or sets the maximum size that the output file is allowed to reach + before being rolled over to backup files. + + + The maximum size that the output file is allowed to reach before being + rolled over to backup files. + + + + This property allows you to specify the maximum size with the + suffixes "KB", "MB" or "GB" so that the size is interpreted being + expressed respectively in kilobytes, megabytes or gigabytes. + + + For example, the value "10KB" will be interpreted as 10240 bytes. + + + The default maximum file size is 10MB. + + + If you have the option to set the maximum file size programmatically + consider using the property instead as this + allows you to set the size in bytes as a . + + + + + + Gets or sets the rolling file count direction. + + + The rolling file count direction. + + + + Indicates if the current file is the lowest numbered file or the + highest numbered file. + + + By default newer files have lower numbers ( < 0), + i.e. log.1 is most recent, log.5 is the 5th backup, etc... + + + >= 0 does the opposite i.e. + log.1 is the first backup made, log.5 is the 5th backup made, etc. + For infinite backups use >= 0 to reduce + rollover costs. + + The default file count direction is -1. + + + + + Gets or sets the rolling style. + + The rolling style. + + + The default rolling style is . + + + When set to this appender's + property is set to false, otherwise + the appender would append to a single file rather than rolling + the file each time it is opened. + + + + + + Gets or sets a value indicating whether to always log to + the same file. + + + true if always should be logged to the same file, otherwise false. + + + + By default file.log is always the current file. Optionally + file.log.yyyy-mm-dd for current formatted datePattern can by the currently + logging file (or file.log.curSizeRollBackup or even + file.log.yyyy-mm-dd.curSizeRollBackup). + + + This will make time based rollovers with a large number of backups + much faster as the appender it won't have to rename all the backups! + + + + + + Style of rolling to use + + + + Style of rolling to use + + + + + + Roll files once per program execution + + + + Roll files once per program execution. + Well really once each time this appender is + configured. + + + Setting this option also sets AppendToFile to + false on the RollingFileAppender, otherwise + this appender would just be a normal file appender. + + + + + + Roll files based only on the size of the file + + + + + Roll files based only on the date + + + + + Roll files based on both the size and date of the file + + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + The code assumes that the following 'time' constants are in a increasing sequence. + + + + + + Roll the log not based on the date + + + + + Roll the log for each minute + + + + + Roll the log for each hour + + + + + Roll the log twice a day (midday and midnight) + + + + + Roll the log each day (midnight) + + + + + Roll the log each week + + + + + Roll the log each month + + + + + This interface is used to supply Date/Time information to the . + + + This interface is used to supply Date/Time information to the . + Used primarily to allow test classes to plug themselves in so they can + supply test date/times. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Default implementation of that returns the current time. + + + + + Gets the current time. + + The current time. + + + Gets the current time. + + + + + + Send an e-mail when a specific logging event occurs, typically on errors + or fatal errors. + + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. + For these features to be enabled you need to ensure that you are using a version of + the log4net assembly that is built against the MS .NET 1.1 framework and that you are + running the your application on the MS .NET 1.1 runtime. On all other platforms only sending + unauthenticated messages to a server listening on port 25 (the default) is supported. + + + Authentication is supported by setting the property to + either or . + If using authentication then the + and properties must also be set. + + + To set the SMTP server port use the property. The default port is 25. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + + Send the email message + + the body text to include in the mail + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of recipient e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the name of the SMTP relay mail server to use to send + the e-mail messages. + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + The name of the e-mail relay server. If SmtpServer is not set, the + name of the local SMTP server is used. + + + + + + Obsolete + + + Use the BufferingAppenderSkeleton Fix methods instead + + + + Obsolete property. + + + + + + The mode to use to authentication with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + Valid Authentication mode values are: , + , and . + The default value is . When using + you must specify the + and to use to authenticate. + When using the Windows credentials for the current + thread, if impersonating, or the process will be used to authenticate. + + + + + + The username to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the username will be ignored. + + + + + + The password to use to authenticate with the SMTP server + + + Authentication is only available on the MS .NET 1.1 runtime. + + A and must be specified when + is set to , + otherwise the password will be ignored. + + + + + + The port on which the SMTP server is listening + + + Server Port is only available on the MS .NET 1.1 runtime. + + The port on which the SMTP server is listening. The default + port is 25. The Port can only be changed when running on + the MS .NET 1.1 runtime. + + + + + + Gets or sets the priority of the e-mail message + + + One of the values. + + + + Sets the priority of the e-mails generated by this + appender. The default priority is . + + + If you are using this appender to report errors then + you may want to set the priority to . + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Values for the property. + + + + SMTP authentication modes. + + + + + + No authentication + + + + + Basic authentication. + + + Requires a username and password to be supplied + + + + + Integrated authentication + + + Uses the Windows credentials from the current thread or process to authenticate. + + + + + Send an email when a specific logging event occurs, typically on errors + or fatal errors. Rather than sending via smtp it writes a file into the + directory specified by . This allows services such + as the IIS SMTP agent to manage sending the messages. + + + + The configuration for this appender is identical to that of the SMTPAppender, + except that instead of specifying the SMTPAppender.SMTPHost you specify + . + + + The number of logging events delivered in this e-mail depend on + the value of option. The + keeps only the last + logging events in its + cyclic buffer. This keeps memory requirements at a reasonable level while + still delivering useful application context. + + + Niall Daley + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Sends the contents of the cyclic buffer as an e-mail message. + + The logging events to send. + + + Sends the contents of the cyclic buffer as an e-mail message. + + + + + + Activate the options on this appender. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert a path into a fully qualified path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + + + + The security context to use for privileged calls + + + + + Gets or sets a semicolon-delimited list of recipient e-mail addresses. + + + A semicolon-delimited list of e-mail addresses. + + + + A semicolon-delimited list of e-mail addresses. + + + + + + Gets or sets the e-mail address of the sender. + + + The e-mail address of the sender. + + + + The e-mail address of the sender. + + + + + + Gets or sets the subject line of the e-mail message. + + + The subject line of the e-mail message. + + + + The subject line of the e-mail message. + + + + + + Gets or sets the path to write the messages to. + + + + Gets or sets the path to write the messages to. This should be the same + as that used by the agent sending the messages. + + + + + + Gets or sets the used to write to the pickup directory. + + + The used to write to the pickup directory. + + + + Unless a specified here for this appender + the is queried for the + security context to use. The default behavior is to use the security context + of the current thread. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Appender that allows clients to connect via Telnet to receive log messages + + + + The TelnetAppender accepts socket connections and streams logging messages + back to the client. + The output is provided in a telnet-friendly way so that a log can be monitored + over a TCP/IP socket. + This allows simple remote monitoring of application logging. + + + The default is 23 (the telnet port). + + + Keith Long + Nicko Cadell + + + + Default constructor + + + + Default constructor + + + + + + Overrides the parent method to close the socket handler + + + + Closes all the outstanding connections. + + + + + + Initialize the appender based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Create the socket handler and wait for connections + + + + + + Writes the logging event to each connected client. + + The event to log. + + + Writes the logging event to each connected client. + + + + + + Gets or sets the TCP port number on which this will listen for connections. + + + An integer value in the range to + indicating the TCP port number on which this will listen for connections. + + + + The default value is 23 (the telnet port). + + + The value specified is less than + or greater than . + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Helper class to manage connected clients + + + + The SocketHandler class is used to accept connections from + clients. It is threaded so that clients can connect/disconnect + asynchronously. + + + + + + Opens a new server port on + + the local port to listen on for connections + + + Creates a socket handler on the specified local server port. + + + + + + Sends a string message to each of the connected clients + + the text to send + + + Sends a string message to each of the connected clients + + + + + + Add a client to the internal clients list + + client to add + + + + Remove a client from the internal clients list + + client to remove + + + + Callback used to accept a connection on the server socket + + The result of the asynchronous operation + + + On connection adds to the list of connections + if there are two many open connections you will be disconnected + + + + + + Close all network connections + + + + Make sure we close all network connections + + + + + + Test if this handler has active connections + + + true if this handler has active connections + + + + This property will be true while this handler has + active connections, that is at least one connection that + the handler will attempt to send a message to. + + + + + + Class that represents a client connected to this handler + + + + Class that represents a client connected to this handler + + + + + + Create this for the specified + + the client's socket + + + Opens a stream writer on the socket. + + + + + + Write a string to the client + + string to send + + + Write a string to the client + + + + + + Cleanup the clients connection + + + + Close the socket connection. + + + + + + Appends log events to the system. + + + + The application configuration file can be used to control what listeners + are actually used. See the MSDN documentation for the + class for details on configuring the + trace system. + + + Events are written using the System.Diagnostics.Trace.Write(string,string) + method. The event's logger name is passed as the value for the category name to the Write method. + + + Compact Framework
+ The Compact Framework does not support the + class for any operation except Assert. When using the Compact Framework this + appender will write to the system rather than + the Trace system. This appender will therefore behave like the . +
+
+ Douglas de la Torre + Nicko Cadell + Gert Driesen +
+ + + Initializes a new instance of the . + + + + Default constructor. + + + + + + Initializes a new instance of the + with a specified layout. + + The layout to use with this appender. + + + Obsolete constructor. + + + + + + Writes the logging event to the system. + + The event to log. + + + Writes the logging event to the system. + + + + + + Immediate flush means that the underlying writer or output stream + will be flushed at the end of each append operation. + + + + Immediate flush is slower but ensures that each append request is + actually written. If is set to + false, then there is a good chance that the last few + logs events are not actually written to persistent media if and + when the application crashes. + + + The default value is true. + + + + + Gets or sets a value that indicates whether the appender will + flush at the end of each write. + + + The default behavior is to flush at the end of each + write. If the option is set tofalse, then the underlying + stream can defer writing to physical medium to a later time. + + + Avoiding the flush operation at the end of each append results + in a performance gain of 10 to 20 percent. However, there is safety + trade-off involved in skipping flushing. Indeed, when flushing is + skipped, then it is likely that the last few log events will not + be recorded on disk when the application exits. This is a high + price to pay even for a 20% performance gain. + + + + + + This appender requires a to be set. + + true + + + This appender requires a to be set. + + + + + + Assembly level attribute that specifies a domain to alias to this assembly's repository. + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's domain to its repository by + specifying this attribute with the name of the target domain. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required domains. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies a repository to alias to this assembly's repository. + + + + An assembly's logger repository is defined by its , + however this can be overridden by an assembly loaded before the target assembly. + + + An assembly can alias another assembly's repository to its repository by + specifying this attribute with the name of the target repository. + + + This attribute can only be specified on the assembly and may be used + as many times as necessary to alias all the required repositories. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + The repository to alias to this assemby's repository. + + + Initializes a new instance of the class with + the specified repository to alias to this assembly's repository. + + + + + + Gets or sets the repository to alias to this assemby's repository. + + + The repository to alias to this assemby's repository. + + + + The name of the repository to alias to this assemby's repository. + + + + + + Initializes a new instance of the class with + the specified domain to alias to this assembly's repository. + + The domain to alias to this assemby's repository. + + + Obsolete. Use instead of . + + + + + + Use this class to quickly configure a . + + + + Allows very simple programmatic configuration of log4net. + + + Only one appender can be configured using this configurator. + The appender is set at the root of the hierarchy and all logging + events will be delivered to that appender. + + + Appenders can also implement the interface. Therefore + they would require that the method + be called after the appenders properties have been configured. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Initializes the log4net system with a default configuration. + + + + Initializes the log4net logging system using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the log4net system using the specified appender. + + The appender to use to log all logging events. + + + Initializes the log4net system using the specified appender. + + + + + + Initializes the with a default configuration. + + The repository to configure. + + + Initializes the specified repository using a + that will write to Console.Out. The log messages are + formatted using the layout object + with the + layout style. + + + + + + Initializes the using the specified appender. + + The repository to configure. + The appender to use to log all logging events. + + + Initializes the using the specified appender. + + + + + + Base class for all log4net configuration attributes. + + + This is an abstract class that must be extended by + specific configurators. This attribute allows the + configurator to be parameterized by an assembly level + attribute. + + Nicko Cadell + Gert Driesen + + + + Constructor used by subclasses. + + the ordering priority for this configurator + + + The is used to order the configurator + attributes before they are invoked. Higher priority configurators are executed + before lower priority ones. + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Abstract method implemented by a subclass. When this method is called + the subclass should configure the . + + + + + + Compare this instance to another ConfiguratorAttribute + + the object to compare to + see + + + Compares the priorities of the two instances. + Sorts by priority in descending order. Objects with the same priority are + randomly ordered. + + + + + + Assembly level attribute that specifies the logging domain for the assembly. + + + + DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + Assemblies are mapped to logging domains. Each domain has its own + logging repository. This attribute specified on the assembly controls + the configuration of the domain. The property specifies the name + of the domain that this assembly is a part of. The + specifies the type of the repository objects to create for the domain. If + this attribute is not specified and a is not specified + then the assembly will be part of the default shared logging domain. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute that specifies the logging repository for the assembly. + + + + Assemblies are mapped to logging repository. This attribute specified + on the assembly controls + the configuration of the repository. The property specifies the name + of the repository that this assembly is a part of. The + specifies the type of the object + to create for the assembly. If this attribute is not specified or a + is not specified then the assembly will be part of the default shared logging repository. + + + This attribute can only be specified on the assembly and may only be used + once per assembly. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Initialize a new instance of the class + with the name of the repository. + + The name of the repository. + + + Initialize the attribute with the name for the assembly's repository. + + + + + + Gets or sets the name of the logging repository. + + + The string name to use as the name of the repository associated with this + assembly. + + + + This value does not have to be unique. Several assemblies can share the + same repository. They will share the logging configuration of the repository. + + + + + + Gets or sets the type of repository to create for this assembly. + + + The type of repository to create for this assembly. + + + + The type of the repository to create for the assembly. + The type must implement the + interface. + + + This will be the type of repository created when + the repository is created. If multiple assemblies reference the + same repository then the repository is only created once using the + of the first assembly to call into the + repository. + + + + + + Initializes a new instance of the class. + + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Initialize a new instance of the class + with the name of the domain. + + The name of the domain. + + + Obsolete. Use RepositoryAttribute instead of DomainAttribute. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + The repository to configure. + + + + Configures log4net using a log4net element + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The element to parse. + + + + Configures the using the specified XML + element. + + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration file. + + A stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Assembly level attribute to configure the . + + + + AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + Gert Driesen + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + If neither of the or + properties are set the configuration is loaded from the application's .config file. + If set the property takes priority over the + property. The property + specifies a path to a file to load the config from. The path is relative to the + application's base directory; . + The property is used as a postfix to the assembly file name. + The config file must be located in the application's base directory; . + For example in a console application setting the to + config has the same effect as not specifying the or + properties. + + + The property can be set to cause the + to watch the configuration file for changes. + + + + Log4net will only look for assembly level configuration attributes once. + When using the log4net assembly level attributes to control the configuration + of log4net you must ensure that the first call to any of the + methods is made from the assembly with the configuration + attributes. + + + If you cannot guarantee the order in which log4net calls will be made from + different assemblies you must use programmatic configuration instead, i.e. + call the method directly. + + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Default constructor + + + + + + Configures the for the specified assembly. + + The assembly that this attribute was defined on. + The repository to configure. + + + Configure the repository using the . + The specified must extend the + class otherwise the will not be able to + configure it. + + + The does not extend . + + + + Attempt to load configuration from the local file system + + The assembly that this attribute was defined on. + The repository to configure. + + + + Configure the specified repository using a + + The repository to configure. + the FileInfo pointing to the config file + + + + Attempt to load configuration from a URI + + The assembly that this attribute was defined on. + The repository to configure. + + + + Gets or sets the filename of the configuration file. + + + The filename of the configuration file. + + + + If specified, this is the name of the configuration file to use with + the . This file path is relative to the + application base directory (). + + + The takes priority over the . + + + + + + Gets or sets the extension of the configuration file. + + + The extension of the configuration file. + + + + If specified this is the extension for the configuration file. + The path to the config file is built by using the application + base directory (), + the assembly file name and the config file extension. + + + If the is set to MyExt then + possible config file names would be: MyConsoleApp.exe.MyExt or + MyClassLibrary.dll.MyExt. + + + The takes priority over the . + + + + + + Gets or sets a value indicating whether to watch the configuration file. + + + true if the configuration should be watched, false otherwise. + + + + If this flag is specified and set to true then the framework + will watch the configuration file and will reload the config each time + the file is modified. + + + The config file can only be watched if it is loaded from local disk. + In a No-Touch (Smart Client) deployment where the application is downloaded + from a web server the config file may not reside on the local disk + and therefore it may not be able to watch it. + + + Watching configuration is not supported on the SSCLI. + + + + + + Class to register for the log4net section of the configuration file + + + The log4net section of the configuration file needs to have a section + handler registered. This is the section handler used. It simply returns + the XML element that is the root of the section. + + + Example of registering the log4net section handler : + + + +
+ + + log4net configuration XML goes here + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Default constructor. + + + + + + Parses the configuration section. + + The configuration settings in a corresponding parent configuration section. + The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. + The for the log4net section. + The for the log4net section. + + + Returns the containing the configuration data, + + + + + + Assembly level attribute that specifies a plugin to attach to + the repository. + + + + Specifies the type of a plugin to create and attach to the + assembly's repository. The plugin type must implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Interface used to create plugins. + + + + Interface used to create a plugin. + + + Nicko Cadell + Gert Driesen + + + + Creates the plugin object. + + the new plugin instance + + + Create and return a new plugin instance. + + + + + + Initializes a new instance of the class + with the specified type. + + The type name of plugin to create. + + + Create the attribute with the plugin type specified. + + + Where possible use the constructor that takes a . + + + + + + Initializes a new instance of the class + with the specified type. + + The type of plugin to create. + + + Create the attribute with the plugin type specified. + + + + + + Creates the plugin object defined by this attribute. + + + + Creates the instance of the object as + specified by this attribute. + + + The plugin object. + + + + Returns a representation of the properties of this object. + + + + Overrides base class method to + return a representation of the properties of this object. + + + A representation of the properties of this object + + + + Gets or sets the type for the plugin. + + + The type for the plugin. + + + + The type for the plugin. + + + + + + Gets or sets the type name for the plugin. + + + The type name for the plugin. + + + + The type name for the plugin. + + + Where possible use the property instead. + + + + + + Assembly level attribute to configure the . + + + + This attribute may only be used at the assembly scope and can only + be used once per assembly. + + + Use this attribute to configure the + without calling one of the + methods. + + + Nicko Cadell + + + + Construct provider attribute with type specified + + the type of the provider to use + + + The provider specified must subclass the + class. + + + + + + Configures the SecurityContextProvider + + The assembly that this attribute was defined on. + The repository to configure. + + + Creates a provider instance from the specified. + Sets this as the default security context provider . + + + + + + Gets or sets the type of the provider to use. + + + the type of the provider to use. + + + + The provider specified must subclass the + class. + + + + + + Use this class to initialize the log4net environment using an Xml tree. + + + + Configures a using an Xml tree. + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + + + Automatically configures the log4net system based on the + application's configuration settings. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + + + + + Automatically configures the using settings + stored in the application's configuration file. + + + + Each application has a configuration file. This has the + same name as the application with '.config' appended. + This file is XML and calling this function prompts the + configurator to look in that file for a section called + log4net that contains the configuration data. + + + To use this method to configure log4net you must specify + the section + handler for the log4net configuration section. See the + for an example. + + + The repository to configure. + + + + Configures log4net using a log4net element + + + + Loads the log4net configuration from the XML element + supplied as . + + + The element to parse. + + + + Configures the using the specified XML + element. + + + Loads the log4net configuration from the XML element + supplied as . + + The repository to configure. + The element to parse. + + + + Configures log4net using the specified configuration file. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures log4net using the specified configuration URI. + + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + The must support the URI scheme specified. + + + + + + Configures log4net using the specified configuration data stream. + + A stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the log4net configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The log4net configuration file can possible be specified in the application's + configuration file (either MyAppName.exe.config for a + normal application on Web.config for an ASP.NET application). + + + The first element matching <configuration> will be read as the + configuration. If this file is also a .NET .config file then you must specify + a configuration section for the log4net element otherwise .NET will + complain. Set the type for the section handler to , for example: + + +
+ + + + + The following example configures log4net using a configuration file, of which the + location is stored in the application's configuration file : + + + using log4net.Config; + using System.IO; + using System.Configuration; + + ... + + XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); + + + In the .config file, the path to the log4net can be specified like this : + + + + + + + + + + + + + Configures the using the specified configuration + URI. + + The repository to configure. + A URI to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The must support the URI scheme specified. + + + + + + Configures the using the specified configuration + file. + + The repository to configure. + The stream to load the XML configuration from. + + + The configuration data must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + Note that this method will NOT close the stream parameter. + + + + + + Configures log4net using the file specified, monitors the file for changes + and reloads the configuration if a change is detected. + + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the using the file specified, + monitors the file for changes and reloads the configuration if a change + is detected. + + The repository to configure. + The XML file to load the configuration from. + + + The configuration file must be valid XML. It must contain + at least one element called log4net that holds + the configuration data. + + + The configuration file will be monitored using a + and depends on the behavior of that class. + + + For more information on how to configure log4net using + a separate configuration file, see . + + + + + + + Configures the specified repository using a log4net element. + + The hierarchy to configure. + The element to parse. + + + Loads the log4net configuration from the XML element + supplied as . + + + This method is ultimately called by one of the Configure methods + to load the configuration from an . + + + + + + Class used to watch config files. + + + + Uses the to monitor + changes to a specified file. Because multiple change notifications + may be raised when the file is modified, a timer is used to + compress the notifications into a single event. The timer + waits for time before delivering + the event notification. If any further + change notifications arrive while the timer is waiting it + is reset and waits again for to + elapse. + + + + + + The default amount of time to wait after receiving notification + before reloading the config file. + + + + + Watch a specified config file used to configure a repository + + The repository to configure. + The configuration file to watch. + + + Watch a specified config file used to configure a repository + + + + + + Holds the FileInfo used to configure the XmlConfigurator + + + + + Holds the repository being configured. + + + + + The timer used to compress the notification events. + + + + + Initializes a new instance of the class. + + The repository to configure. + The configuration file to watch. + + + Initializes a new instance of the class. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Event handler used by . + + The firing the event. + The argument indicates the file that caused the event to be fired. + + + This handler reloads the configuration from the file when the event is fired. + + + + + + Called by the timer when the configuration has been updated. + + null + + + + The implementation of the interface suitable + for use with the compact framework + + + + This implementation is a simple + mapping between repository name and + object. + + + The .NET Compact Framework 1.0 does not support retrieving assembly + level attributes therefore unlike the DefaultRepositorySelector + this selector does not examine the calling assembly for attributes. + + + Nicko Cadell + + + + Interface used by the to select the . + + + + The uses a + to specify the policy for selecting the correct + to return to the caller. + + + Nicko Cadell + Gert Driesen + + + + Gets the for the specified assembly. + + The assembly to use to lookup to the + The for the assembly. + + + Gets the for the specified assembly. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. The results of this method must be repeatable, i.e. + when called again with the same arguments the result must be the + save value. + + + + + + Gets the named . + + The name to use to lookup to the . + The named + + Lookup a named . This is the repository created by + calling . + + + + + Creates a new repository for the assembly specified. + + The assembly to use to create the domain to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the domain + specified such that a call to with the + same assembly specified will return the same repository instance. + + + How the association between and + is made is not defined. The implementation may choose any method for + this association. + + + + + + Creates a new repository with the name specified. + + The name to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the name + specified such that a call to with the + same name will return the same repository instance. + + + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets an array of all currently defined repositories. + + + An array of the instances created by + this . + + + Gets an array of all of the repositories created by this selector. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Create a new repository selector + + the type of the repositories to create, must implement + + + Create an new compact repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + throw if is null + throw if does not implement + + + + Get the for the specified assembly + + not used + The default + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Get the named + + the name of the repository to lookup + The named + + + Get the named . The default + repository is log4net-default-repository. Other repositories + must be created using the . + If the named repository does not exist an exception is thrown. + + + throw if is null + throw if the does not exist + + + + Create a new repository for the assembly specified + + not used + the type of repository to create, must implement + the repository created + + + The argument is not used. This selector does not create a + separate repository for each assembly. + + + If the is null then the + default repository type specified to the constructor is used. + + + As a named repository is not specified the default repository is + returned. The default repository is named log4net-default-repository. + + + + + + Create a new repository for the repository specified + + the repository to associate with the + the type of repository to create, must implement . + If this param is null then the default repository type is used. + the repository created + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + If the named repository already exists an exception will be thrown. + + + If is null then the default + repository type specified to the constructor is used. + + + throw if is null + throw if the already exists + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Notify the registered listeners that the repository has been created + + The repository that has been created + + + Raises the LoggerRepositoryCreatedEvent + event. + + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + The default implementation of the interface. + + + + Uses attributes defined on the calling assembly to determine how to + configure the hierarchy for the repository. + + + Nicko Cadell + Gert Driesen + + + + Creates a new repository selector. + + The type of the repositories to create, must implement + + + Create an new repository selector. + The default type for repositories must be specified, + an appropriate value would be . + + + is . + does not implement . + + + + Gets the for the specified assembly. + + The assembly use to lookup the . + + + The type of the created and the repository + to create can be overridden by specifying the + attribute on the . + + + The default values are to use the + implementation of the interface and to use the + as the name of the repository. + + + The created will be automatically configured using + any attributes defined on + the . + + + The for the assembly + is . + + + + Gets the for the specified repository. + + The repository to use to lookup the . + The for the specified repository. + + + Returns the named repository. If is null + a is thrown. If the repository + does not exist a is thrown. + + + Use to create a repository. + + + is . + does not exist. + + + + Create a new repository for the assembly specified + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the assembly specified. + + the assembly to use to create the repository to associate with the . + The type of repository to create, must implement . + The name to assign to the created repository + Set to true to read and apply the assembly attributes + The repository created. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The type of the created and + the repository to create can be overridden by specifying the + attribute on the + . The default values are to use the + implementation of the + interface and to use the + as the name of the repository. + + + The created will be automatically + configured using any + attributes defined on the . + + + If a repository for the already exists + that repository will be returned. An error will not be raised and that + repository may be of a different type to that specified in . + Also the attribute on the + assembly may be used to override the repository type specified in + . + + + is . + + + + Creates a new repository for the specified repository. + + The repository to associate with the . + The type of repository to create, must implement . + If this param is then the default repository type is used. + The new repository. + + + The created will be associated with the repository + specified such that a call to with the + same repository specified will return the same repository instance. + + + is . + already exists. + + + + Test if a named repository exists + + the named repository to check + true if the repository exists + + + Test if a named repository exists. Use + to create a new repository and to retrieve + a repository. + + + + + + Gets a list of objects + + an array of all known objects + + + Gets an array of all of the repositories created by this selector. + + + + + + Aliases a repository to an existing repository. + + The repository to alias. + The repository that the repository is aliased to. + + + The repository specified will be aliased to the repository when created. + The repository must not already exist. + + + When the repository is created it must utilize the same repository type as + the repository it is aliased to, otherwise the aliasing will fail. + + + + is . + -or- + is . + + + + + Notifies the registered listeners that the repository has been created. + + The repository that has been created. + + + Raises the event. + + + + + + Gets the repository name and repository type for the specified assembly. + + The assembly that has a . + in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. + in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. + is . + + + + Configures the repository using information from the assembly. + + The assembly containing + attributes which define the configuration for the repository. + The repository to configure. + + is . + -or- + is . + + + + + Loads the attribute defined plugins on the assembly. + + The assembly that contains the attributes. + The repository to add the plugins to. + + is . + -or- + is . + + + + + Loads the attribute defined aliases on the assembly. + + The assembly that contains the attributes. + The repository to alias to. + + is . + -or- + is . + + + + + Event to notify that a logger repository has been created. + + + Event to notify that a logger repository has been created. + + + + Event raised when a new repository is created. + The event source will be this selector. The event args will + be a which + holds the newly created . + + + + + + Defined error codes that can be passed to the method. + + + + Values passed to the method. + + + Nicko Cadell + + + + A general error + + + + + Error while writing output + + + + + Failed to flush file + + + + + Failed to close file + + + + + Unable to open output file + + + + + No layout specified + + + + + Failed to parse address + + + + + Appenders may delegate their error handling to an . + + + + Error handling is a particularly tedious to get right because by + definition errors are hard to predict and to reproduce. + + + Nicko Cadell + Gert Driesen + + + + Handles the error and information about the error condition is passed as + a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + The error code associated with the error. + + + Handles the error and information about the error condition is passed as + a parameter. + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + The that was thrown when the error occurred. + + + See . + + + + + + Prints the error message passed as a parameter. + + The message associated with the error. + + + See . + + + + + + Interface for objects that require fixing. + + + + Interface that indicates that the object requires fixing before it + can be taken outside the context of the appender's + method. + + + When objects that implement this interface are stored + in the context properties maps + and + are fixed + (see ) the + method will be called. + + + Nicko Cadell + + + + Get a portable version of this object + + the portable instance of this object + + + Get a portable instance object that represents the current + state of this object. The portable object can be stored + and logged from any thread with identical results. + + + + + + Interface that all loggers implement + + + + This interface supports logging events and testing if a level + is enabled for logging. + + + These methods will not throw exceptions. Note to implementor, ensure + that the implementation of these methods cannot allow an exception + to be thrown to the caller. + + + Nicko Cadell + Gert Driesen + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + the exception to log, including its stack trace. Pass null to not log an exception. + + + Generates a logging event for the specified using + the and . + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + + + + Gets the name of the logger. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Base interface for all wrappers + + + + Base interface for all wrappers. + + + All wrappers must implement this interface. + + + Nicko Cadell + + + + Get the implementation behind this wrapper object. + + + The object that in implementing this object. + + + + The object that in implementing this + object. The Logger object may not + be the same object as this object because of logger decorators. + This gets the actual underlying objects that is used to process + the log events. + + + + + + Delegate used to handle logger repository creation event notifications + + The which created the repository. + The event args + that holds the instance that has been created. + + + Delegate used to handle logger repository creation event notifications. + + + + + + Provides data for the event. + + + + A + event is raised every time a is created. + + + + + + The created + + + + + Construct instance using specified + + the that has been created + + + Construct instance using specified + + + + + + The that has been created + + + The that has been created + + + + The that has been created + + + + + + Test if an triggers an action + + + + Implementations of this interface allow certain appenders to decide + when to perform an appender specific action. + + + The action or behavior triggered is defined by the implementation. + + + Nicko Cadell + + + + Test if this event triggers the action + + The event to check + true if this event triggers the action, otherwise false + + + Return true if this event triggers the action + + + + + + Defines the default set of levels recognized by the system. + + + + Each has an associated . + + + Levels have a numeric that defines the relative + ordering between levels. Two Levels with the same + are deemed to be equivalent. + + + The levels that are recognized by log4net are set for each + and each repository can have different levels defined. The levels are stored + in the on the repository. Levels are + looked up by name from the . + + + When logging at level INFO the actual level used is not but + the value of LoggerRepository.LevelMap["INFO"]. The default value for this is + , but this can be changed by reconfiguring the level map. + + + Each level has a in addition to its . The + is the string that is written into the output log. By default + the display name is the same as the level name, but this can be used to alias levels + or to localize the log output. + + + Some of the predefined levels recognized by the system are: + + + + . + + + . + + + . + + + . + + + . + + + . + + + . + + + + Nicko Cadell + Gert Driesen + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + The display name for this level. This may be localized or otherwise different from the name + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Constructor + + Integer value for this level, higher values represent more severe levels. + The string name of this level. + + + Initializes a new instance of the class with + the specified level name and value. + + + + + + Returns the representation of the current + . + + + A representation of the current . + + + + Returns the level . + + + + + + Compares levels. + + The object to compare against. + true if the objects are equal. + + + Compares the levels of instances, and + defers to base class if the target object is not a + instance. + + + + + + Returns a hash code + + A hash code for the current . + + + Returns a hash code suitable for use in hashing algorithms and data + structures like a hash table. + + + Returns the hash code of the level . + + + + + + Compares this instance to a specified object and returns an + indication of their relative values. + + A instance or to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the + values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + This instance is less than . + + + Zero + This instance is equal to . + + + Greater than zero + + This instance is greater than . + -or- + is . + + + + + + + must be an instance of + or ; otherwise, an exception is thrown. + + + is not a . + + + + Returns a value indicating whether a specified + is greater than another specified . + + A + A + + true if is greater than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than another specified . + + A + A + + true if is less than + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is greater than or equal to another specified . + + A + A + + true if is greater than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether a specified + is less than or equal to another specified . + + A + A + + true if is less than or equal to + ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have the same value. + + A or . + A or . + + true if the value of is the same as the + value of ; otherwise, false. + + + + Compares two levels. + + + + + + Returns a value indicating whether two specified + objects have different values. + + A or . + A or . + + true if the value of is different from + the value of ; otherwise, false. + + + + Compares two levels. + + + + + + Compares two specified instances. + + The first to compare. + The second to compare. + + A 32-bit signed integer that indicates the relative order of the + two values compared. The return value has these meanings: + + + Value + Meaning + + + Less than zero + is less than . + + + Zero + is equal to . + + + Greater than zero + is greater than . + + + + + + Compares two levels. + + + + + + The level designates a higher level than all the rest. + + + + + The level designates very severe error events. + System unusable, emergencies. + + + + + The level designates very severe error events + that will presumably lead the application to abort. + + + + + The level designates very severe error events. + Take immediate action, alerts. + + + + + The level designates very severe error events. + Critical condition, critical. + + + + + The level designates very severe error events. + + + + + The level designates error events that might + still allow the application to continue running. + + + + + The level designates potentially harmful + situations. + + + + + The level designates informational messages + that highlight the progress of the application at the highest level. + + + + + The level designates informational messages that + highlight the progress of the application at coarse-grained level. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates fine-grained informational + events that are most useful to debug an application. + + + + + The level designates the lowest level possible. + + + + + Gets the name of this level. + + + The name of this level. + + + + Gets the name of this level. + + + + + + Gets the value of this level. + + + The value of this level. + + + + Gets the value of this level. + + + + + + Gets the display name of this level. + + + The display name of this level. + + + + Gets the display name of this level. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a LevelCollection instance. + + list to create a readonly wrapper arround + + A LevelCollection wrapper that is read-only. + + + + + Initializes a new instance of the LevelCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the LevelCollection class + that has the specified initial capacity. + + + The number of elements that the new LevelCollection is initially capable of storing. + + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified LevelCollection. + + The LevelCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the LevelCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + Copies the entire LevelCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire LevelCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the LevelCollection. + + The to be added to the end of the LevelCollection. + The index at which the value has been added. + + + + Removes all elements from the LevelCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the LevelCollection. + + The to check for. + true if is found in the LevelCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the LevelCollection. + + The to locate in the LevelCollection. + + The zero-based index of the first occurrence of + in the entire LevelCollection, if found; otherwise, -1. + + + + + Inserts an element into the LevelCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the LevelCollection. + + The to remove from the LevelCollection. + + The specified was not found in the LevelCollection. + + + + + Removes the element at the specified index of the LevelCollection. + + The zero-based index of the element to remove. + + is less than zero + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the LevelCollection. + + An for the entire LevelCollection. + + + + Adds the elements of another LevelCollection to the current LevelCollection. + + The LevelCollection whose elements should be added to the end of the current LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a array to the current LevelCollection. + + The array whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Adds the elements of a collection to the current LevelCollection. + + The collection whose elements should be added to the end of the LevelCollection. + The new of the LevelCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero + -or- + is equal to or greater than . + + + + + is less than zero + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the LevelCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + The zero-based index of the element to get or set. + + is less than zero + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false + + + + Gets or sets the number of elements the LevelCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + A value + + + + + Supports simple iteration over a . + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + An evaluator that triggers at a threshold level + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + Nicko Cadell + + + + The threshold for triggering + + + + + Create a new evaluator using the threshold. + + + + Create a new evaluator using the threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Create a new evaluator using the specified threshold. + + the threshold to trigger at + + + Create a new evaluator using the specified threshold. + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Is this the triggering event? + + The event to check + This method returns true, if the event level + is equal or higher than the . + Otherwise it returns false + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + the threshold to trigger at + + + The that will cause this evaluator to trigger + + + + This evaluator will trigger if the level of the event + passed to + is equal to or greater than the + level. + + + + + + Mapping between string name and Level object + + + + Mapping between string name and object. + This mapping is held separately for each . + The level name is case insensitive. + + + Nicko Cadell + + + + Mapping from level name to Level object. The + level name is case insensitive + + + + + Construct the level map + + + + Construct the level map. + + + + + + Clear the internal maps of all levels + + + + Clear the internal maps of all levels + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + + + Create a new Level and add it to the map + + + + + + + Create a new Level and add it to the map + + the string to display for the Level + the level value to give to the Level + the display name to give to the Level + + + Create a new Level and add it to the map + + + + + + Add a Level to the map + + the Level to add + + + Add a Level to the map + + + + + + Lookup a named level from the map + + the name of the level to lookup is taken from this level. + If the level is not set on the map then this level is added + the level in the map with the name specified + + + Lookup a named level from the map. The name of the level to lookup is taken + from the property of the + argument. + + + If no level with the specified name is found then the + argument is added to the level map + and returned. + + + + + + Lookup a by name + + The name of the Level to lookup + a Level from the map with the name specified + + + Returns the from the + map with the name specified. If the no level is + found then null is returned. + + + + + + Return all possible levels as a list of Level objects. + + all possible levels as a list of Level objects + + + Return all possible levels as a list of Level objects. + + + + + + The internal representation of caller location information. + + + + This class uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. + + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + Nicko Cadell + Gert Driesen + + + + When location information is not available the constant + NA is returned. Current value of this string + constant is ?. + + + + + Constructor + + The declaring type of the method that is + the stack boundary into the logging system for this call. + + + Initializes a new instance of the + class based on the current thread. + + + + + + Constructor + + The fully qualified class name. + The method name. + The file name. + The line number of the method within the file. + + + Initializes a new instance of the + class with the specified data. + + + + + + Gets the fully qualified class name of the caller making the logging + request. + + + The fully qualified class name of the caller making the logging + request. + + + + Gets the fully qualified class name of the caller making the logging + request. + + + + + + Gets the file name of the caller. + + + The file name of the caller. + + + + Gets the file name of the caller. + + + + + + Gets the line number of the caller. + + + The line number of the caller. + + + + Gets the line number of the caller. + + + + + + Gets the method name of the caller. + + + The method name of the caller. + + + + Gets the method name of the caller. + + + + + + Gets all available caller information + + + All available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + Gets all available caller information, in the format + fully.qualified.classname.of.caller.methodName(Filename:line) + + + + + + Static manager that controls the creation of repositories + + + + Static manager that controls the creation of repositories + + + This class is used by the wrapper managers (e.g. ) + to provide access to the objects. + + + This manager also holds the that is used to + lookup and create repositories. The selector can be set either programmatically using + the property, or by setting the log4net.RepositorySelector + AppSetting in the applications config file to the fully qualified type name of the + selector to use. + + + Nicko Cadell + Gert Driesen + + + + Private constructor to prevent instances. Only static methods should be used. + + + + Private constructor to prevent instances. Only static methods should be used. + + + + + + Hook the shutdown event + + + + On the full .NET runtime, the static constructor hooks up the + AppDomain.ProcessExit and AppDomain.DomainUnload> events. + These are used to shutdown the log4net system as the application exits. + + + + + + Register for ProcessExit and DomainUnload events on the AppDomain + + + + This needs to be in a separate method because the events make + a LinkDemand for the ControlAppDomain SecurityPermission. Because + this is a LinkDemand it is demanded at JIT time. Therefore we cannot + catch the exception in the method itself, we have to catch it in the + caller. + + + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + + Return the default instance. + + the repository to lookup in + Return the default instance + + + Gets the for the repository specified + by the argument. + + + + + + Returns the default instance. + + The assembly to use to lookup the repository. + The default instance. + + + Returns the default instance. + + + + + + Returns the named logger if it exists. + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified repository. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns the named logger if it exists. + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger found, or null if the named logger does not exist in the + specified assembly's repository. + + + + If the named logger exists (in the specified assembly's repository) then it + returns a reference to the logger, otherwise it returns + null. + + + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + All the defined loggers. + + + The root logger is not included in the returned array. + + + + + + Retrieves or creates a named logger. + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Retrieves or creates a named logger. + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + + + + Shorthand for . + + The repository to lookup in. + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shorthand for . + + the assembly to use to lookup the repository + The of which the fullname will be used as the name of the logger to retrieve. + The logger with the name specified. + + + Gets the logger for the fully qualified name of the type specified. + + + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The repository to shutdown. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + The assembly to use to lookup the repository. + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository for the repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Resets all values contained in this repository instance to their defaults. + + The repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + The assembly to use to lookup the repository to reset. + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name. + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The name must be unique. Repositories cannot be redefined. + An Exception will be thrown if the repository already exists. + + + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Creates a repository for the specified assembly and repository type. + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + + + + Gets an array of all currently defined repositories. + + An array of all the known objects. + + + Gets an array of all currently defined repositories. + + + + + + Internal method to get pertinent version info. + + A string of version info. + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Called when the event fires + + the that is exiting + null + + + Called when the event fires. + + + When the event is triggered the log4net system is . + + + + + + Initialize the default repository selector + + + + + Gets or sets the repository selector used by the . + + + The repository selector used by the . + + + + The repository selector () is used by + the to create and select repositories + (). + + + The caller to supplies either a string name + or an assembly (if not supplied the assembly is inferred using + ). + + + This context is used by the selector to lookup a specific repository. + + + For the full .NET Framework, the default repository is DefaultRepositorySelector; + for the .NET Compact Framework CompactRepositorySelector is the default + repository. + + + + + + Implementation of the interface. + + + + This class should be used as the base for all wrapper implementations. + + + Nicko Cadell + Gert Driesen + + + + Constructs a new wrapper for the specified logger. + + The logger to wrap. + + + Constructs a new wrapper for the specified logger. + + + + + + The logger that this object is wrapping + + + + + Gets the implementation behind this wrapper object. + + + The object that this object is implementing. + + + + The Logger object may not be the same object as this object + because of logger decorators. + + + This gets the actual underlying objects that is used to process + the log events. + + + + + + Portable data structure used by + + + + Portable data structure used by + + + Nicko Cadell + + + + The logger name. + + + + The logger name. + + + + + + Level of logging event. + + + + Level of logging event. Level cannot be Serializable + because it is a flyweight. Due to its special serialization it + cannot be declared final either. + + + + + + The application supplied message. + + + + The application supplied message of logging event. + + + + + + The name of thread + + + + The name of thread in which this logging event was generated + + + + + + The time the event was logged + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Location information for the caller. + + + + Location information for the caller. + + + + + + String representation of the user + + + + String representation of the user's windows name, + like DOMAIN\username + + + + + + String representation of the identity. + + + + String representation of the current thread's principal identity. + + + + + + The string representation of the exception + + + + The string representation of the exception + + + + + + String representation of the AppDomain. + + + + String representation of the AppDomain. + + + + + + Additional event specific properties + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + + + + Flags passed to the property + + + + Flags passed to the property + + + Nicko Cadell + + + + Fix the MDC + + + + + Fix the NDC + + + + + Fix the rendered message + + + + + Fix the thread name + + + + + Fix the callers location information + + + CAUTION: Very slow to generate + + + + + Fix the callers windows user name + + + CAUTION: Slow to generate + + + + + Fix the domain friendly name + + + + + Fix the callers principal name + + + CAUTION: May be slow to generate + + + + + Fix the exception text + + + + + Fix the event properties + + + + + No fields fixed + + + + + All fields fixed + + + + + Partial fields fixed + + + + This set of partial fields gives good performance. The following fields are fixed: + + + + + + + + + + + + + The internal representation of logging events. + + + + When an affirmative decision is made to log then a + instance is created. This instance + is passed around to the different log4net components. + + + This class is of concern to those wishing to extend log4net. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino + + + + The key into the Properties map for the host name value. + + + + + The key into the Properties map for the thread identity value. + + + + + The key into the Properties map for the user name value. + + + + + Initializes a new instance of the class + from the supplied parameters. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + The name of the logger of this event. + The level of this event. + The message of this event. + The exception for this event. + + + Except , and , + all fields of LoggingEvent are filled when actually needed. Call + to cache all data locally + to prevent inconsistencies. + + This method is called by the log4net framework + to create a logging event. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + The fields in the struct that have already been fixed. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + The parameter should be used to specify which fields in the + struct have been preset. Fields not specified in the + will be captured from the environment if requested or fixed. + + + + + + Initializes a new instance of the class + using specific data. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The repository this event is logged in. + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Initializes a new instance of the class + using specific data. + + Data used to initialize the logging event. + + + This constructor is provided to allow a + to be created independently of the log4net framework. This can + be useful if you require a custom serialization scheme. + + + Use the method to obtain an + instance of the class. + + + This constructor sets this objects flags to , + this assumes that all the data relating to this event is passed in via the + parameter and no other data should be captured from the environment. + + + + + + Serialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Ensure that the repository is set. + + the value for the repository + + + + Write the rendered message to a TextWriter + + the writer to write the message to + + + Unlike the property this method + does store the message data in the internal cache. Therefore + if called only once this method should be faster than the + property, however if the message is + to be accessed multiple times then the property will be more efficient. + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + The data in this event must be fixed before it can be serialized. + + + The method must be called during the + method call if this event + is to be used outside that method. + + + + + + Gets the portable data for this . + + The for this event. + + + A new can be constructed using a + instance. + + + Does a fix of the data + in the logging event before returning the event data. + + + + + + Gets the portable data for this . + + The set of data to ensure is fixed in the LoggingEventData + The for this event. + + + A new can be constructed using a + instance. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Obsolete. Use instead. + + + + + + Returns this event's exception's rendered using the + . + + + This event's exception's rendered using the . + + + + Returns this event's exception's rendered using the + . + + + + + + Fix instance fields that hold volatile data. + + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + incurred by calling but it + is essential to maintaining data consistency. + + + Calling is equivalent to + calling passing the parameter + false. + + + See for more + information. + + + + + + Fixes instance fields that hold volatile data. + + Set to true to not fix data that takes a long time to fix. + + + Some of the values in instances of + are considered volatile, that is the values are correct at the + time the event is delivered to appenders, but will not be consistent + at any time afterwards. If an event is to be stored and then processed + at a later time these volatile values must be fixed by calling + . There is a performance penalty + for incurred by calling but it + is essential to maintaining data consistency. + + + The param controls the data that + is fixed. Some of the data that can be fixed takes a long time to + generate, therefore if you do not require those settings to be fixed + they can be ignored by setting the param + to true. This setting will ignore the + and settings. + + + Set to false to ensure that all + settings are fixed. + + + + + + Fix the fields specified by the parameter + + the fields to fix + + + Only fields specified in the will be fixed. + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Lookup a composite property in this event + + the key for the property to lookup + the value for the property + + + This event has composite properties that combine together properties from + several different contexts in the following order: + + + this events properties + + This event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + + Get all the composite properties in this event + + the containing all the properties + + + See for details of the composite properties + stored by the event. + + + This method returns a single containing all the + properties defined for this event. + + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The internal logging event data. + + + + + The fully qualified Type of the calling + logger class in the stack frame (i.e. the declaring type of the method). + + + + + The application supplied message of logging event. + + + + + The exception that was thrown. + + + This is not serialized. The string representation + is serialized instead. + + + + + The repository that generated the logging event + + + This is not serialized. + + + + + The fix state for this event + + + These flags indicate which fields have been fixed. + Not serialized. + + + + + Indicated that the internal cache is updateable (ie not fixed) + + + This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler + changes in the caching strategy. + + + + + Gets the time when the current process started. + + + This is the time when this process started. + + + + The TimeStamp is stored in the local time zone for this computer. + + + Tries to get the start time for the current process. + Failing that it returns the time of the first call to + this property. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating and therefore + without the process start time being reset. + + + + + + Gets the of the logging event. + + + The of the logging event. + + + + Gets the of the logging event. + + + + + + Gets the time of the logging event. + + + The time of the logging event. + + + + The TimeStamp is stored in the local time zone for this computer. + + + + + + Gets the name of the logger that logged the event. + + + The name of the logger that logged the event. + + + + Gets the name of the logger that logged the event. + + + + + + Gets the location information for this logging event. + + + The location information for this logging event. + + + + The collected information is cached for future use. + + + See the class for more information on + supported frameworks and the different behavior in Debug and + Release builds. + + + + + + Gets the message object used to initialize this event. + + + The message object used to initialize this event. + + + + Gets the message object used to initialize this event. + Note that this event may not have a valid message object. + If the event is serialized the message object will not + be transferred. To get the text of the message the + property must be used + not this property. + + + If there is no defined message object for this event then + null will be returned. + + + + + + Gets the exception object used to initialize this event. + + + The exception object used to initialize this event. + + + + Gets the exception object used to initialize this event. + Note that this event may not have a valid exception object. + If the event is serialized the exception object will not + be transferred. To get the text of the exception the + method must be used + not this property. + + + If there is no defined exception object for this event then + null will be returned. + + + + + + The that this event was created in. + + + + The that this event was created in. + + + + + + Gets the message, rendered through the . + + + The message rendered through the . + + + + The collected information is cached for future use. + + + + + + Gets the name of the current thread. + + + The name of the current thread, or the thread ID when + the name is not available. + + + + The collected information is cached for future use. + + + + + + Gets the name of the current user. + + + The name of the current user, or NOT AVAILABLE when the + underlying runtime has no support for retrieving the name of the + current user. + + + + Calls WindowsIdentity.GetCurrent().Name to get the name of + the current windows user. + + + To improve performance, we could cache the string representation of + the name, and reuse that as long as the identity stayed constant. + Once the identity changed, we would need to re-assign and re-render + the string. + + + However, the WindowsIdentity.GetCurrent() call seems to + return different objects every time, so the current implementation + doesn't do this type of caching. + + + Timing for these operations: + + + + Method + Results + + + WindowsIdentity.GetCurrent() + 10000 loops, 00:00:00.2031250 seconds + + + WindowsIdentity.GetCurrent().Name + 10000 loops, 00:00:08.0468750 seconds + + + + This means we could speed things up almost 40 times by caching the + value of the WindowsIdentity.GetCurrent().Name property, since + this takes (8.04-0.20) = 7.84375 seconds. + + + + + + Gets the identity of the current thread principal. + + + The string name of the identity of the current thread principal. + + + + Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get + the name of the current thread principal. + + + + + + Gets the AppDomain friendly name. + + + The AppDomain friendly name. + + + + Gets the AppDomain friendly name. + + + + + + Additional event specific properties. + + + Additional event specific properties. + + + + A logger or an appender may attach additional + properties to specific events. These properties + have a string key and an object value. + + + This property is for events that have been added directly to + this event. The aggregate properties (which include these + event properties) can be retrieved using + and . + + + Once the properties have been fixed this property + returns the combined cached properties. This ensures that updates to + this property are always reflected in the underlying storage. When + returning the combined properties there may be more keys in the + Dictionary than expected. + + + + + + The fixed fields in this event + + + The set of fields that are fixed in this event + + + + Fields will not be fixed if they have previously been fixed. + It is not possible to 'unfix' a field. + + + + + + Implementation of wrapper interface. + + + + This implementation of the interface + forwards to the held by the base class. + + + This logger has methods to allow the caller to log at the following + levels: + + + + DEBUG + + The and methods log messages + at the DEBUG level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + INFO + + The and methods log messages + at the INFO level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + WARN + + The and methods log messages + at the WARN level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + ERROR + + The and methods log messages + at the ERROR level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + FATAL + + The and methods log messages + at the FATAL level. That is the level with that name defined in the + repositories . The default value + for this level is . The + property tests if this level is enabled for logging. + + + + + The values for these levels and their semantic meanings can be changed by + configuring the for the repository. + + + Nicko Cadell + Gert Driesen + + + + The ILog interface is use by application to log messages into + the log4net framework. + + + + Use the to obtain logger instances + that implement this interface. The + static method is used to get logger instances. + + + This class contains methods for logging at different levels and also + has properties for determining if those logging levels are + enabled in the current configuration. + + + This interface can be implemented in different ways. This documentation + specifies reasonable behavior that a caller can expect from the actual + implementation, however different implementations reserve the right to + do things differently. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + Log a message object with the level. + + Log a message object with the level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Logs a message object with the INFO level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Logs a message object with the level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + Log a message object with the level. + + Log a message object with the level. + + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + The message object to log. + + + + + + Log a message object with the level including + the stack trace of the passed + as a parameter. + + The message object to log. + The exception to log, including its stack trace. + + + See the form for more detailed information. + + + + + + + Log a formatted message string with the level. + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Logs a formatted message string with the level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the String.Format method. See + for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + For some ILog interface log, when you write: + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, string construction and concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed (who isn't), then you should write: + + + if (log.IsDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in and once in + the . This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. This is the preferred style of logging. + + Alternatively if your logger is available statically then the is debug + enabled state can be stored in a static variable like this: + + + private static readonly bool isDebugEnabled = log.IsDebugEnabled; + + + Then when you come to log you can write: + + + if (isDebugEnabled) + { + log.Debug("This is entry number: " + i ); + } + + + This way the debug enabled state is only queried once + when the class is loaded. Using a private static readonly + variable is the most efficient because it is a run time constant + and can be heavily optimized by the JIT compiler. + + + Of course if you use a static readonly variable to + hold the enabled state of the logger then you cannot + change the enabled state at runtime to vary the logging + that is produced. You have to decide if you need absolute + speed or runtime flexibility. + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Checks if this logger is enabled for the level. + + + true if this logger is enabled for events, false otherwise. + + + For more information see . + + + + + + + + Construct a new wrapper for the specified logger. + + The logger to wrap. + + + Construct a new wrapper for the specified logger. + + + + + + Virtual method called when the configuration of the repository changes + + the repository holding the levels + + + Virtual method called when the configuration of the repository changes + + + + + + Logs a message object with the DEBUG level. + + The message object to log. + + + This method first checks if this logger is DEBUG + enabled by comparing the level of this logger with the + DEBUG level. If this logger is + DEBUG enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the DEBUG level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the DEBUG level including + the stack trace of the passed + as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the DEBUG level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + + + This method first checks if this logger is INFO + enabled by comparing the level of this logger with the + INFO level. If this logger is + INFO enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger + and also higher in the hierarchy depending on the value of + the additivity flag. + + + WARNING Note that passing an + to this method will print the name of the + but no stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the INFO level. + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the INFO level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the INFO level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the WARN level. + + the message object to log + + + This method first checks if this logger is WARN + enabled by comparing the level of this logger with the + WARN level. If this logger is + WARN enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the WARN level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the WARN level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the WARN level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the ERROR level. + + The message object to log. + + + This method first checks if this logger is ERROR + enabled by comparing the level of this logger with the + ERROR level. If this logger is + ERROR enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the ERROR level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the ERROR level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the ERROR level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a message object with the FATAL level. + + The message object to log. + + + This method first checks if this logger is FATAL + enabled by comparing the level of this logger with the + FATAL level. If this logger is + FATAL enabled, then it converts the message object + (passed as parameter) to a string by invoking the appropriate + . It then + proceeds to call all the registered appenders in this logger and + also higher in the hierarchy depending on the value of the + additivity flag. + + + WARNING Note that passing an to this + method will print the name of the but no + stack trace. To print a stack trace use the + form instead. + + + + + + Logs a message object with the FATAL level + + The message object to log. + The exception to log, including its stack trace. + + + Logs a message object with the FATAL level including + the stack trace of the + passed as a parameter. + + + See the form for more detailed information. + + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + A String containing zero or more format items + An Object to format + An Object to format + An Object to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + The string is formatted using the + format provider. To specify a localized provider use the + method. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Logs a formatted message string with the FATAL level. + + An that supplies culture-specific formatting information + A String containing zero or more format items + An Object array containing zero or more objects to format + + + The message is formatted using the method. See + String.Format for details of the syntax of the format string and the behavior + of the formatting. + + + This method does not take an object to include in the + log event. To pass an use one of the + methods instead. + + + + + + Event handler for the event + + the repository + Empty + + + + The fully qualified name of this declaring type not the type of any subclass. + + + + + Checks if this logger is enabled for the DEBUG + level. + + + true if this logger is enabled for DEBUG events, + false otherwise. + + + + This function is intended to lessen the computational cost of + disabled log debug statements. + + + For some log Logger object, when you write: + + + log.Debug("This is entry number: " + i ); + + + You incur the cost constructing the message, concatenation in + this case, regardless of whether the message is logged or not. + + + If you are worried about speed, then you should write: + + + if (log.IsDebugEnabled()) + { + log.Debug("This is entry number: " + i ); + } + + + This way you will not incur the cost of parameter + construction if debugging is disabled for log. On + the other hand, if the log is debug enabled, you + will incur the cost of evaluating whether the logger is debug + enabled twice. Once in IsDebugEnabled and once in + the Debug. This is an insignificant overhead + since evaluating a logger takes about 1% of the time it + takes to actually log. + + + + + + Checks if this logger is enabled for the INFO level. + + + true if this logger is enabled for INFO events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the WARN level. + + + true if this logger is enabled for WARN events, + false otherwise. + + + + See for more information and examples + of using this method. + + + + + + + Checks if this logger is enabled for the ERROR level. + + + true if this logger is enabled for ERROR events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + Checks if this logger is enabled for the FATAL level. + + + true if this logger is enabled for FATAL events, + false otherwise. + + + + See for more information and examples of using this method. + + + + + + + A SecurityContext used by log4net when interacting with protected resources + + + + A SecurityContext used by log4net when interacting with protected resources + for example with operating system services. This can be used to impersonate + a principal that has been granted privileges on the system resources. + + + Nicko Cadell + + + + Impersonate this SecurityContext + + State supplied by the caller + An instance that will + revoke the impersonation of this SecurityContext, or null + + + Impersonate this security context. Further calls on the current + thread should now be made in the security context provided + by this object. When the result + method is called the security + context of the thread should be reverted to the state it was in + before was called. + + + + + + The providers default instances. + + + + A configured component that interacts with potentially protected system + resources uses a to provide the elevated + privileges required. If the object has + been not been explicitly provided to the component then the component + will request one from this . + + + By default the is + an instance of which returns only + objects. This is a reasonable default + where the privileges required are not know by the system. + + + This default behavior can be overridden by subclassing the + and overriding the method to return + the desired objects. The default provider + can be replaced by programmatically setting the value of the + property. + + + An alternative is to use the log4net.Config.SecurityContextProviderAttribute + This attribute can be applied to an assembly in the same way as the + log4net.Config.XmlConfiguratorAttribute". The attribute takes + the type to use as the as an argument. + + + Nicko Cadell + + + + The default provider + + + + + Protected default constructor to allow subclassing + + + + Protected default constructor to allow subclassing + + + + + + Create a SecurityContext for a consumer + + The consumer requesting the SecurityContext + An impersonation context + + + The default implementation is to return a . + + + Subclasses should override this method to provide their own + behavior. + + + + + + Gets or sets the default SecurityContextProvider + + + The default SecurityContextProvider + + + + The default provider is used by configured components that + require a and have not had one + given to them. + + + By default this is an instance of + that returns objects. + + + The default provider can be set programmatically by setting + the value of this property to a sub class of + that has the desired behavior. + + + + + + Delegate used to handle creation of new wrappers. + + The logger to wrap in a wrapper. + + + Delegate used to handle creation of new wrappers. This delegate + is called from the + method to construct the wrapper for the specified logger. + + + The delegate to use is supplied to the + constructor. + + + + + + Maps between logger objects and wrapper objects. + + + + This class maintains a mapping between objects and + objects. Use the method to + lookup the for the specified . + + + New wrapper instances are created by the + method. The default behavior is for this method to delegate construction + of the wrapper to the delegate supplied + to the constructor. This allows specialization of the behavior without + requiring subclassing of this type. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the + + The handler to use to create the wrapper objects. + + + Initializes a new instance of the class with + the specified handler to create the wrapper objects. + + + + + + Gets the wrapper object for the specified logger. + + The wrapper object for the specified logger + + + If the logger is null then the corresponding wrapper is null. + + + Looks up the wrapper it it has previously been requested and + returns it. If the wrapper has never been requested before then + the virtual method is + called. + + + + + + Creates the wrapper object for the specified logger. + + The logger to wrap in a wrapper. + The wrapper object for the logger. + + + This implementation uses the + passed to the constructor to create the wrapper. This method + can be overridden in a subclass. + + + + + + Called when a monitored repository shutdown event is received. + + The that is shutting down + + + This method is called when a that this + is holding loggers for has signaled its shutdown + event . The default + behavior of this method is to release the references to the loggers + and their wrappers generated for this repository. + + + + + + Event handler for repository shutdown event. + + The sender of the event. + The event args. + + + + Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings + + + + + The handler to use to create the extension wrapper objects. + + + + + Internal reference to the delegate used to register for repository shutdown events. + + + + + Gets the map of logger repositories. + + + Map of logger repositories. + + + + Gets the hashtable that is keyed on . The + values are hashtables keyed on with the + value being the corresponding . + + + + + + Formats a as "HH:mm:ss,fff". + + + + Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". + + + Nicko Cadell + Gert Driesen + + + + Render a as a string. + + + + Interface to abstract the rendering of a + instance into a string. + + + The method is used to render the + date to a text writer. + + + Nicko Cadell + Gert Driesen + + + + Formats the specified date as a string. + + The date to format. + The writer to write to. + + + Format the as a string and write it + to the provided. + + + + + + String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. + + + + + String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. + + + + + String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. + + + + + Renders the date into a string. Format is "HH:mm:ss". + + The date to render into a string. + The string builder to write to. + + + Subclasses should override this method to render the date + into a string using a precision up to the second. This method + will be called at most once per second and the result will be + reused if it is needed again during the same second. + + + + + + Renders the date into a string. Format is "HH:mm:ss,fff". + + The date to render into a string. + The writer to write to. + + + Uses the method to generate the + time string up to the seconds and then appends the current + milliseconds. The results from are + cached and is called at most once + per second. + + + Sub classes should override + rather than . + + + + + + Last stored time with precision up to the second. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Last stored time with precision up to the second, formatted + as a string. + + + + + Formats a as "dd MMM yyyy HH:mm:ss,fff" + + + + Formats a in the format + "dd MMM yyyy HH:mm:ss,fff" for example, + "06 Nov 1994 15:49:37,459". + + + Nicko Cadell + Gert Driesen + Angelika Schnagl + + + + Default constructor. + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" + for example, "06 Nov 1994 15:49:37". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + The format info for the invariant culture. + + + + + Formats the as "yyyy-MM-dd HH:mm:ss,fff". + + + + Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Formats the date without the milliseconds part + + The date to format. + The string builder to write to. + + + Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". + + + The base class will append the ",fff" milliseconds section. + This method will only be called at most once per second. + + + + + + Formats the using the method. + + + + Formats the using the method. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The format string. + + + Initializes a new instance of the class + with the specified format string. + + + The format string must be compatible with the options + that can be supplied to . + + + + + + Formats the date using . + + The date to convert to a string. + The writer to write to. + + + Uses the date format string supplied to the constructor to call + the method to format the date. + + + + + + The format string used to format the . + + + + The format string must be compatible with the options + that can be supplied to . + + + + + + This filter drops all . + + + + You can add this filter to the end of a filter chain to + switch from the default "accept all unless instructed otherwise" + filtering behavior to a "deny all unless instructed otherwise" + behavior. + + + Nicko Cadell + Gert Driesen + + + + Subclass this type to implement customized logging event filtering + + + + Users should extend this class to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface to provide customized logging event filtering + + + + Users should implement this interface to implement customized logging + event filtering. Note that and + , the parent class of all standard + appenders, have built-in filtering rules. It is suggested that you + first use and understand the built-in rules before rushing to write + your own custom filters. + + + This abstract class assumes and also imposes that filters be + organized in a linear chain. The + method of each filter is called sequentially, in the order of their + addition to the chain. + + + The method must return one + of the integer constants , + or . + + + If the value is returned, then the log event is dropped + immediately without consulting with the remaining filters. + + + If the value is returned, then the next filter + in the chain is consulted. If there are no more filters in the + chain, then the log event is logged. Thus, in the presence of no + filters, the default behavior is to log all logging events. + + + If the value is returned, then the log + event is logged without consulting the remaining filters. + + + The philosophy of log4net filters is largely inspired from the + Linux ipchains. + + + Nicko Cadell + Gert Driesen + + + + Decide if the logging event should be logged through an appender. + + The LoggingEvent to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Points to the next filter in the filter chain. + + + + See for more information. + + + + + + Initialize the filter with the options set + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Typically filter's options become active immediately on set, + however this method must still be called. + + + + + + Decide if the should be logged through an appender. + + The to decide upon + The decision of the filter + + + If the decision is , then the event will be + dropped. If the decision is , then the next + filter, if any, will be invoked. If the decision is then + the event will be logged without consulting with other filters in + the chain. + + + This method is marked abstract and must be implemented + in a subclass. + + + + + + Property to get and set the next filter + + + The next filter in the chain + + + + Filters are typically composed into chains. This property allows the next filter in + the chain to be accessed. + + + + + + Default constructor + + + + + Always returns the integer constant + + the LoggingEvent to filter + Always returns + + + Ignores the event being logged and just returns + . This can be used to change the default filter + chain behavior from to . This filter + should only be used as the last filter in the chain + as any further filters will be ignored! + + + + + + The return result from + + + + The return result from + + + + + + The log event must be dropped immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This filter is neutral with respect to the log event. + The remaining filters, if any, should be consulted for a final decision. + + + + + The log event must be logged immediately without + consulting with the remaining filters, if any, in the chain. + + + + + This is a very simple filter based on matching. + + + + The filter admits two options and + . If there is an exact match between the value + of the option and the of the + , then the method returns in + case the option value is set + to true, if it is false then + is returned. If the does not match then + the result will be . + + + Nicko Cadell + Gert Driesen + + + + flag to indicate if the filter should on a match + + + + + the to match against + + + + + Default constructor + + + + + Tests if the of the logging event matches that of the filter + + the event to filter + see remarks + + + If the of the event matches the level of the + filter then the result of the function depends on the + value of . If it is true then + the function will return , it it is false then it + will return . If the does not match then + the result will be . + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + The level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + This is a simple filter based on matching. + + + + The filter admits three options and + that determine the range of priorities that are matched, and + . If there is a match between the range + of priorities and the of the , then the + method returns in case the + option value is set to true, if it is false + then is returned. If there is no match, is returned. + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when matching a + + + + + the minimum value to match + + + + + the maximum value to match + + + + + Default constructor + + + + + Check if the event should be logged. + + the logging event to check + see remarks + + + If the of the logging event is outside the range + matched by this filter then + is returned. If the is matched then the value of + is checked. If it is true then + is returned, otherwise + is returned. + + + + + + when matching and + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Set the minimum matched + + + + The minimum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Sets the maximum matched + + + + The maximum level that this filter will attempt to match against the + level. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a string in the event's logger name. + + + + The works very similar to the . It admits two + options and . If the + of the starts + with the value of the option, then the + method returns in + case the option value is set to true, + if it is false then is returned. + + + Daniel Cazzulino + + + + Flag to indicate the behavior when we have a match + + + + + The logger name string to substring match against the event + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the equals the beginning of + the incoming () + then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + The that the filter will match + + + + This filter will attempt to match this value against logger name in + the following way. The match will be done against the beginning of the + logger name (using ). The match is + case sensitive. If a match is found then + the result depends on the value of . + + + + + + Simple filter to match a keyed string in the + + + + Simple filter to match a keyed string in the + + + As the MDC has been replaced with layered properties the + should be used instead. + + + Nicko Cadell + Gert Driesen + + + + Simple filter to match a string an event property + + + + Simple filter to match a string in the value for a + specific event property + + + Nicko Cadell + + + + Simple filter to match a string in the rendered message + + + + Simple filter to match a string in the rendered message + + + Nicko Cadell + Gert Driesen + + + + Flag to indicate the behavior when we have a match + + + + + The string to substring match against the message + + + + + A string regex to match + + + + + A regex object to match (generated from m_stringRegexToMatch) + + + + + Default constructor + + + + + Initialize and precompile the Regex if required + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The rendered message is matched against the . + If the occurs as a substring within + the message then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + when matching or + + + + The property is a flag that determines + the behavior when a matching is found. If the + flag is set to true then the filter will the + logging event, otherwise it will the event. + + + The default is true i.e. to the event. + + + + + + Sets the static string to match + + + + The string that will be substring matched against + the rendered message. If the message contains this + string then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + Sets the regular expression to match + + + + The regular expression pattern that will be matched against + the rendered message. If the message matches this + pattern then the filter will match. If a match is found then + the result depends on the value of . + + + One of or + must be specified. + + + + + + The key to use to lookup the string from the event properties + + + + + Default constructor + + + + + Check if this filter should allow the event to be logged + + the event being logged + see remarks + + + The event property for the is matched against + the . + If the occurs as a substring within + the property value then a match will have occurred. If no match occurs + this function will return + allowing other filters to check the event. If a match occurs then + the value of is checked. If it is + true then is returned otherwise + is returned. + + + + + + The key to lookup in the event properties and then match against. + + + + The key name to use to lookup in the properties map of the + . The match will be performed against + the value of this property if it exists. + + + + + + Simple filter to match a string in the + + + + Simple filter to match a string in the + + + As the MDC has been replaced with named stacks stored in the + properties collections the should + be used instead. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Sets the to "NDC". + + + + + + Write the event appdomain name to the output + + + + Writes the to the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + Nicko Cadell + + + + Abstract class that provides the formatting functionality that + derived classes need. + + + + Conversion specifiers in a conversion patterns are parsed to + individual PatternConverters. Each of which is responsible for + converting a logging event in a converter specific manner. + + + Nicko Cadell + Gert Driesen + + + + Initial buffer size + + + + + Maximum buffer size before it is recycled + + + + + Protected constructor + + + + Initializes a new instance of the class. + + + + + + Evaluate this pattern converter and write the output to a writer. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the appropriate way. + + + + + + Set the next pattern converter in the chains + + the pattern converter that should follow this converter in the chain + the next converter + + + The PatternConverter can merge with its neighbor during this method (or a sub class). + Therefore the return value may or may not be the value of the argument passed in. + + + + + + Write the pattern converter to the writer with appropriate formatting + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + This method calls to allow the subclass to perform + appropriate conversion of the pattern converter. If formatting options have + been specified via the then this method will + apply those formattings before writing the output. + + + + + + Fast space padding method. + + to which the spaces will be appended. + The number of spaces to be padded. + + + Fast space padding method. + + + + + + The option string to the converter + + + + + Write an dictionary to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the to a writer in the form: + + + {key1=value1, key2=value2, key3=value3} + + + If the specified + is not null then it is used to render the key and value to text, otherwise + the object's ToString method is called. + + + + + + Write an object to a + + the writer to write to + a to use for object conversion + the value to write to the writer + + + Writes the Object to a writer. If the specified + is not null then it is used to render the object to text, otherwise + the object's ToString method is called. + + + + + + Get the next pattern converter in the chain + + + the next pattern converter in the chain + + + + Get the next pattern converter in the chain + + + + + + Gets or sets the formatting info for this converter + + + The formatting info for this converter + + + + Gets or sets the formatting info for this converter + + + + + + Gets or sets the option value for this converter + + + The option for this converter + + + + Gets or sets the option value for this converter + + + + + + Initializes a new instance of the class. + + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The on which the pattern converter should be executed. + + + + Derived pattern converters must override this method in order to + convert conversion specifiers in the correct way. + + that will receive the formatted result. + The state object on which the pattern converter should be executed. + + + + Flag indicating if this converter handles exceptions + + + false if this converter handles exceptions + + + + + Flag indicating if this converter handles the logging event exception + + false if this converter handles the logging event exception + + + If this converter handles the exception object contained within + , then this property should be set to + false. Otherwise, if the layout ignores the exception + object, then the property should be set to true. + + + Set this value to override a this default setting. The default + value is true, this converter does not handle the exception. + + + + + + Write the event appdomain name to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output . + + + + + + Date pattern converter, uses a to format + the date of a . + + + + Render the to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter pattern based on the property. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Convert the pattern into the rendered message + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone. + + + + + + Write the exception text to the output + + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + Nicko Cadell + + + + Default constructor + + + + + Write the exception text to the output + + that will receive the formatted result. + the event being logged + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + + + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + + Writes the caller location file name to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location file name to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Write the caller location info to the output + + + + Writes the to the output writer. + + + Nicko Cadell + + + + Write the caller location info to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the output writer. + + + + + + Writes the event identity to the output + + + + Writes the value of the to + the output writer. + + + Daniel Cazzulino + Nicko Cadell + + + + Writes the event identity to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the + to + the output . + + + + + + Write the event level to the output + + + + Writes the display name of the event + to the writer. + + + Nicko Cadell + + + + Write the event level to the output + + that will receive the formatted result. + the event being logged + + + Writes the of the + to the . + + + + + + Write the caller location line number to the output + + + + Writes the value of the for + the event to the output writer. + + + Nicko Cadell + + + + Write the caller location line number to the output + + that will receive the formatted result. + the event being logged + + + Writes the value of the for + the to the output . + + + + + + Converter for logger name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Converter to output and truncate '.' separated strings + + + + This abstract class supports truncating a '.' separated string + to show a specified number of elements from the right hand side. + This is used to truncate class names that are fully qualified. + + + Subclasses should override the method to + return the fully qualified string. + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Get the fully qualified string data + + the event being logged + the fully qualified name + + + Overridden by subclasses to get the fully qualified name before the + precision is applied to it. + + + Return the fully qualified '.' (dot/period) separated string. + + + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + Render the to the precision + specified by the property. + + + + + Gets the fully qualified name of the logger + + the event being logged + The fully qualified logger name + + + Returns the of the . + + + + + + Writes the event message to the output + + + + Uses the method + to write out the event message. + + + Nicko Cadell + + + + Writes the event message to the output + + that will receive the formatted result. + the event being logged + + + Uses the method + to write out the event message. + + + + + + Write the method name to the output + + + + Writes the caller location to + the output. + + + Nicko Cadell + + + + Write the method name to the output + + that will receive the formatted result. + the event being logged + + + Writes the caller location to + the output. + + + + + + Converter to include event NDC + + + + Outputs the value of the event property named NDC. + + + The should be used instead. + + + Nicko Cadell + + + + Write the event NDC to the output + + that will receive the formatted result. + the event being logged + + + As the thread context stacks are now stored in named event properties + this converter simply looks up the value of the NDC property. + + + The should be used instead. + + + + + + Property pattern converter + + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + the event being logged + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + Converter to output the relative time of the event + + + + Converter to output the time of the event relative to the start of the program. + + + Nicko Cadell + + + + Write the relative time to the output + + that will receive the formatted result. + the event being logged + + + Writes out the relative time of the event in milliseconds. + That is the number of milliseconds between the event + and the . + + + + + + Helper method to get the time difference between two DateTime objects + + start time (in the current local time zone) + end time (in the current local time zone) + the time difference in milliseconds + + + + Converter to include event thread name + + + + Writes the to the output. + + + Nicko Cadell + + + + Write the ThreadName to the output + + that will receive the formatted result. + the event being logged + + + Writes the to the . + + + + + + Pattern converter for the class name + + + + Outputs the of the event. + + + Nicko Cadell + + + + Gets the fully qualified name of the class + + the event being logged + The fully qualified type name for the caller location + + + Returns the of the . + + + + + + Converter to include event user name + + Douglas de la Torre + Nicko Cadell + + + + Convert the pattern to the rendered message + + that will receive the formatted result. + the event being logged + + + + Write the TimeStamp to the output + + + + Date pattern converter, uses a to format + the date of a . + + + Uses a to format the + in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the TimeStamp to the output + + that will receive the formatted result. + the event being logged + + + Pass the to the + for it to render it to the writer. + + + The passed is in the local time zone, this is converted + to Universal time before it is rendered. + + + + + + + A Layout that renders only the Exception text from the logging event + + + + A Layout that renders only the Exception text from the logging event. + + + This Layout should only be used with appenders that utilize multiple + layouts (e.g. ). + + + Nicko Cadell + Gert Driesen + + + + Extend this abstract class to create your own log layout format. + + + + This is the base implementation of the + interface. Most layout objects should extend this class. + + + + + + Subclasses must implement the + method. + + + Subclasses should set the in their default + constructor. + + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by layout objects + + + + An object is used to format a + as text. The method is called by an + appender to transform the into a string. + + + The layout can also supply and + text that is appender before any events and after all the events respectively. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text and output to a writer. + + + If the caller does not have a and prefers the + event to be formatted as a then the following + code can be used to format the event into a . + + + StringWriter writer = new StringWriter(); + Layout.Format(writer, loggingEvent); + string formattedEvent = writer.ToString(); + + + + + + The content type output by this layout. + + The content type + + + The content type output by this layout. + + + This is a MIME type e.g. "text/plain". + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handle exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + + + + The header text + + + + See for more information. + + + + + + The footer text + + + + See for more information. + + + + + + Flag indicating if this layout handles exceptions + + + + false if this layout handles exceptions + + + + + + Empty default constructor + + + + Empty default constructor + + + + + + Activate component options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + This method must be implemented by the subclass. + + + + + + Implement this method to create your own layout format. + + The TextWriter to write the formatted event to + The event to format + + + This method is called by an appender to format + the as text. + + + + + + The content type output by this layout. + + The content type is "text/plain" + + + The content type output by this layout. + + + This base class uses the value "text/plain". + To change this value a subclass must override this + property. + + + + + + The header for the layout format. + + the layout header + + + The Header text will be appended before any logging events + are formatted and appended. + + + + + + The footer for the layout format. + + the layout footer + + + The Footer text will be appended after all the logging events + have been formatted and appended. + + + + + + Flag indicating if this layout handles exceptions + + false if this layout handles exceptions + + + If this layout handles the exception object contained within + , then the layout should return + false. Otherwise, if the layout ignores the exception + object, then the layout should return true. + + + Set this value to override a this default setting. The default + value is true, this layout does not handle the exception. + + + + + + Default constructor + + + + Constructs a ExceptionLayout + + + + + + Activate component options + + + + Part of the component activation + framework. + + + This method does nothing as options become effective immediately. + + + + + + Gets the exception text from the logging event + + The TextWriter to write the formatted event to + the event being logged + + + Write the exception string to the . + The exception string is retrieved from . + + + + + + Interface for raw layout objects + + + + Interface used to format a + to an object. + + + This interface should not be confused with the + interface. This interface is used in + only certain specialized situations where a raw object is + required rather than a formatted string. The + is not generally useful than this interface. + + + Nicko Cadell + Gert Driesen + + + + Implement this method to create your own layout format. + + The event to format + returns the formatted event + + + Implement this method to create your own layout format. + + + + + + Adapts any to a + + + + Where an is required this adapter + allows a to be specified. + + + Nicko Cadell + Gert Driesen + + + + The layout to adapt + + + + + Construct a new adapter + + the layout to adapt + + + Create the adapter for the specified . + + + + + + Format the logging event as an object. + + The event to format + returns the formatted event + + + Format the logging event as an object. + + + Uses the object supplied to + the constructor to perform the formatting. + + + + + + A flexible layout configurable with pattern string. + + + + The goal of this class is to a + as a string. The results + depend on the conversion pattern. + + + The conversion pattern is closely related to the conversion + pattern of the printf function in C. A conversion pattern is + composed of literal text and format control expressions called + conversion specifiers. + + + You are free to insert any literal text within the conversion + pattern. + + + Each conversion specifier starts with a percent sign (%) and is + followed by optional format modifiers and a conversion + pattern name. The conversion pattern name specifies the type of + data, e.g. logger, level, date, thread name. The format + modifiers control such things as field width, padding, left and + right justification. The following is a simple example. + + + Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume + that the log4net environment was set to use a PatternLayout. Then the + statements + + + ILog log = LogManager.GetLogger(typeof(TestApp)); + log.Debug("Message 1"); + log.Warn("Message 2"); + + would yield the output + + DEBUG [main]: Message 1 + WARN [main]: Message 2 + + + Note that there is no explicit separator between text and + conversion specifiers. The pattern parser knows when it has reached + the end of a conversion specifier when it reads a conversion + character. In the example above the conversion specifier + %-5level means the level of the logging event should be left + justified to a width of five characters. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + a + Equivalent to appdomain + + + appdomain + + Used to output the friendly name of the AppDomain where the + logging event was generated. + + + + c + Equivalent to logger + + + C + Equivalent to type + + + class + Equivalent to type + + + d + Equivalent to date + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + exception + + + Used to output the exception passed in with the log message. + + + If an exception object is stored in the logging event + it will be rendered into the pattern output with a + trailing newline. + If there is no exception then nothing will be output + and no trailing newline will be appended. + It is typical to put a newline before the exception + and to have the exception as the last data in the pattern. + + + + + F + Equivalent to file + + + file + + + Used to output the file name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + WARNING Generating caller information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + l + Equivalent to location + + + L + Equivalent to line + + + location + + + Used to output location information of the caller which generated + the logging event. + + + The location information depends on the CLI implementation but + usually consists of the fully qualified name of the calling + method followed by the callers source the file name and line + number between parentheses. + + + The location information can be very useful. However, its + generation is extremely slow. Its use should be avoided + unless execution speed is not an issue. + + + See the note below on the availability of caller location information. + + + + + level + + + Used to output the level of the logging event. + + + + + line + + + Used to output the line number from where the logging request + was issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + logger + + + Used to output the logger of the logging event. The + logger conversion specifier can be optionally followed by + precision specifier, that is a decimal constant in + brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the logger name will be + printed. By default the logger name is printed in full. + + + For example, for the logger name "a.b.c" the pattern + %logger{2} will output "b.c". + + + + + m + Equivalent to message + + + M + Equivalent to method + + + message + + + Used to output the application supplied message associated with + the logging event. + + + + + mdc + + + The MDC (old name for the ThreadContext.Properties) is now part of the + combined event properties. This pattern is supported for compatibility + but is equivalent to property. + + + + + method + + + Used to output the method name where the logging request was + issued. + + + WARNING Generating caller location information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + See the note below on the availability of caller location information. + + + + + n + Equivalent to newline + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + ndc + + + Used to output the NDC (nested diagnostic context) associated + with the thread that generated the logging event. + + + + + p + Equivalent to level + + + P + Equivalent to property + + + properties + Equivalent to property + + + property + + + Used to output the an event specific property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are added to events by loggers or appenders. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the event properties + + The event has that can be set. These + properties are specific to this event only. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + + r + Equivalent to timestamp + + + t + Equivalent to thread + + + timestamp + + + Used to output the number of milliseconds elapsed since the start + of the application until the creation of the logging event. + + + + + thread + + + Used to output the name of the thread that generated the + logging event. Uses the thread number if no name is available. + + + + + type + + + Used to output the fully qualified type name of the caller + issuing the logging request. This conversion specifier + can be optionally followed by precision specifier, that + is a decimal constant in brackets. + + + If a precision specifier is given, then only the corresponding + number of right most components of the class name will be + printed. By default the class name is output in fully qualified form. + + + For example, for the class name "log4net.Layout.PatternLayout", the + pattern %type{1} will output "PatternLayout". + + + WARNING Generating the caller class information is + slow. Thus, its use should be avoided unless execution speed is + not an issue. + + + See the note below on the availability of caller location information. + + + + + u + Equivalent to identity + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + WARNING Generating caller WindowsIdentity information is + extremely slow. Its use should be avoided unless execution speed + is not an issue. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + w + Equivalent to username + + + x + Equivalent to ndc + + + X + Equivalent to mdc + + + % + + + The sequence %% outputs a single percent sign. + + + + + + The single letter patterns are deprecated in favor of the + longer more descriptive pattern names. + + + By default the relevant information is output as is. However, + with the aid of format modifiers it is possible to change the + minimum field width, the maximum field width and justification. + + + The optional format modifier is placed between the percent sign + and the conversion pattern name. + + + The first optional format modifier is the left justification + flag which is just the minus (-) character. Then comes the + optional minimum field width modifier. This is a decimal + constant that represents the minimum number of characters to + output. If the data item requires fewer characters, it is padded on + either the left or the right until the minimum width is + reached. The default is to pad on the left (right justify) but you + can specify right padding with the left justification flag. The + padding character is space. If the data item is larger than the + minimum field width, the field is expanded to accommodate the + data. The value is never truncated. + + + This behavior can be changed using the maximum field + width modifier which is designated by a period followed by a + decimal constant. If the data item is longer than the maximum + field, then the extra characters are removed from the + beginning of the data item and not from the end. For + example, it the maximum field width is eight and the data item is + ten characters long, then the first two characters of the data item + are dropped. This behavior deviates from the printf function in C + where truncation is done from the end. + + + Below are various format modifier examples for the logger + conversion specifier. + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none + + Left pad with spaces if the logger name is less than 20 + characters long. + +
%-20loggertrue20none + + Right pad with spaces if the logger + name is less than 20 characters long. + +
%.30loggerNAnone30 + + Truncate from the beginning if the logger + name is longer than 30 characters. + +
%20.30loggerfalse2030 + + Left pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
%-20.30loggertrue2030 + + Right pad with spaces if the logger name is shorter than 20 + characters. However, if logger name is longer than 30 characters, + then truncate from the beginning. + +
+
+ + Note about caller location information.
+ The following patterns %type %file %line %method %location %class %C %F %L %l %M + all generate caller location information. + Location information uses the System.Diagnostics.StackTrace class to generate + a call stack. The caller's information is then extracted from this stack. +
+ + + The System.Diagnostics.StackTrace class is not supported on the + .NET Compact Framework 1.0 therefore caller location information is not + available on that framework. + + + + + The System.Diagnostics.StackTrace class has this to say about Release builds: + + + "StackTrace information will be most informative with Debug build configurations. + By default, Debug builds include debug symbols, while Release builds do not. The + debug symbols contain most of the file, method name, line number, and column + information used in constructing StackFrame and StackTrace objects. StackTrace + might not report as many method calls as expected, due to code transformations + that occur during optimization." + + + This means that in a Release build the caller information may be incomplete or may + not exist at all! Therefore caller location information cannot be relied upon in a Release build. + + + + Additional pattern converters may be registered with a specific + instance using the method. + +
+ + This is a more detailed pattern. + %timestamp [%thread] %level %logger %ndc - %message%newline + + + A similar pattern except that the relative time is + right padded if less than 6 digits, thread name is right padded if + less than 15 characters and truncated if longer and the logger + name is left padded if shorter than 30 characters and truncated if + longer. + %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline + + Nicko Cadell + Gert Driesen + Douglas de la Torre + Daniel Cazzulino +
+ + + Default pattern string for log output. + + + + Default pattern string for log output. + Currently set to the string "%message%newline" + which just prints the application supplied message. + + + + + + A detailed conversion pattern + + + + A conversion pattern which includes Time, Thread, Logger, and Nested Context. + Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. + + + + + + Internal map of converter identifiers to converter types. + + + + This static map is overridden by the m_converterRegistry instance map + + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternLayout only + + + + + Initialize the global registry + + + + Defines the builtin global rules. + + + + + + Constructs a PatternLayout using the DefaultConversionPattern + + + + The default pattern just produces the application supplied message. + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + As per the contract the + method must be called after the properties on this object have been + configured. + + + + + + Constructs a PatternLayout using the supplied conversion pattern + + the pattern to use + + + Note to Inheritors: This constructor calls the virtual method + . If you override this method be + aware that it will be called before your is called constructor. + + + When using this constructor the method + need not be called. This may not be the case when using a subclass. + + + + + + Create the pattern parser instance + + the pattern to parse + The that will format the event + + + Creates the used to parse the conversion string. Sets the + global and instance rules on the . + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string as specified by the conversion pattern. + + the event being logged + The TextWriter to write the formatted event to + + + Parse the using the patter format + specified in the property. + + + + + + Add a converter to this PatternLayout + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternLayout + + the name of the conversion pattern for this converter + the type of the converter + + + Add a named pattern converter to this instance. This + converter will be used in the formatting of the event. + This method must be called before . + + + The specified must extend the + type. + + + + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + Wrapper class used to map converter names to converter types + + + + Pattern converter info class used during configuration to + pass to the + method. + + + + + + default constructor + + + + + Gets or sets the name of the conversion pattern + + + + The name of the pattern in the format string + + + + + + Gets or sets the type of the converter + + + + The value specified must extend the + type. + + + + + + Type converter for the interface + + + + Used to convert objects to the interface. + Supports converting from the interface to + the interface using the . + + + Nicko Cadell + Gert Driesen + + + + Interface supported by type converters + + + + This interface supports conversion from arbitrary types + to a single target type. See . + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Test if the can be converted to the + type supported by this converter. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Converts the to the type supported + by this converter. + + + + + + Can the sourceType be converted to an + + the source to be to be converted + true if the source type can be converted to + + + Test if the can be converted to a + . Only is supported + as the . + + + + + + Convert the value to a object + + the value to convert + the object + + + Convert the object to a + object. If the object + is a then the + is used to adapt between the two interfaces, otherwise an + exception is thrown. + + + + + + Extract the value of a property from the + + + + Extract the value of a property from the + + + Nicko Cadell + + + + Constructs a RawPropertyLayout + + + + + Lookup the property for + + The event to format + returns property value + + + Looks up and returns the object value of the property + named . If there is no property defined + with than name then null will be returned. + + + + + + The name of the value to lookup in the LoggingEvent Properties collection. + + + Value to lookup in the LoggingEvent Properties collection + + + + String name of the property to lookup in the . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in local time. To format the time stamp + in universal time use . + + + + + + Extract the date from the + + + + Extract the date from the + + + Nicko Cadell + Gert Driesen + + + + Constructs a RawUtcTimeStampLayout + + + + + Gets the as a . + + The event to format + returns the time stamp + + + Gets the as a . + + + The time stamp is in universal time. To format the time stamp + in local time use . + + + + + + A very simple layout + + + + SimpleLayout consists of the level of the log statement, + followed by " - " and then the log message itself. For example, + + DEBUG - Hello world + + + + Nicko Cadell + Gert Driesen + + + + Constructs a SimpleLayout + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a simple formatted output. + + the event being logged + The TextWriter to write the formatted event to + + + Formats the event as the level of the even, + followed by " - " and then the log message itself. The + output is terminated by a newline. + + + + + + Layout that formats the log events as XML elements. + + + + The output of the consists of a series of + log4net:event elements. It does not output a complete well-formed XML + file. The output is designed to be included as an external entity + in a separate file to form a correct XML file. + + + For example, if abc is the name of the file where + the output goes, then a well-formed XML file would + be: + + + <?xml version="1.0" ?> + + <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> + + <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> + &data; + </log4net:events> + + + This approach enforces the independence of the + and the appender where it is embedded. + + + The version attribute helps components to correctly + interpret output generated by . The value of + this attribute should be "1.2" for release 1.2 and later. + + + Alternatively the Header and Footer properties can be + configured to output the correct XML header, open tag and close tag. + When setting the Header and Footer properties it is essential + that the underlying data store not be appendable otherwise the data + will become invalid XML. + + + Nicko Cadell + Gert Driesen + + + + Layout that formats the log events as XML elements. + + + + This is an abstract class that must be subclassed by an implementation + to conform to a specific schema. + + + Deriving classes must implement the method. + + + Nicko Cadell + Gert Driesen + + + + Protected constructor to support subclasses + + + + Initializes a new instance of the class + with no location info. + + + + + + Protected constructor to support subclasses + + + + The parameter determines whether + location information will be output by the layout. If + is set to true, then the + file name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Produces a formatted string. + + The event being logged. + The TextWriter to write the formatted event to + + + Format the and write it to the . + + + This method creates an that writes to the + . The is passed + to the method. Subclasses should override the + method rather than this method. + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Subclasses should override this method to format + the as XML. + + + + + + Flag to indicate if location information should be included in + the XML events. + + + + + Writer adapter that ignores Close + + + + + The string to replace invalid chars with + + + + + Gets a value indicating whether to include location information in + the XML events. + + + true if location information should be included in the XML + events; otherwise, false. + + + + If is set to true, then the file + name and line number of the statement at the origin of the log + statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + The string to replace characters that can not be expressed in XML with. + + + Not all characters may be expressed in XML. This property contains the + string to replace those that can not with. This defaults to a ?. Set it + to the empty string to simply remove offending characters. For more + details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets + Character replacement will occur in the log message, the property names + and the property values. + + + + + + + Gets the content type output by this layout. + + + As this is the XML layout, the value is always "text/xml". + + + + As this is the XML layout, the value is always "text/xml". + + + + + + Constructs an XmlLayout + + + + + Constructs an XmlLayout. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SmtpAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Initialize layout options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + Builds a cache of the element names + + + + + + Does the actual writing of the XML. + + The writer to use to output the event to. + The event to write. + + + Override the base class method + to write the to the . + + + + + + The prefix to use for all generated element names + + + + + The prefix to use for all element names + + + + The default prefix is log4net. Set this property + to change the prefix. If the prefix is set to an empty string + then no prefix will be written. + + + + + + Set whether or not to base64 encode the message. + + + + By default the log message will be written as text to the xml + output. This can cause problems when the message contains binary + data. By setting this to true the contents of the message will be + base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the log message. + + + + + + Set whether or not to base64 encode the property values. + + + + By default the properties will be written as text to the xml + output. This can cause problems when one or more properties contain + binary data. By setting this to true the values of the properties + will be base64 encoded. If this is set then invalid character replacement + (see ) will not be performed + on the property values. + + + + + + Layout that formats the log events as XML elements compatible with the log4j schema + + + + Formats the log events according to the http://logging.apache.org/log4j schema. + + + Nicko Cadell + + + + The 1st of January 1970 in UTC + + + + + Constructs an XMLLayoutSchemaLog4j + + + + + Constructs an XMLLayoutSchemaLog4j. + + + + The LocationInfo option takes a boolean value. By + default, it is set to false which means there will be no location + information output by this layout. If the the option is set to + true, then the file name and line number of the statement + at the origin of the log statement will be output. + + + If you are embedding this layout within an SMTPAppender + then make sure to set the LocationInfo option of that + appender as well. + + + + + + Actually do the writing of the xml + + the writer to use + the event to write + + + Generate XML that is compatible with the log4j schema. + + + + + + The version of the log4j schema to use. + + + + Only version 1.2 of the log4j schema is supported. + + + + + + The default object Renderer. + + + + The default renderer supports rendering objects and collections to strings. + + + See the method for details of the output. + + + Nicko Cadell + Gert Driesen + + + + Implement this interface in order to render objects as strings + + + + Certain types require special case conversion to + string form. This conversion is done by an object renderer. + Object renderers implement the + interface. + + + Nicko Cadell + Gert Driesen + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a + string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + + + + Default constructor + + + + Default constructor + + + + + + Render the object to a string + + The map used to lookup renderers + The object to render + The writer to render to + + + Render the object to a string. + + + The parameter is + provided to lookup and render other objects. This is + very useful where contains + nested objects of unknown type. The + method can be used to render these objects. + + + The default renderer supports rendering objects to strings as follows: + + + + Value + Rendered String + + + null + + "(null)" + + + + + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + , & + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. + + + For example: {a, b, c}. + + + All collection classes that implement its subclasses, + or generic equivalents all implement the interface. + + + + + + + + Rendered as the key, an equals sign ('='), and the value (using the appropriate + renderer). + + + For example: key=value. + + + + + other + + Object.ToString() + + + + + + + + Render the array argument into a string + + The map used to lookup renderers + the array to render + The writer to render to + + + For a one dimensional array this is the + array type name, an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + int[] {1, 2, 3}. + + + If the array is not one dimensional the + Array.ToString() is returned. + + + + + + Render the enumerator argument into a string + + The map used to lookup renderers + the enumerator to render + The writer to render to + + + Rendered as an open brace, followed by a comma + separated list of the elements (using the appropriate + renderer), followed by a close brace. For example: + {a, b, c}. + + + + + + Render the DictionaryEntry argument into a string + + The map used to lookup renderers + the DictionaryEntry to render + The writer to render to + + + Render the key, an equals sign ('='), and the value (using the appropriate + renderer). For example: key=value. + + + + + + Map class objects to an . + + + + Maintains a mapping between types that require special + rendering and the that + is used to render them. + + + The method is used to render an + object using the appropriate renderers defined in this map. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Default constructor. + + + + + + Render using the appropriate renderer. + + the object to render to a string + the object rendered as a string + + + This is a convenience method used to render an object to a string. + The alternative method + should be used when streaming output to a . + + + + + + Render using the appropriate renderer. + + the object to render to a string + The writer to render to + + + Find the appropriate renderer for the type of the + parameter. This is accomplished by calling the + method. Once a renderer is found, it is + applied on the object and the result is returned + as a . + + + + + + Gets the renderer for the specified object type + + the object to lookup the renderer for + the renderer for + + + Gets the renderer for the specified object type. + + + Syntactic sugar method that calls + with the type of the object parameter. + + + + + + Gets the renderer for the specified type + + the type to lookup the renderer for + the renderer for the specified type + + + Returns the renderer for the specified type. + If no specific renderer has been defined the + will be returned. + + + + + + Internal function to recursively search interfaces + + the type to lookup the renderer for + the renderer for the specified type + + + + Clear the map of renderers + + + + Clear the custom renderers defined by using + . The + cannot be removed. + + + + + + Register an for . + + the type that will be rendered by + the renderer for + + + Register an object renderer for a specific source type. + This renderer will be returned from a call to + specifying the same as an argument. + + + + + + Get the default renderer instance + + the default renderer + + + Get the default renderer + + + + + + Interface implemented by logger repository plugins. + + + + Plugins define additional behavior that can be associated + with a . + The held by the + property is used to store the plugins for a repository. + + + The log4net.Config.PluginAttribute can be used to + attach plugins to repositories created using configuration + attributes. + + + Nicko Cadell + Gert Driesen + + + + Attaches the plugin to the specified . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + Gets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + + + + A strongly-typed collection of objects. + + Nicko Cadell + + + + Creates a read-only wrapper for a PluginCollection instance. + + list to create a readonly wrapper arround + + A PluginCollection wrapper that is read-only. + + + + + Initializes a new instance of the PluginCollection class + that is empty and has the default initial capacity. + + + + + Initializes a new instance of the PluginCollection class + that has the specified initial capacity. + + + The number of elements that the new PluginCollection is initially capable of storing. + + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified PluginCollection. + + The PluginCollection whose elements are copied to the new collection. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified array. + + The array whose elements are copied to the new list. + + + + Initializes a new instance of the PluginCollection class + that contains elements copied from the specified collection. + + The collection whose elements are copied to the new list. + + + + Allow subclasses to avoid our default constructors + + + + + + + Copies the entire PluginCollection to a one-dimensional + array. + + The one-dimensional array to copy to. + + + + Copies the entire PluginCollection to a one-dimensional + array, starting at the specified index of the target array. + + The one-dimensional array to copy to. + The zero-based index in at which copying begins. + + + + Adds a to the end of the PluginCollection. + + The to be added to the end of the PluginCollection. + The index at which the value has been added. + + + + Removes all elements from the PluginCollection. + + + + + Creates a shallow copy of the . + + A new with a shallow copy of the collection data. + + + + Determines whether a given is in the PluginCollection. + + The to check for. + true if is found in the PluginCollection; otherwise, false. + + + + Returns the zero-based index of the first occurrence of a + in the PluginCollection. + + The to locate in the PluginCollection. + + The zero-based index of the first occurrence of + in the entire PluginCollection, if found; otherwise, -1. + + + + + Inserts an element into the PluginCollection at the specified index. + + The zero-based index at which should be inserted. + The to insert. + + is less than zero + -or- + is equal to or greater than . + + + + + Removes the first occurrence of a specific from the PluginCollection. + + The to remove from the PluginCollection. + + The specified was not found in the PluginCollection. + + + + + Removes the element at the specified index of the PluginCollection. + + The zero-based index of the element to remove. + + is less than zero. + -or- + is equal to or greater than . + + + + + Returns an enumerator that can iterate through the PluginCollection. + + An for the entire PluginCollection. + + + + Adds the elements of another PluginCollection to the current PluginCollection. + + The PluginCollection whose elements should be added to the end of the current PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a array to the current PluginCollection. + + The array whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Adds the elements of a collection to the current PluginCollection. + + The collection whose elements should be added to the end of the PluginCollection. + The new of the PluginCollection. + + + + Sets the capacity to the actual number of elements. + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets the number of elements actually contained in the PluginCollection. + + + + + Gets a value indicating whether access to the collection is synchronized (thread-safe). + + true if access to the ICollection is synchronized (thread-safe); otherwise, false. + + + + Gets an object that can be used to synchronize access to the collection. + + + An object that can be used to synchronize access to the collection. + + + + + Gets or sets the at the specified index. + + + The at the specified index. + + The zero-based index of the element to get or set. + + is less than zero. + -or- + is equal to or greater than . + + + + + Gets a value indicating whether the collection has a fixed size. + + true if the collection has a fixed size; otherwise, false. The default is false. + + + + Gets a value indicating whether the IList is read-only. + + true if the collection is read-only; otherwise, false. The default is false. + + + + Gets or sets the number of elements the PluginCollection can contain. + + + The number of elements the PluginCollection can contain. + + + + + Supports type-safe iteration over a . + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + + + Type visible only to our subclasses + Used to access protected constructor + + + + + + A value + + + + + Supports simple iteration over a . + + + + + + Initializes a new instance of the Enumerator class. + + + + + + Advances the enumerator to the next element in the collection. + + + true if the enumerator was successfully advanced to the next element; + false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Sets the enumerator to its initial position, before the first element in the collection. + + + + + Gets the current element in the collection. + + + The current element in the collection. + + + + + + + + Map of repository plugins. + + + + This class is a name keyed map of the plugins that are + attached to a repository. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The repository that the plugins should be attached to. + + + Initialize a new instance of the class with a + repository that the plugins should be attached to. + + + + + + Adds a to the map. + + The to add to the map. + + + The will be attached to the repository when added. + + + If there already exists a plugin with the same name + attached to the repository then the old plugin will + be and replaced with + the new plugin. + + + + + + Removes a from the map. + + The to remove from the map. + + + Remove a specific plugin from this map. + + + + + + Gets a by name. + + The name of the to lookup. + + The from the map with the name specified, or + null if no plugin is found. + + + + Lookup a plugin by name. If the plugin is not found null + will be returned. + + + + + + Gets all possible plugins as a list of objects. + + All possible plugins as a list of objects. + + + Get a collection of all the plugins defined in this map. + + + + + + Base implementation of + + + + Default abstract implementation of the + interface. This base class can be used by implementors + of the interface. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + the name of the plugin + + Initializes a new Plugin with the specified name. + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + This method is called to notify the plugin that + it should stop operating and should detach from + the repository. + + + + + + The name of this plugin. + + + + + The repository this plugin is attached to. + + + + + Gets or sets the name of the plugin. + + + The name of the plugin. + + + + Plugins are stored in the + keyed by name. Each plugin instance attached to a + repository must be a unique name. + + + The name of the plugin must not change one the + plugin has been attached to a repository. + + + + + + The repository for this plugin + + + The that this plugin is attached to. + + + + Gets or sets the that this plugin is + attached to. + + + + + + Plugin that listens for events from the + + + + This plugin publishes an instance of + on a specified . This listens for logging events delivered from + a remote . + + + When an event is received it is relogged within the attached repository + as if it had been raised locally. + + + Nicko Cadell + Gert Driesen + + + + Default constructor + + + + Initializes a new instance of the class. + + + The property must be set. + + + + + + Construct with sink Uri. + + The name to publish the sink under in the remoting infrastructure. + See for more details. + + + Initializes a new instance of the class + with specified name. + + + + + + Attaches this plugin to a . + + The that this plugin should be attached to. + + + A plugin may only be attached to a single repository. + + + This method is called when the plugin is attached to the repository. + + + + + + Is called when the plugin is to shutdown. + + + + When the plugin is shutdown the remote logging + sink is disconnected. + + + + + + Gets or sets the URI of this sink. + + + The URI of this sink. + + + + This is the name under which the object is marshaled. + + + + + + + Delivers objects to a remote sink. + + + + Internal class used to listen for logging events + and deliver them to the local repository. + + + + + + Constructor + + The repository to log to. + + + Initializes a new instance of the for the + specified . + + + + + + Logs the events to the repository. + + The events to log. + + + The events passed are logged to the + + + + + + Obtains a lifetime service object to control the lifetime + policy for this instance. + + null to indicate that this instance should live forever. + + + Obtains a lifetime service object to control the lifetime + policy for this instance. This object should live forever + therefore this implementation returns null. + + + + + + The underlying that events should + be logged to. + + + + + Default implementation of + + + + This default implementation of the + interface is used to create the default subclass + of the object. + + + Nicko Cadell + Gert Driesen + + + + Interface abstracts creation of instances + + + + This interface is used by the to + create new objects. + + + The method is called + to create a named . + + + Implement this interface to create new subclasses of . + + + Nicko Cadell + Gert Driesen + + + + Create a new instance + + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Create a new instance + + The name of the . + The instance for the specified name. + + + Create a new instance with the + specified name. + + + Called by the to create + new named instances. + + + If the is null then the root logger + must be returned. + + + + + + Default internal subclass of + + + + This subclass has no additional behavior over the + class but does allow instances + to be created. + + + + + + Implementation of used by + + + + Internal class used to provide implementation of + interface. Applications should use to get + logger instances. + + + This is one of the central classes in the log4net implementation. One of the + distinctive features of log4net are hierarchical loggers and their + evaluation. The organizes the + instances into a rooted tree hierarchy. + + + The class is abstract. Only concrete subclasses of + can be created. The + is used to create instances of this type for the . + + + Nicko Cadell + Gert Driesen + Aspi Havewala + Douglas de la Torre + + + + This constructor created a new instance and + sets its name. + + The name of the . + + + This constructor is protected and designed to be used by + a subclass that is not abstract. + + + Loggers are constructed by + objects. See for the default + logger creator. + + + + + + Add to the list of appenders of this + Logger instance. + + An appender to add to this logger + + + Add to the list of appenders of this + Logger instance. + + + If is already in the list of + appenders, then it won't be added again. + + + + + + Look for the appender named as name + + The name of the appender to lookup + The appender with the name specified, or null. + + + Returns the named appender, or null if the appender is not found. + + + + + + Remove all previously added appenders from this Logger instance. + + + + Remove all previously added appenders from this Logger instance. + + + This is useful when re-reading configuration information. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The appender to remove + The appender removed from the list + + + Remove the appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Remove the appender passed as parameter form the list of appenders. + + The name of the appender to remove + The appender removed from the list + + + Remove the named appender passed as parameter form the list of appenders. + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + This generic form is intended to be used by wrappers. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the and . + + + This method must not throw any exception to the caller. + + + + + + This is the most generic printing method that is intended to be used + by wrappers. + + The event being logged. + + + Logs the specified logging event through this logger. + + + This method must not throw any exception to the caller. + + + + + + Checks if this logger is enabled for a given passed as parameter. + + The level to check. + + true if this logger is enabled for level, otherwise false. + + + + Test if this logger is going to log events of the specified . + + + This method must not throw any exception to the caller. + + + + + + Deliver the to the attached appenders. + + The event to log. + + + Call the appenders in the hierarchy starting at + this. If no appenders could be found, emit a + warning. + + + This method calls all the appenders inherited from the + hierarchy circumventing any evaluation of whether to log or not + to log the particular log request. + + + + + + Closes all attached appenders implementing the interface. + + + + Used to ensure that the appenders are correctly shutdown. + + + + + + This is the most generic printing method. This generic form is intended to be used by wrappers + + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generate a logging event for the specified using + the . + + + + + + Creates a new logging event and logs the event without further checks. + + The declaring type of the method that is + the stack boundary into the logging system for this call. + The level of the message to be logged. + The message object to log. + The exception to log, including its stack trace. + + + Generates a logging event and delivers it to the attached + appenders. + + + + + + Creates a new logging event and logs the event without further checks. + + The event being logged. + + + Delivers the logging event to the attached appenders. + + + + + + The fully qualified type of the Logger class. + + + + + The name of this logger. + + + + + The assigned level of this logger. + + + + The level variable need not be + assigned a value in which case it is inherited + form the hierarchy. + + + + + + The parent of this logger. + + + + The parent of this logger. + All loggers have at least one ancestor which is the root logger. + + + + + + Loggers need to know what Hierarchy they are in. + + + + Loggers need to know what Hierarchy they are in. + The hierarchy that this logger is a member of is stored + here. + + + + + + Helper implementation of the interface + + + + + Flag indicating if child loggers inherit their parents appenders + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl + + + + + Gets or sets the parent logger in the hierarchy. + + + The parent logger in the hierarchy. + + + + Part of the Composite pattern that makes the hierarchy. + The hierarchy is parent linked rather than child linked. + + + + + + Gets or sets a value indicating if child loggers inherit their parent's appenders. + + + true if child loggers inherit their parent's appenders. + + + + Additivity is set to true by default, that is children inherit + the appenders of their ancestors by default. If this variable is + set to false then the appenders found in the + ancestors of this logger are not used. However, the children + of this logger will inherit its appenders, unless the children + have their additivity flag set to false too. See + the user manual for more details. + + + + + + Gets the effective level for this logger. + + The nearest level in the logger hierarchy. + + + Starting from this logger, searches the logger hierarchy for a + non-null level and returns it. Otherwise, returns the level of the + root logger. + + The Logger class is designed so that this method executes as + quickly as possible. + + + + + Gets or sets the where this + Logger instance is attached to. + + The hierarchy that this logger belongs to. + + + This logger must be attached to a single . + + + + + + Gets or sets the assigned , if any, for this Logger. + + + The of this logger. + + + + The assigned can be null. + + + + + + Get the appenders contained in this logger as an + . + + A collection of the appenders in this logger + + + Get the appenders contained in this logger as an + . If no appenders + can be found, then a is returned. + + + + + + Gets the logger name. + + + The name of the logger. + + + + The name of this logger + + + + + + Gets the where this + Logger instance is attached to. + + + The that this logger belongs to. + + + + Gets the where this + Logger instance is attached to. + + + + + + Construct a new Logger + + the name of the logger + + + Initializes a new instance of the class + with the specified name. + + + + + + Delegate used to handle logger creation event notifications. + + The in which the has been created. + The event args that hold the instance that has been created. + + + Delegate used to handle logger creation event notifications. + + + + + + Provides data for the event. + + + + A event is raised every time a + is created. + + + + + + The created + + + + + Constructor + + The that has been created. + + + Initializes a new instance of the event argument + class,with the specified . + + + + + + Gets the that has been created. + + + The that has been created. + + + + The that has been created. + + + + + + Hierarchical organization of loggers + + + + The casual user should not have to deal with this class + directly. + + + This class is specialized in retrieving loggers by name and + also maintaining the logger hierarchy. Implements the + interface. + + + The structure of the logger hierarchy is maintained by the + method. The hierarchy is such that children + link to their parent but parents do not have any references to their + children. Moreover, loggers can be instantiated in any order, in + particular descendant before ancestor. + + + In case a descendant is created before a particular ancestor, + then it creates a provision node for the ancestor and adds itself + to the provision node. Other descendants of the same ancestor add + themselves to the previously created provision node. + + + Nicko Cadell + Gert Driesen + + + + Base implementation of + + + + Default abstract implementation of the interface. + + + Skeleton implementation of the interface. + All types can extend this type. + + + Nicko Cadell + Gert Driesen + + + + Interface implemented by logger repositories. + + + + This interface is implemented by logger repositories. e.g. + . + + + This interface is used by the + to obtain interfaces. + + + Nicko Cadell + Gert Driesen + + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + The name of the logger to lookup + The Logger object with the name specified + + + If the names logger exists it is returned, otherwise + null is returned. + + + + + + Returns all the currently defined loggers as an Array. + + All the defined loggers + + + Returns all the currently defined loggers as an Array. + + + + + + Returns a named logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Returns a named logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + Shutdown the repository + + + Shutting down a repository will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + The name of the repository + + + The name of the repository + + + + The name of the repository. + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + + These properties can be specified on a repository specific basis. + + + + + + Default Constructor + + + + Initializes the repository with default (empty) properties. + + + + + + Construct the repository using specific properties + + the properties to set for this repository + + + Initializes the repository with specified properties. + + + + + + Test if logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the repository. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the repository + + All the defined loggers + + + Returns all the currently defined loggers in the repository as an Array. + + + + + + Return a new logger instance + + The name of the logger to retrieve + The logger object with the name specified + + + Return a new logger instance. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + + + + Shutdown the repository + + + + Shutdown the repository. Can be overridden in a subclass. + This base class implementation notifies the + listeners and all attached plugins of the shutdown event. + + + + + + Reset the repositories configuration to a default state + + + + Reset all values contained in this instance to their + default state. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this repository. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are configured as an Array. + + All the Appenders + + + Returns all the Appenders that are configured as an Array. + + + + + + Adds an object renderer for a specific class. + + The type that will be rendered by the renderer supplied. + The object renderer used to render the object. + + + Adds an object renderer for a specific class. + + + + + + Notify the registered listeners that the repository is shutting down + + Empty EventArgs + + + Notify any listeners that this repository is shutting down. + + + + + + Notify the registered listeners that the repository has had its configuration reset + + Empty EventArgs + + + Notify any listeners that this repository's configuration has been reset. + + + + + + Notify the registered listeners that the repository has had its configuration changed + + Empty EventArgs + + + Notify any listeners that this repository's configuration has changed. + + + + + + Raise a configuration changed event on this repository + + EventArgs.Empty + + + Applications that programmatically change the configuration of the repository should + raise this event notification to notify listeners. + + + + + + The name of the repository + + + The string name of the repository + + + + The name of this repository. The name is + used to store and lookup the repositories + stored by the . + + + + + + The threshold for all events in this repository + + + The threshold for all events in this repository + + + + The threshold for all events in this repository + + + + + + RendererMap accesses the object renderer map for this repository. + + + RendererMap accesses the object renderer map for this repository. + + + + RendererMap accesses the object renderer map for this repository. + + + The RendererMap holds a mapping between types and + objects. + + + + + + The plugin map for this repository. + + + The plugin map for this repository. + + + + The plugin map holds the instances + that have been attached to this repository. + + + + + + Get the level map for the Repository. + + + + Get the level map for the Repository. + + + The level map defines the mappings between + level names and objects in + this repository. + + + + + + Flag indicates if this repository has been configured. + + + Flag indicates if this repository has been configured. + + + + Flag indicates if this repository has been configured. + + + + + + Event to notify that the repository has been shutdown. + + + Event to notify that the repository has been shutdown. + + + + Event raised when the repository has been shutdown. + + + + + + Event to notify that the repository has had its configuration reset. + + + Event to notify that the repository has had its configuration reset. + + + + Event raised when the repository's configuration has been + reset to default. + + + + + + Event to notify that the repository has had its configuration changed. + + + Event to notify that the repository has had its configuration changed. + + + + Event raised when the repository's configuration has been changed. + + + + + + Repository specific properties + + + Repository specific properties + + + These properties can be specified on a repository specific basis + + + + + Basic Configurator interface for repositories + + + + Interface used by basic configurator to configure a + with a default . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified appender + + the appender to use to log all logging events + + + Configure the repository to route all logging events to the + specified appender. + + + + + + Configure repository using XML + + + + Interface used by Xml configurator to configure a . + + + A should implement this interface to support + configuration by the . + + + Nicko Cadell + Gert Driesen + + + + Initialize the repository using the specified config + + the element containing the root of the config + + + The schema for the XML configuration data is defined by + the implementation. + + + + + + Default constructor + + + + Initializes a new instance of the class. + + + + + + Construct with properties + + The properties to pass to this repository. + + + Initializes a new instance of the class. + + + + + + Construct with a logger factory + + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Construct with properties and a logger factory + + The properties to pass to this repository. + The factory to use to create new logger instances. + + + Initializes a new instance of the class with + the specified . + + + + + + Test if a logger exists + + The name of the logger to lookup + The Logger object with the name specified + + + Check if the named logger exists in the hierarchy. If so return + its reference, otherwise returns null. + + + + + + Returns all the currently defined loggers in the hierarchy as an Array + + All the defined loggers + + + Returns all the currently defined loggers in the hierarchy as an Array. + The root logger is not included in the returned + enumeration. + + + + + + Return a new logger instance named as the first parameter using + the default factory. + + + + Return a new logger instance named as the first parameter using + the default factory. + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated and + then linked with its existing ancestors as well as children. + + + The name of the logger to retrieve + The logger object with the name specified + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + + Shutting down a hierarchy will safely close and remove + all appenders in all loggers including the root logger. + + + Some appenders need to be closed before the + application exists. Otherwise, pending logging events might be + lost. + + + The Shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Reset all values contained in this hierarchy instance to their default. + + + + Reset all values contained in this hierarchy instance to their + default. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set its default "off" value. + + + Existing loggers are not removed. They are just reset. + + + This method should be used sparingly and with care as it will + block all logging until it is completed. + + + + + + Log the logEvent through this hierarchy. + + the event to log + + + This method should not normally be used to log. + The interface should be used + for routine logging. This interface can be obtained + using the method. + + + The logEvent is delivered to the appropriate logger and + that logger is then responsible for logging the event. + + + + + + Returns all the Appenders that are currently configured + + An array containing all the currently configured appenders + + + Returns all the instances that are currently configured. + All the loggers are searched for appenders. The appenders may also be containers + for appenders and these are also searched for additional loggers. + + + The list returned is unordered but does not contain duplicates. + + + + + + Collect the appenders from an . + The appender may also be a container. + + + + + + + Collect the appenders from an container + + + + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + + Initialize the log4net system using the specified appender + + the appender to use to log all logging events + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + + Initialize the log4net system using the specified config + + the element containing the root of the config + + + This method provides the same functionality as the + method implemented + on this object, but it is protected and therefore can be called by subclasses. + + + + + + Test if this hierarchy is disabled for the specified . + + The level to check against. + + true if the repository is disabled for the level argument, false otherwise. + + + + If this hierarchy has not been configured then this method will + always return true. + + + This method will return true if this repository is + disabled for level object passed as parameter and + false otherwise. + + + See also the property. + + + + + + Clear all logger definitions from the internal hashtable + + + + This call will clear all logger definitions from the internal + hashtable. Invoking this method will irrevocably mess up the + logger hierarchy. + + + You should really know what you are doing before + invoking this method. + + + + + + Return a new logger instance named as the first parameter using + . + + The name of the logger to retrieve + The factory that will make the new logger instance + The logger object with the name specified + + + If a logger of that name already exists, then it will be + returned. Otherwise, a new logger will be instantiated by the + parameter and linked with its existing + ancestors as well as children. + + + + + + Sends a logger creation event to all registered listeners + + The newly created logger + + Raises the logger creation event. + + + + + Updates all the parents of the specified logger + + The logger to update the parents for + + + This method loops through all the potential parents of + . There 3 possible cases: + + + + No entry for the potential parent of exists + + We create a ProvisionNode for this potential + parent and insert in that provision node. + + + + The entry is of type Logger for the potential parent. + + The entry is 's nearest existing parent. We + update 's parent field with this entry. We also break from + he loop because updating our parent's parent is our parent's + responsibility. + + + + The entry is of type ProvisionNode for this potential parent. + + We add to the list of children for this + potential parent. + + + + + + + + Replace a with a in the hierarchy. + + + + + + We update the links for all the children that placed themselves + in the provision node 'pn'. The second argument 'log' is a + reference for the newly created Logger, parent of all the + children in 'pn'. + + + We loop on all the children 'c' in 'pn'. + + + If the child 'c' has been already linked to a child of + 'log' then there is no need to update 'c'. + + + Otherwise, we set log's parent field to c's parent and set + c's parent field to log. + + + + + + Define or redefine a Level using the values in the argument + + the level values + + + Define or redefine a Level using the values in the argument + + + Supports setting levels via the configuration file. + + + + + + Set a Property using the values in the argument + + the property value + + + Set a Property using the values in the argument. + + + Supports setting property values via the configuration file. + + + + + + Event used to notify that a logger has been created. + + + + Event raised when a logger is created. + + + + + + Has no appender warning been emitted + + + + Flag to indicate if we have already issued a warning + about not having an appender warning. + + + + + + Get the root of this hierarchy + + + + Get the root of this hierarchy. + + + + + + Gets or sets the default instance. + + The default + + + The logger factory is used to create logger instances. + + + + + + A class to hold the value, name and display name for a level + + + + A class to hold the value, name and display name for a level + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Value of the level + + + + If the value is not set (defaults to -1) the value will be looked + up for the current level with the same name. + + + + + + Name of the level + + + The name of the level + + + + The name of the level. + + + + + + Display name for the level + + + The display name of the level + + + + The display name of the level. + + + + + + A class to hold the key and data for a property set in the config file + + + + A class to hold the key and data for a property set in the config file + + + + + + Override Object.ToString to return sensible debug info + + string info about this object + + + + Property Key + + + Property Key + + + + Property Key. + + + + + + Property Value + + + Property Value + + + + Property Value. + + + + + + Used internally to accelerate hash table searches. + + + + Internal class used to improve performance of + string keyed hashtables. + + + The hashcode of the string is cached for reuse. + The string is stored as an interned value. + When comparing two objects for equality + the reference equality of the interned strings is compared. + + + Nicko Cadell + Gert Driesen + + + + Construct key with string name + + + + Initializes a new instance of the class + with the specified name. + + + Stores the hashcode of the string and interns + the string key to optimize comparisons. + + + The Compact Framework 1.0 the + method does not work. On the Compact Framework + the string keys are not interned nor are they + compared by reference. + + + The name of the logger. + + + + Returns a hash code for the current instance. + + A hash code for the current instance. + + + Returns the cached hashcode. + + + + + + Determines whether two instances + are equal. + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + Compares the references of the interned strings. + + + + + + Provision nodes are used where no logger instance has been specified + + + + instances are used in the + when there is no specified + for that node. + + + A provision node holds a list of child loggers on behalf of + a logger that does not exist. + + + Nicko Cadell + Gert Driesen + + + + Create a new provision node with child node + + A child logger to add to this node. + + + Initializes a new instance of the class + with the specified child logger. + + + + + + The sits at the root of the logger hierarchy tree. + + + + The is a regular except + that it provides several guarantees. + + + First, it cannot be assigned a null + level. Second, since the root logger cannot have a parent, the + property always returns the value of the + level field without walking the hierarchy. + + + Nicko Cadell + Gert Driesen + + + + Construct a + + The level to assign to the root logger. + + + Initializes a new instance of the class with + the specified logging level. + + + The root logger names itself as "root". However, the root + logger cannot be retrieved by name. + + + + + + Gets the assigned level value without walking the logger hierarchy. + + The assigned level value without walking the logger hierarchy. + + + Because the root logger cannot have a parent and its level + must not be null this property just returns the + value of . + + + + + + Gets or sets the assigned for the root logger. + + + The of the root logger. + + + + Setting the level of the root logger to a null reference + may have catastrophic results. We prevent this here. + + + + + + Initializes the log4net environment using an XML DOM. + + + + Configures a using an XML DOM. + + + Nicko Cadell + Gert Driesen + + + + Construct the configurator for a hierarchy + + The hierarchy to build. + + + Initializes a new instance of the class + with the specified . + + + + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + The root element to parse. + + + Configure the hierarchy by parsing a DOM tree of XML elements. + + + + + + Parse appenders by IDREF. + + The appender ref element. + The instance of the appender that the ref refers to. + + + Parse an XML element that represents an appender and return + the appender. + + + + + + Parses an appender element. + + The appender element. + The appender instance or null when parsing failed. + + + Parse an XML element that represents an appender and return + the appender instance. + + + + + + Parses a logger element. + + The logger element. + + + Parse an XML element that represents a logger. + + + + + + Parses the root logger element. + + The root element. + + + Parse an XML element that represents the root logger. + + + + + + Parses the children of a logger element. + + The category element. + The logger instance. + Flag to indicate if the logger is the root logger. + + + Parse the child elements of a <logger> element. + + + + + + Parses an object renderer. + + The renderer element. + + + Parse an XML element that represents a renderer. + + + + + + Parses a level element. + + The level element. + The logger object to set the level on. + Flag to indicate if the logger is the root logger. + + + Parse an XML element that represents a level. + + + + + + Sets a parameter on an object. + + The parameter element. + The object to set the parameter on. + + The parameter name must correspond to a writable property + on the object. The value of the parameter is a string, + therefore this function will attempt to set a string + property first. If unable to set a string property it + will inspect the property and its argument type. It will + attempt to call a static method called Parse on the + type of the property. This method will take a single + string argument and return a value that can be used to + set the property. + + + + + Test if an element has no attributes or child elements + + the element to inspect + true if the element has any attributes or child elements, false otherwise + + + + Test if a is constructible with Activator.CreateInstance. + + the type to inspect + true if the type is creatable using a default constructor, false otherwise + + + + Look for a method on the that matches the supplied + + the type that has the method + the name of the method + the method info found + + + The method must be a public instance method on the . + The method must be named or "Add" followed by . + The method must take a single parameter. + + + + + + Converts a string value to a target type. + + The type of object to convert the string to. + The string value to use as the value of the object. + + + An object of type with value or + null when the conversion could not be performed. + + + + + + Creates an object as specified in XML. + + The XML element that contains the definition of the object. + The object type to use if not explicitly specified. + The type that the returned object must be or must inherit from. + The object or null + + + Parse an XML element and create an object instance based on the configuration + data. + + + The type of the instance may be specified in the XML. If not + specified then the is used + as the type. However the type is specified it must support the + type. + + + + + + key: appenderName, value: appender. + + + + + The Hierarchy being configured. + + + + + Delegate used to handle logger repository shutdown event notifications + + The that is shutting down. + Empty event args + + + Delegate used to handle logger repository shutdown event notifications. + + + + + + Delegate used to handle logger repository configuration reset event notifications + + The that has had its configuration reset. + Empty event args + + + Delegate used to handle logger repository configuration reset event notifications. + + + + + + Delegate used to handle event notifications for logger repository configuration changes. + + The that has had its configuration changed. + Empty event arguments. + + + Delegate used to handle event notifications for logger repository configuration changes. + + + + + + Write the name of the current AppDomain to the output + + + + Write the name of the current AppDomain to the output writer + + + Nicko Cadell + + + + Write the name of the current AppDomain to the output + + the writer to write to + null, state is not set + + + Writes name of the current AppDomain to the output . + + + + + + Write the current date to the output + + + + Date pattern converter, uses a to format + the current date and time to the writer as a string. + + + The value of the determines + the formatting of the date. The following values are allowed: + + + Option value + Output + + + ISO8601 + + Uses the formatter. + Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. + + + + DATE + + Uses the formatter. + Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". + + + + ABSOLUTE + + Uses the formatter. + Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". + + + + other + + Any other pattern string uses the formatter. + This formatter passes the pattern string to the + method. + For details on valid patterns see + DateTimeFormatInfo Class. + + + + + + The date and time is in the local time zone and is rendered in that zone. + To output the time in Universal time see . + + + Nicko Cadell + + + + The used to render the date to a string + + + + The used to render the date to a string + + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current date to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date and time passed is in the local time zone. + + + + + + Write an environment variable to the output + + + + Write an environment variable to the output writer. + The value of the determines + the name of the variable to output. + + + Nicko Cadell + + + + Write an environment variable to the output + + the writer to write to + null, state is not set + + + Writes the environment variable to the output . + The name of the environment variable to output must be set + using the + property. + + + + + + Write the current thread identity to the output + + + + Write the current thread identity to the output writer + + + Nicko Cadell + + + + Write the current thread identity to the output + + the writer to write to + null, state is not set + + + Writes the current thread identity to the output . + + + + + + Pattern converter for literal string instances in the pattern + + + + Writes the literal string value specified in the + property to + the output. + + + Nicko Cadell + + + + Set the next converter in the chain + + The next pattern converter in the chain + The next pattern converter + + + Special case the building of the pattern converter chain + for instances. Two adjacent + literals in the pattern can be represented by a single combined + pattern converter. This implementation detects when a + is added to the chain + after this converter and combines its value with this converter's + literal value. + + + + + + Write the literal to the output + + the writer to write to + null, not set + + + Override the formatting behavior to ignore the FormattingInfo + because we have a literal instead. + + + Writes the value of + to the output . + + + + + + Convert this pattern into the rendered message + + that will receive the formatted result. + null, not set + + + This method is not used. + + + + + + Writes a newline to the output + + + + Writes the system dependent line terminator to the output. + This behavior can be overridden by setting the : + + + + Option Value + Output + + + DOS + DOS or Windows line terminator "\r\n" + + + UNIX + UNIX line terminator "\n" + + + + Nicko Cadell + + + + Initialize the converter + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write the current process ID to the output + + + + Write the current process ID to the output writer + + + Nicko Cadell + + + + Write the current process ID to the output + + the writer to write to + null, state is not set + + + Write the current process ID to the output . + + + + + + Property pattern converter + + + + This pattern converter reads the thread and global properties. + The thread properties take priority over global properties. + See for details of the + thread properties. See for + details of the global properties. + + + If the is specified then that will be used to + lookup a single property. If no is specified + then all properties will be dumped as a list of key value pairs. + + + Nicko Cadell + + + + Write the property value to the output + + that will receive the formatted result. + null, state is not set + + + Writes out the value of a named property. The property name + should be set in the + property. + + + If the is set to null + then all the properties are written as key value pairs. + + + + + + A Pattern converter that generates a string of random characters + + + + The converter generates a string of random characters. By default + the string is length 4. This can be changed by setting the + to the string value of the length required. + + + The random characters in the string are limited to uppercase letters + and numbers only. + + + The random number generator used by this class is not cryptographically secure. + + + Nicko Cadell + + + + Shared random number generator + + + + + Length of random string to generate. Default length 4. + + + + + Initialize the converter options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Write a randoim string to the output + + the writer to write to + null, state is not set + + + Write a randoim string to the output . + + + + + + Write the current threads username to the output + + + + Write the current threads username to the output writer + + + Nicko Cadell + + + + Write the current threads username to the output + + the writer to write to + null, state is not set + + + Write the current threads username to the output . + + + + + + Write the UTC date time to the output + + + + Date pattern converter, uses a to format + the current date and time in Universal time. + + + See the for details on the date pattern syntax. + + + + Nicko Cadell + + + + Write the current date and time to the output + + that will receive the formatted result. + null, state is not set + + + Pass the current date and time to the + for it to render it to the writer. + + + The date is in Universal time when it is rendered. + + + + + + + Type converter for Boolean. + + + + Supports conversion from string to bool type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Convert the source object to the type supported by this object + + the object to convert + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Exception base type for conversion errors. + + + + This type extends . It + does not add any new functionality but does differentiate the + type of exception being thrown. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + A message to include with the exception. + + + Initializes a new instance of the class + with the specified message. + + + + + + Constructor + + A message to include with the exception. + A nested exception to include. + + + Initializes a new instance of the class + with the specified message and inner exception. + + + + + + Serialization constructor + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + An instance of the . + + + Creates a new instance of the class. + + + + + + Creates a new instance of the class. + + The conversion destination type. + The value to convert. + A nested exception to include. + An instance of the . + + + Creates a new instance of the class. + + + + + + Register of type converters for specific types. + + + + Maintains a registry of type converters used to convert between + types. + + + Use the and + methods to register new converters. + The and methods + lookup appropriate converters to use. + + + + + Nicko Cadell + Gert Driesen + + + + Private constructor + + + Initializes a new instance of the class. + + + + + Static constructor. + + + + This constructor defines the intrinsic type converters. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type converter to use to convert to the destination type. + + + Adds a converter instance for a specific type. + + + + + + Adds a converter for a specific type. + + The type being converted to. + The type of the type converter to use to convert to the destination type. + + + Adds a converter for a specific type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted from. + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Gets the type converter to use to convert values to the destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + Gets the type converter to use to convert values to the destination type. + + + + + + Lookups the type converter to use as specified by the attributes on the + destination type. + + The type being converted to. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + + Creates the instance of the type converter. + + The type of the type converter. + + The type converter instance to use for type conversions or null + if no type converter is found. + + + + The type specified for the type converter must implement + the or interfaces + and must have a public default (no argument) constructor. + + + + + + Mapping from to type converter. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + Gert Driesen + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an encoding + the encoding + + + Uses the method to + convert the argument to an . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Interface supported by type converters + + + + This interface supports conversion from a single type to arbitrary types. + See . + + + Nicko Cadell + + + + Returns whether this converter can convert the object to the specified type + + A Type that represents the type you want to convert to + true if the conversion is possible + + + Test if the type supported by this converter can be converted to the + . + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Converts the (which must be of the type supported + by this converter) to the specified.. + + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to an IPAddress + the IPAddress + + + Uses the method to convert the + argument to an . + If that fails then the string is resolved as a DNS hostname. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternLayout + the PatternLayout + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Convert between string and + + + + Supports conversion from string to type, + and from a type to a string. + + + The string is used as the + of the . + + + + + + Nicko Cadell + + + + Can the target type be converted to the type supported by this object + + A that represents the type you want to convert to + true if the conversion is possible + + + Returns true if the is + assignable from a type. + + + + + + Converts the given value object to the specified type, using the arguments + + the object to convert + The Type to convert the value parameter to + the converted object + + + Uses the method to convert the + argument to a . + + + + The object cannot be converted to the + . To check for this condition use the + method. + + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a PatternString + the PatternString + + + Creates and returns a new using + the as the + . + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Supports conversion from string to type. + + + + Supports conversion from string to type. + + + + + + Nicko Cadell + + + + Can the source type be converted to the type supported by this object + + the type to convert + true if the conversion is possible + + + Returns true if the is + the type. + + + + + + Overrides the ConvertFrom method of IConvertFrom. + + the object to convert to a Type + the Type + + + Uses the method to convert the + argument to a . + Additional effort is made to locate partially specified types + by searching the loaded assemblies. + + + + The object cannot be converted to the + target type. To check for this condition use the + method. + + + + + Attribute used to associate a type converter + + + + Class and Interface level attribute that specifies a type converter + to use with the associated type. + + + To associate a type converter with a target type apply a + TypeConverterAttribute to the target type. Specify the + type of the type converter on the attribute. + + + Nicko Cadell + Gert Driesen + + + + The string type name of the type converter + + + + + Default constructor + + + + Default constructor + + + + + + Create a new type converter attribute for the specified type name + + The string type name of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + Create a new type converter attribute for the specified type + + The type of the type converter + + + The type specified must implement the + or the interfaces. + + + + + + The string type name of the type converter + + + The string type name of the type converter + + + + The type specified must implement the + or the interfaces. + + + + + + A straightforward implementation of the interface. + + + + This is the default implementation of the + interface. Implementors of the interface + should aggregate an instance of this type. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Append on on all attached appenders. + + The event being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Append on on all attached appenders. + + The array of events being logged. + The number of appenders called. + + + Calls the method on all + attached appenders. + + + + + + Calls the DoAppende method on the with + the objects supplied. + + The appender + The events + + + If the supports the + interface then the will be passed + through using that interface. Otherwise the + objects in the array will be passed one at a time. + + + + + + Attaches an appender. + + The appender to add. + + + If the appender is already in the list it won't be added again. + + + + + + Gets an attached appender with the specified name. + + The name of the appender to get. + + The appender with the name specified, or null if no appender with the + specified name is found. + + + + Lookup an attached appender by name. + + + + + + Removes all attached appenders. + + + + Removes and closes all attached appenders + + + + + + Removes the specified appender from the list of attached appenders. + + The appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + Removes the appender with the specified name from the list of appenders. + + The name of the appender to remove. + The appender removed from the list + + + The appender removed is not closed. + If you are discarding the appender you must call + on the appender removed. + + + + + + List of appenders + + + + + Array of appenders, used to cache the m_appenderList + + + + + Gets all attached appenders. + + + A collection of attached appenders, or null if there + are no attached appenders. + + + + The read only collection of all currently attached appenders. + + + + + + This class aggregates several PropertiesDictionary collections together. + + + + Provides a dictionary style lookup over an ordered list of + collections. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Add a Properties Dictionary to this composite collection + + the properties to add + + + Properties dictionaries added first take precedence over dictionaries added + later. + + + + + + Flatten this composite collection into a single properties dictionary + + the flattened dictionary + + + Reduces the collection of ordered dictionaries to a single dictionary + containing the resultant values for the keys. + + + + + + Gets the value of a property + + + The value for the property with the specified key + + + + Looks up the value for the specified. + The collections are searched + in the order in which they were added to this collection. The value + returned is the value held by the first collection that contains + the specified key. + + + If none of the collections contain the specified key then + null is returned. + + + + + + Base class for Context Properties implementations + + + + This class defines a basic property get set accessor + + + Nicko Cadell + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Subclass of that maintains a count of + the number of bytes written. + + + + This writer counts the number of bytes written. + + + Nicko Cadell + Gert Driesen + + + + that does not leak exceptions + + + + does not throw exceptions when things go wrong. + Instead, it delegates error handling to its . + + + Nicko Cadell + Gert Driesen + + + + Adapter that extends and forwards all + messages to an instance of . + + + + Adapter that extends and forwards all + messages to an instance of . + + + Nicko Cadell + + + + The writer to forward messages to + + + + + Create an instance of that forwards all + messages to a . + + The to forward to + + + Create an instance of that forwards all + messages to a . + + + + + + Closes the writer and releases any system resources associated with the writer + + + + + + + + + Dispose this writer + + flag indicating if we are being disposed + + + Dispose this writer + + + + + + Flushes any buffered output + + + + Clears all buffers for the writer and causes any buffered data to be written + to the underlying device + + + + + + Writes a character to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a character to the wrapped TextWriter + + + + + + Writes a character buffer to the wrapped TextWriter + + the data buffer + the start index + the number of characters to write + + + Writes a character buffer to the wrapped TextWriter + + + + + + Writes a string to the wrapped TextWriter + + the value to write to the TextWriter + + + Writes a string to the wrapped TextWriter + + + + + + Gets or sets the underlying . + + + The underlying . + + + + Gets or sets the underlying . + + + + + + The Encoding in which the output is written + + + The + + + + The Encoding in which the output is written + + + + + + Gets an object that controls formatting + + + The format provider + + + + Gets an object that controls formatting + + + + + + Gets or sets the line terminator string used by the TextWriter + + + The line terminator to use + + + + Gets or sets the line terminator string used by the TextWriter + + + + + + Constructor + + the writer to actually write to + the error handler to report error to + + + Create a new QuietTextWriter using a writer and error handler + + + + + + Writes a character to the underlying writer + + the char to write + + + Writes a character to the underlying writer + + + + + + Writes a buffer to the underlying writer + + the buffer to write + the start index to write from + the number of characters to write + + + Writes a buffer to the underlying writer + + + + + + Writes a string to the output. + + The string data to write to the output. + + + Writes a string to the output. + + + + + + Closes the underlying output writer. + + + + Closes the underlying output writer. + + + + + + The error handler instance to pass all errors to + + + + + Flag to indicate if this writer is closed + + + + + Gets or sets the error handler that all errors are passed to. + + + The error handler that all errors are passed to. + + + + Gets or sets the error handler that all errors are passed to. + + + + + + Gets a value indicating whether this writer is closed. + + + true if this writer is closed, otherwise false. + + + + Gets a value indicating whether this writer is closed. + + + + + + Constructor + + The to actually write to. + The to report errors to. + + + Creates a new instance of the class + with the specified and . + + + + + + Writes a character to the underlying writer and counts the number of bytes written. + + the char to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a buffer to the underlying writer and counts the number of bytes written. + + the buffer to write + the start index to write from + the number of characters to write + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Writes a string to the output and counts the number of bytes written. + + The string data to write to the output. + + + Overrides implementation of . Counts + the number of bytes written. + + + + + + Total number of bytes written. + + + + + Gets or sets the total number of bytes written. + + + The total number of bytes written. + + + + Gets or sets the total number of bytes written. + + + + + + A fixed size rolling buffer of logging events. + + + + An array backed fixed size leaky bucket. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The maximum number of logging events in the buffer. + + + Initializes a new instance of the class with + the specified maximum number of buffered logging events. + + + The argument is not a positive integer. + + + + Appends a to the buffer. + + The event to append to the buffer. + The event discarded from the buffer, if the buffer is full, otherwise null. + + + Append an event to the buffer. If the buffer still contains free space then + null is returned. If the buffer is full then an event will be dropped + to make space for the new event, the event dropped is returned. + + + + + + Get and remove the oldest event in the buffer. + + The oldest logging event in the buffer + + + Gets the oldest (first) logging event in the buffer and removes it + from the buffer. + + + + + + Pops all the logging events from the buffer into an array. + + An array of all the logging events in the buffer. + + + Get all the events in the buffer and clear the buffer. + + + + + + Clear the buffer + + + + Clear the buffer of all events. The events in the buffer are lost. + + + + + + Gets the th oldest event currently in the buffer. + + The th oldest event currently in the buffer. + + + If is outside the range 0 to the number of events + currently in the buffer, then null is returned. + + + + + + Gets the maximum size of the buffer. + + The maximum size of the buffer. + + + Gets the maximum size of the buffer + + + + + + Gets the number of logging events in the buffer. + + The number of logging events in the buffer. + + + This number is guaranteed to be in the range 0 to + (inclusive). + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + The singleton instance of the empty collection. + + + + + Gets the singleton instance of the empty collection. + + The singleton instance of the empty collection. + + + Gets the singleton instance of the empty collection. + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the . + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + An always empty . + + + + A singleton implementation of the + interface that always represents an empty collection. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Copies the elements of the to an + , starting at a particular Array index. + + The one-dimensional + that is the destination of the elements copied from + . The Array must have zero-based + indexing. + The zero-based index in array at which + copying begins. + + + As the collection is empty no values are copied into the array. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Adds an element with the provided key and value to the + . + + The to use as the key of the element to add. + The to use as the value of the element to add. + + + As the collection is empty no new values can be added. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Removes all elements from the . + + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + Determines whether the contains an element + with the specified key. + + The key to locate in the . + false + + + As the collection is empty the method always returns false. + + + + + + Returns an enumerator that can iterate through a collection. + + + An that can be used to + iterate through the collection. + + + + As the collection is empty a is returned. + + + + + + Removes the element with the specified key from the . + + The key of the element to remove. + + + As the collection is empty no values can be removed. A + is thrown if this method is called. + + + This dictionary is always empty and cannot be modified. + + + + The singleton instance of the empty dictionary. + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets a value indicating if access to the is synchronized (thread-safe). + + + true if access to the is synchronized (thread-safe); otherwise, false. + + + + For the this property is always true. + + + + + + Gets the number of elements contained in the + + + The number of elements contained in the . + + + + As the collection is empty the is always 0. + + + + + + Gets an object that can be used to synchronize access to the . + + + An object that can be used to synchronize access to the . + + + + As the collection is empty and thread safe and synchronized this instance is also + the object. + + + + + + Gets a value indicating whether the has a fixed size. + + true + + + As the collection is empty always returns true. + + + + + + Gets a value indicating whether the is read-only. + + true + + + As the collection is empty always returns true. + + + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + As the collection is empty a is returned. + + + + + + Gets an containing the values of the . + + An containing the values of the . + + + As the collection is empty a is returned. + + + + + + Gets or sets the element with the specified key. + + The key of the element to get or set. + null + + + As the collection is empty no values can be looked up or stored. + If the index getter is called then null is returned. + A is thrown if the setter is called. + + + This dictionary is always empty and cannot be modified. + + + + Contain the information obtained when parsing formatting modifiers + in conversion modifiers. + + + + Holds the formatting information extracted from the format string by + the . This is used by the + objects when rendering the output. + + + Nicko Cadell + Gert Driesen + + + + Defaut Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + + + Initializes a new instance of the class + with the specified parameters. + + + + + + Gets or sets the minimum value. + + + The minimum value. + + + + Gets or sets the minimum value. + + + + + + Gets or sets the maximum value. + + + The maximum value. + + + + Gets or sets the maximum value. + + + + + + Gets or sets a flag indicating whether left align is enabled + or not. + + + A flag indicating whether left align is enabled or not. + + + + Gets or sets a flag indicating whether left align is enabled or not. + + + + + + Implementation of Properties collection for the + + + + This class implements a properties collection that is thread safe and supports both + storing properties and capturing a read only copy of the current propertied. + + + This class is optimized to the scenario where the properties are read frequently + and are modified infrequently. + + + Nicko Cadell + + + + The read only copy of the properties. + + + + This variable is declared volatile to prevent the compiler and JIT from + reordering reads and writes of this thread performed on different threads. + + + + + + Lock object used to synchronize updates within this instance + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property from the global context + + the key for the entry to remove + + + Removing an entry from the global context properties is relatively expensive compared + with reading a value. + + + + + + Clear the global context properties + + + + + Get a readonly immutable copy of the properties + + the current global context properties + + + This implementation is fast because the GlobalContextProperties class + stores a readonly copy of the properties. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Reading the value for a key is faster than setting the value. + When the value is written a new read only copy of + the properties is created. + + + + + + Manages a mapping from levels to + + + + Manages an ordered mapping from instances + to subclasses. + + + Nicko Cadell + + + + Default constructor + + + + Initialise a new instance of . + + + + + + Add a to this mapping + + the entry to add + + + If a has previously been added + for the same then that entry will be + overwritten. + + + + + + Lookup the mapping for the specified level + + the level to lookup + the for the level or null if no mapping found + + + Lookup the value for the specified level. Finds the nearest + mapping value for the level that is equal to or less than the + specified. + + + If no mapping could be found then null is returned. + + + + + + Initialize options + + + + Caches the sorted list of in an array + + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove the value for the specified from the context. + + + + + + Clear all the context properties + + + + Clear all the context properties + + + + + + Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doings so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Get or set the property value for the specified. + + + + + + Outputs log statements from within the log4net assembly. + + + + Log4net components cannot make log4net logging calls. However, it is + sometimes useful for the user to learn about what log4net is + doing. + + + All log4net internal debug calls go to the standard output stream + whereas internal error messages are sent to the standard error output + stream. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Static constructor that initializes logging by reading + settings from the application configuration file. + + + + The log4net.Internal.Debug application setting + controls internal debugging. This setting should be set + to true to enable debugging. + + + The log4net.Internal.Quiet application setting + suppresses all internal logging including error messages. + This setting should be set to true to enable message + suppression. + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The message to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal debug messages to the + standard output stream. + + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net: ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The message to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal warning messages to the + standard error stream. + + The message to log. + An exception to log. + + + All internal warning messages are prepended with + the string "log4net:WARN ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The message to log. + + + All internal error messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes log4net internal error messages to the + standard error stream. + + The message to log. + An exception to log. + + + All internal debug messages are prepended with + the string "log4net:ERROR ". + + + + + + Writes output to the standard output stream. + + The message to log. + + + Writes to both Console.Out and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Writes output to the standard error stream. + + The message to log. + + + Writes to both Console.Error and System.Diagnostics.Trace. + Note that the System.Diagnostics.Trace is not supported + on the Compact Framework. + + + If the AppDomain is not configured with a config file then + the call to System.Diagnostics.Trace may fail. This is only + an issue if you are programmatically creating your own AppDomains. + + + + + + Default debug level + + + + + In quietMode not even errors generate any output. + + + + + Gets or sets a value indicating whether log4net internal logging + is enabled or disabled. + + + true if log4net internal logging is enabled, otherwise + false. + + + + When set to true, internal debug level logging will be + displayed. + + + This value can be set by setting the application setting + log4net.Internal.Debug in the application configuration + file. + + + The default value is false, i.e. debugging is + disabled. + + + + + The following example enables internal debugging using the + application configuration file : + + + + + + + + + + + + + Gets or sets a value indicating whether log4net should generate no output + from internal logging, not even for errors. + + + true if log4net should generate no output at all from internal + logging, otherwise false. + + + + When set to true will cause internal logging at all levels to be + suppressed. This means that no warning or error reports will be logged. + This option overrides the setting and + disables all debug also. + + This value can be set by setting the application setting + log4net.Internal.Quiet in the application configuration file. + + + The default value is false, i.e. internal logging is not + disabled. + + + + The following example disables internal logging using the + application configuration file : + + + + + + + + + + + + Test if LogLog.Debug is enabled for output. + + + true if Debug is enabled + + + + Test if LogLog.Debug is enabled for output. + + + + + + Test if LogLog.Warn is enabled for output. + + + true if Warn is enabled + + + + Test if LogLog.Warn is enabled for output. + + + + + + Test if LogLog.Error is enabled for output. + + + true if Error is enabled + + + + Test if LogLog.Error is enabled for output. + + + + + + Represents a native error code and message. + + + + Represents a Win32 platform native error. + + + Nicko Cadell + Gert Driesen + + + + Create an instance of the class with the specified + error number and message. + + The number of the native error. + The message of the native error. + + + Create an instance of the class with the specified + error number and message. + + + + + + Create a new instance of the class for the last Windows error. + + + An instance of the class for the last windows error. + + + + The message for the error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Create a new instance of the class. + + the error number for the native error + + An instance of the class for the specified + error number. + + + + The message for the specified error number is lookup up using the + native Win32 FormatMessage function. + + + + + + Retrieves the message corresponding with a Win32 message identifier. + + Message identifier for the requested message. + + The message corresponding with the specified message identifier. + + + + The message will be searched for in system message-table resource(s) + using the native FormatMessage function. + + + + + + Return error information string + + error information string + + + Return error information string + + + + + + Formats a message string. + + Formatting options, and how to interpret the parameter. + Location of the message definition. + Message identifier for the requested message. + Language identifier for the requested message. + If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . + If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. + Pointer to an array of values that are used as insert values in the formatted message. + + + The function requires a message definition as input. The message definition can come from a + buffer passed into the function. It can come from a message table resource in an + already-loaded module. Or the caller can ask the function to search the system's message + table resource(s) for the message definition. The function finds the message definition + in a message table resource based on a message identifier and a language identifier. + The function copies the formatted message text to an output buffer, processing any embedded + insert sequences if requested. + + + To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. + + + + + If the function succeeds, the return value is the number of TCHARs stored in the output + buffer, excluding the terminating null character. + + + If the function fails, the return value is zero. To get extended error information, + call . + + + + + + Gets the number of the native error. + + + The number of the native error. + + + + Gets the number of the native error. + + + + + + Gets the message of the native error. + + + The message of the native error. + + + + + Gets the message of the native error. + + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance. + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Gets the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current key from the enumerator. + + + Throws an exception because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current value from the enumerator. + + The current value from the enumerator. + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + Gets the current entry from the enumerator. + + + Throws an because the + never has a current entry. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + An always empty . + + + + A singleton implementation of the over a collection + that is empty and not modifiable. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to enforce the singleton pattern. + + + + + + Test if the enumerator can advance, if so advance + + false as the cannot advance. + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will always return false. + + + + + + Resets the enumerator back to the start. + + + + As the enumerator is over an empty collection does nothing. + + + + + + The singleton instance of the . + + + + + Get the singleton instance of the . + + The singleton instance of the . + + + Gets the singleton instance of the . + + + + + + Gets the current object from the enumerator. + + + Throws an because the + never has a current value. + + + + As the enumerator is over an empty collection its + value cannot be moved over a valid position, therefore + will throw an . + + + The collection is empty and + cannot be positioned over a valid location. + + + + A SecurityContext used when a SecurityContext is not required + + + + The is a no-op implementation of the + base class. It is used where a + is required but one has not been provided. + + + Nicko Cadell + + + + Singleton instance of + + + + Singleton instance of + + + + + + Private constructor + + + + Private constructor for singleton pattern. + + + + + + Impersonate this SecurityContext + + State supplied by the caller + null + + + No impersonation is done and null is always returned. + + + + + + Implements log4net's default error handling policy which consists + of emitting a message for the first error in an appender and + ignoring all subsequent errors. + + + + The error message is printed on the standard error output stream. + + + This policy aims at protecting an otherwise working application + from being flooded with error messages when logging fails. + + + Nicko Cadell + Gert Driesen + + + + Default Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + The prefix to use for each message. + + + Initializes a new instance of the class + with the specified prefix. + + + + + + Log an Error + + The error message. + The exception. + The internal error code. + + + Prints the message and the stack trace of the exception on the standard + error output stream. + + + + + + Log an Error + + The error message. + The exception. + + + Prints the message and the stack trace of the exception on the standard + error output stream. + + + + + + Log an error + + The error message. + + + Print a the error message passed as parameter on the standard + error output stream. + + + + + + Flag to indicate if it is the first error + + + + + String to prefix each message with + + + + + Is error logging enabled + + + + Is error logging enabled. Logging is only enabled for the + first error delivered to the . + + + + + + A convenience class to convert property values to specific types. + + + + Utility functions for converting types and parsing values. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Converts a string to a value. + + String to convert. + The default value. + The value of . + + + If is "true", then true is returned. + If is "false", then false is returned. + Otherwise, is returned. + + + + + + Parses a file size into a number. + + String to parse. + The default value. + The value of . + + + Parses a file size of the form: number[KB|MB|GB] into a + long value. It is scaled with the appropriate multiplier. + + + is returned when + cannot be converted to a value. + + + + + + Converts a string to an object. + + The target type to convert to. + The string to convert to an object. + + The object converted from a string or null when the + conversion failed. + + + + Converts a string to an object. Uses the converter registry to try + to convert the string value into the specified target type. + + + + + + Checks if there is an appropriate type conversion from the source type to the target type. + + The type to convert from. + The type to convert to. + true if there is a conversion from the source type to the target type. + + Checks if there is an appropriate type conversion from the source type to the target type. + + + + + + + Converts an object to the target type. + + The object to convert to the target type. + The type to convert to. + The converted object. + + + Converts an object to the target type. + + + + + + Instantiates an object given a class name. + + The fully qualified class name of the object to instantiate. + The class to which the new object should belong. + The object to return in case of non-fulfillment. + + An instance of the or + if the object could not be instantiated. + + + + Checks that the is a subclass of + . If that test fails or the object could + not be instantiated, then is returned. + + + + + + Performs variable substitution in string from the + values of keys found in . + + The string on which variable substitution is performed. + The dictionary to use to lookup variables. + The result of the substitutions. + + + The variable substitution delimiters are ${ and }. + + + For example, if props contains key=value, then the call + + + + string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); + + + + will set the variable s to "Value of key is value.". + + + If no value could be found for the specified key, then substitution + defaults to an empty string. + + + For example, if system properties contains no value for the key + "nonExistentKey", then the call + + + + string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); + + + + will set s to "Value of nonExistentKey is []". + + + An Exception is thrown if contains a start + delimiter "${" which is not balanced by a stop delimiter "}". + + + + + + Converts the string representation of the name or numeric value of one or + more enumerated constants to an equivalent enumerated object. + + The type to convert to. + The enum string value. + If true, ignore case; otherwise, regard case. + An object of type whose value is represented by . + + + + Most of the work of the class + is delegated to the PatternParser class. + + + + The PatternParser processes a pattern string and + returns a chain of objects. + + + Nicko Cadell + Gert Driesen + + + + Constructor + + The pattern to parse. + + + Initializes a new instance of the class + with the specified pattern string. + + + + + + Parses the pattern into a chain of pattern converters. + + The head of a chain of pattern converters. + + + Parses the pattern into a chain of pattern converters. + + + + + + Build the unified cache of converters from the static and instance maps + + the list of all the converter names + + + Build the unified cache of converters from the static and instance maps + + + + + + Internal method to parse the specified pattern to find specified matches + + the pattern to parse + the converter names to match in the pattern + + + The matches param must be sorted such that longer strings come before shorter ones. + + + + + + Process a parsed literal + + the literal text + + + + Process a parsed converter pattern + + the name of the converter + the optional option for the converter + the formatting info for the converter + + + + Resets the internal state of the parser and adds the specified pattern converter + to the chain. + + The pattern converter to add. + + + + The first pattern converter in the chain + + + + + the last pattern converter in the chain + + + + + The pattern + + + + + Internal map of converter identifiers to converter types + + + + This map overrides the static s_globalRulesRegistry map. + + + + + + Get the converter registry used by this parser + + + The converter registry used by this parser + + + + Get the converter registry used by this parser + + + + + + Sort strings by length + + + + that orders strings by string length. + The longest strings are placed first + + + + + + This class implements a patterned string. + + + + This string has embedded patterns that are resolved and expanded + when the string is formatted. + + + This class functions similarly to the + in that it accepts a pattern and renders it to a string. Unlike the + however the PatternString + does not render the properties of a specific but + of the process in general. + + + The recognized conversion pattern names are: + + + + Conversion Pattern Name + Effect + + + appdomain + + + Used to output the friendly name of the current AppDomain. + + + + + date + + + Used to output the date of the logging event in the local time zone. + To output the date in universal time use the %utcdate pattern. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %date{HH:mm:ss,fff} or + %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %date{ISO8601} or %date{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + env + + + Used to output the a specific environment variable. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %env{COMPUTERNAME} would include the value + of the COMPUTERNAME environment variable. + + + The env pattern is not supported on the .NET Compact Framework. + + + + + identity + + + Used to output the user name for the currently active user + (Principal.Identity.Name). + + + + + newline + + + Outputs the platform dependent line separator character or + characters. + + + This conversion pattern name offers the same performance as using + non-portable line separator strings such as "\n", or "\r\n". + Thus, it is the preferred way of specifying a line separator. + + + + + processid + + + Used to output the system process ID for the current process. + + + + + property + + + Used to output a specific context property. The key to + lookup must be specified within braces and directly following the + pattern specifier, e.g. %property{user} would include the value + from the property that is keyed by the string 'user'. Each property value + that is to be included in the log must be specified separately. + Properties are stored in logging contexts. By default + the log4net:HostName property is set to the name of machine on + which the event was originally logged. + + + If no key is specified, e.g. %property then all the keys and their + values are printed in a comma separated list. + + + The properties of an event are combined from a number of different + contexts. These are listed below in the order in which they are searched. + + + + the thread properties + + The that are set on the current + thread. These properties are shared by all events logged on this thread. + + + + the global properties + + The that are set globally. These + properties are shared by all the threads in the AppDomain. + + + + + + + random + + + Used to output a random string of characters. The string is made up of + uppercase letters and numbers. By default the string is 4 characters long. + The length of the string can be specified within braces directly following the + pattern specifier, e.g. %random{8} would output an 8 character string. + + + + + username + + + Used to output the WindowsIdentity for the currently + active user. + + + + + utcdate + + + Used to output the date of the logging event in universal time. + The date conversion + specifier may be followed by a date format specifier enclosed + between braces. For example, %utcdate{HH:mm:ss,fff} or + %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is + given then ISO8601 format is + assumed (). + + + The date format specifier admits the same syntax as the + time pattern string of the . + + + For better results it is recommended to use the log4net date + formatters. These can be specified using one of the strings + "ABSOLUTE", "DATE" and "ISO8601" for specifying + , + and respectively + . For example, + %utcdate{ISO8601} or %utcdate{ABSOLUTE}. + + + These dedicated date formatters perform significantly + better than . + + + + + % + + + The sequence %% outputs a single percent sign. + + + + + + Additional pattern converters may be registered with a specific + instance using or + . + + + See the for details on the + format modifiers supported by the patterns. + + + Nicko Cadell + + + + Internal map of converter identifiers to converter types. + + + + + the pattern + + + + + the head of the pattern converter chain + + + + + patterns defined on this PatternString only + + + + + Initialize the global registry + + + + + Default constructor + + + + Initialize a new instance of + + + + + + Constructs a PatternString + + The pattern to use with this PatternString + + + Initialize a new instance of with the pattern specified. + + + + + + Initialize object options + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + + + + Create the used to parse the pattern + + the pattern to parse + The + + + Returns PatternParser used to parse the conversion string. Subclasses + may override this to return a subclass of PatternParser which recognize + custom conversion pattern name. + + + + + + Produces a formatted string as specified by the conversion pattern. + + The TextWriter to write the formatted event to + + + Format the pattern to the . + + + + + + Format the pattern as a string + + the pattern formatted as a string + + + Format the pattern to a string. + + + + + + Add a converter to this PatternString + + the converter info + + + This version of the method is used by the configurator. + Programmatic users should use the alternative method. + + + + + + Add a converter to this PatternString + + the name of the conversion pattern for this converter + the type of the converter + + + Add a converter to this PatternString + + + + + + Gets or sets the pattern formatting string + + + The pattern formatting string + + + + The ConversionPattern option. This is the string which + controls formatting and consists of a mix of literal content and + conversion specifiers. + + + + + + Wrapper class used to map converter names to converter types + + + + Wrapper class used to map converter names to converter types + + + + + + default constructor + + + + + Gets or sets the name of the conversion pattern + + + The name of the conversion pattern + + + + Gets or sets the name of the conversion pattern + + + + + + Gets or sets the type of the converter + + + The type of the converter + + + + Gets or sets the type of the converter + + + + + + String keyed object map. + + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + String keyed object map that is read only. + + + + This collection is readonly and cannot be modified. + + + While this collection is serializable only member + objects that are serializable will + be serialized along with this collection. + + + Nicko Cadell + Gert Driesen + + + + The Hashtable used to store the properties data + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Copy Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Deserialization constructor + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Initializes a new instance of the class + with serialized data. + + + + + + Gets the key names. + + An array of all the keys. + + + Gets the key names. + + + + + + Test if the dictionary contains a specified key + + the key to look for + true if the dictionary contains the specified key + + + Test if the dictionary contains a specified key + + + + + + Serializes this object into the provided. + + The to populate with data. + The destination for this serialization. + + + Serializes this object into the provided. + + + + + + See + + + + + See + + + + + + See + + + + + + + Remove all properties from the properties collection + + + + + See + + + + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + The hashtable used to store the properties + + + The internal collection used to store the properties + + + + The hashtable used to store the properties + + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + The number of properties in this collection + + + + + See + + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Constructor + + properties to copy + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + with serialized data. + + The that holds the serialized object data. + The that contains contextual information about the source or destination. + + + Because this class is sealed the serialization constructor is private. + + + + + + Remove the entry with the specified key from this dictionary + + the key for the entry to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + an enumerator + + + Returns a over the contest of this collection. + + + + + + See + + the key to remove + + + Remove the entry with the specified key from this dictionary + + + + + + See + + the key to lookup in the collection + true if the collection contains the specified key + + + Test if this collection contains a specified key. + + + + + + Remove all properties from the properties collection + + + + Remove all properties from the properties collection + + + + + + See + + the key + the value to store for the key + + + Store a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + + + See + + + + + Gets or sets the value of the property with the specified key. + + + The value of the property with the specified key. + + The key of the property to get or set. + + + The property value will only be serialized if it is serializable. + If it cannot be serialized it will be silently ignored if + a serialization operation is performed. + + + + + + See + + + false + + + + This collection is modifiable. This property always + returns false. + + + + + + See + + + The value for the key specified. + + + + Get or set a value for the specified . + + + Thrown if the is not a string + + + + See + + + + + See + + + + + See + + + + + See + + + + + See + + + + + A that ignores the message + + + + This writer is used in special cases where it is necessary + to protect a writer from being closed by a client. + + + Nicko Cadell + + + + Constructor + + the writer to actually write to + + + Create a new ProtectCloseTextWriter using a writer + + + + + + Attach this instance to a different underlying + + the writer to attach to + + + Attach this instance to a different underlying + + + + + + Does not close the underlying output writer. + + + + Does not close the underlying output writer. + This method does nothing. + + + + + + Defines a lock that supports single writers and multiple readers + + + + ReaderWriterLock is used to synchronize access to a resource. + At any given time, it allows either concurrent read access for + multiple threads, or write access for a single thread. In a + situation where a resource is changed infrequently, a + ReaderWriterLock provides better throughput than a simple + one-at-a-time lock, such as . + + + If a platform does not support a System.Threading.ReaderWriterLock + implementation then all readers and writers are serialized. Therefore + the caller must not rely on multiple simultaneous readers. + + + Nicko Cadell + + + + Constructor + + + + Initializes a new instance of the class. + + + + + + Acquires a reader lock + + + + blocks if a different thread has the writer + lock, or if at least one thread is waiting for the writer lock. + + + + + + Decrements the lock count + + + + decrements the lock count. When the count + reaches zero, the lock is released. + + + + + + Acquires the writer lock + + + + This method blocks if another thread has a reader lock or writer lock. + + + + + + Decrements the lock count on the writer lock + + + + ReleaseWriterLock decrements the writer lock count. + When the count reaches zero, the writer lock is released. + + + + + + A that can be and reused + + + + A that can be and reused. + This uses a single buffer for string operations. + + + Nicko Cadell + + + + Create an instance of + + the format provider to use + + + Create an instance of + + + + + + Override Dispose to prevent closing of writer + + flag + + + Override Dispose to prevent closing of writer + + + + + + Reset this string writer so that it can be reused. + + the maximum buffer capacity before it is trimmed + the default size to make the buffer + + + Reset this string writer so that it can be reused. + The internal buffers are cleared and reset. + + + + + + Utility class for system specific information. + + + + Utility class of static methods for system specific information. + + + Nicko Cadell + Gert Driesen + Alexey Solofnenko + + + + Private constructor to prevent instances. + + + + Only static methods are exposed from this type. + + + + + + Initialize default values for private static fields. + + + + Only static methods are exposed from this type. + + + + + + Gets the assembly location path for the specified assembly. + + The assembly to get the location for. + The location of the assembly. + + + This method does not guarantee to return the correct path + to the assembly. If only tries to give an indication as to + where the assembly was loaded from. + + + + + + Gets the fully qualified name of the , including + the name of the assembly from which the was + loaded. + + The to get the fully qualified name for. + The fully qualified name for the . + + + This is equivalent to the Type.AssemblyQualifiedName property, + but this method works on the .NET Compact Framework 1.0 as well as + the full .NET runtime. + + + + + + Gets the short name of the . + + The to get the name for. + The short name of the . + + + The short name of the assembly is the + without the version, culture, or public key. i.e. it is just the + assembly's file name without the extension. + + + Use this rather than Assembly.GetName().Name because that + is not available on the Compact Framework. + + + Because of a FileIOPermission security demand we cannot do + the obvious Assembly.GetName().Name. We are allowed to get + the of the assembly so we + start from there and strip out just the assembly name. + + + + + + Gets the file name portion of the , including the extension. + + The to get the file name for. + The file name of the assembly. + + + Gets the file name portion of the , including the extension. + + + + + + Loads the type specified in the type string. + + A sibling type to use to load the type. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified, it will be loaded from the assembly + containing the specified relative type. If the type is not found in the assembly + then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the + assembly that is directly calling this method. If the type is not found + in the assembly then all the loaded assemblies will be searched for the type. + + + + + + Loads the type specified in the type string. + + An assembly to load the type from. + The name of the type to load. + Flag set to true to throw an exception if the type cannot be loaded. + true to ignore the case of the type name; otherwise, false + The type loaded or null if it could not be loaded. + + + If the type name is fully qualified, i.e. if contains an assembly name in + the type name, the type will be loaded from the system using + . + + + If the type name is not fully qualified it will be loaded from the specified + assembly. If the type is not found in the assembly then all the loaded assemblies + will be searched for the type. + + + + + + Generate a new guid + + A new Guid + + + Generate a new guid + + + + + + Create an + + The name of the parameter that caused the exception + The value of the argument that causes this exception + The message that describes the error + the ArgumentOutOfRangeException object + + + Create a new instance of the class + with a specified error message, the parameter name, and the value + of the argument. + + + The Compact Framework does not support the 3 parameter constructor for the + type. This method provides an + implementation that works for all platforms. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Parse a string into an value + + the string to parse + out param where the parsed value is placed + true if the string was able to be parsed into an integer + + + Attempts to parse the string into an integer. If the string cannot + be parsed then this method returns false. The method does not throw an exception. + + + + + + Lookup an application setting + + the application settings key to lookup + the value for the key, or null + + + Configuration APIs are not supported under the Compact Framework + + + + + + Convert a path into a fully qualified local file path. + + The path to convert. + The fully qualified path. + + + Converts the path specified to a fully + qualified path. If the path is relative it is + taken as relative from the application base + directory. + + + The path specified must be a local file path, a URI is not supported. + + + + + + Creates a new case-insensitive instance of the class with the default initial capacity. + + A new case-insensitive instance of the class with the default initial capacity + + + The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. + + + + + + Gets an empty array of types. + + + + The Type.EmptyTypes field is not available on + the .NET Compact Framework 1.0. + + + + + + Cache the host name for the current machine + + + + + Cache the application friendly name + + + + + Text to output when a null is encountered. + + + + + Text to output when an unsupported feature is requested. + + + + + Start time for the current process. + + + + + Gets the system dependent line terminator. + + + The system dependent line terminator. + + + + Gets the system dependent line terminator. + + + + + + Gets the base directory for this . + + The base directory path for the current . + + + Gets the base directory for this . + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the configuration file for the current . + + The path to the configuration file for the current . + + + The .NET Compact Framework 1.0 does not have a concept of a configuration + file. For this runtime, we use the entry assembly location as the root for + the configuration file name. + + + The value returned may be either a local file path or a URI. + + + + + + Gets the path to the file that first executed in the current . + + The path to the entry assembly. + + + Gets the path to the file that first executed in the current . + + + + + + Gets the ID of the current thread. + + The ID of the current thread. + + + On the .NET framework, the AppDomain.GetCurrentThreadId method + is used to obtain the thread ID for the current thread. This is the + operating system ID for the thread. + + + On the .NET Compact Framework 1.0 it is not possible to get the + operating system thread ID for the current thread. The native method + GetCurrentThreadId is implemented inline in a header file + and cannot be called. + + + On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this + gives a stable id unrelated to the operating system thread ID which may + change if the runtime is using fibers. + + + + + + Get the host name or machine name for the current machine + + + The hostname or machine name + + + + Get the host name or machine name for the current machine + + + The host name () or + the machine name (Environment.MachineName) for + the current machine, or if neither of these are available + then NOT AVAILABLE is returned. + + + + + + Get this application's friendly name + + + The friendly name of this application as a string + + + + If available the name of the application is retrieved from + the AppDomain using AppDomain.CurrentDomain.FriendlyName. + + + Otherwise the file name of the entry assembly is used. + + + + + + Get the start time for the current process. + + + + This is the time at which the log4net library was loaded into the + AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime + this is not the start time for the current process. + + + The log4net library should be loaded by an application early during its + startup, therefore this start time should be a good approximation for + the actual start time. + + + Note that AppDomains may be loaded and unloaded within the + same process without the process terminating, however this start time + will be set per AppDomain. + + + + + + Text to output when a null is encountered. + + + + Use this value to indicate a null has been encountered while + outputting a string representation of an item. + + + The default value is (null). This value can be overridden by specifying + a value for the log4net.NullText appSetting in the application's + .config file. + + + + + + Text to output when an unsupported feature is requested. + + + + Use this value when an unsupported feature is requested. + + + The default value is NOT AVAILABLE. This value can be overridden by specifying + a value for the log4net.NotAvailableText appSetting in the application's + .config file. + + + + + + Utility class that represents a format string. + + + + Utility class that represents a format string. + + + Nicko Cadell + + + + Initialise the + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + + + Format the string and arguments + + the formatted string + + + + Replaces the format item in a specified with the text equivalent + of the value of a corresponding instance in a specified array. + A specified parameter supplies culture-specific formatting information. + + An that supplies culture-specific formatting information. + A containing zero or more format items. + An array containing zero or more objects to format. + + A copy of format in which the format items have been replaced by the + equivalent of the corresponding instances of in args. + + + + This method does not throw exceptions. If an exception thrown while formatting the result the + exception and arguments are returned in the result string. + + + + + + Process an error during StringFormat + + + + + Dump the contents of an array into a string builder + + + + + Dump an object to a string + + + + + Implementation of Properties collection for the + + + + Class implements a collection of properties that is specific to each thread. + The class is not synchronized as each thread has its own . + + + Nicko Cadell + + + + The thread local data slot to use to store a PropertiesDictionary. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Remove a property + + the key for the entry to remove + + + Remove a property + + + + + + Clear all properties + + + + Clear all properties + + + + + + Get the PropertiesDictionary for this thread. + + create the dictionary if it does not exist, otherwise return null if is does not exist + the properties for this thread + + + The collection returned is only to be used on the calling thread. If the + caller needs to share the collection between different threads then the + caller must clone the collection before doing so. + + + + + + Gets or sets the value of a property + + + The value for the property with the specified key + + + + Gets or sets the value of a property + + + + + + Implementation of Stack for the + + + + Implementation of Stack for the + + + Nicko Cadell + + + + The stack store. + + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Clears all the contextual information held in this stack. + + + + Clears all the contextual information held in this stack. + Only call this if you think that this tread is being reused after + a previous call execution which may not have completed correctly. + You do not need to use this method if you always guarantee to call + the method of the + returned from even in exceptional circumstances, + for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + syntax. + + + + + + Removes the top context from this stack. + + The message in the context that was removed from the top of this stack. + + + Remove the top context from this stack, and return + it to the caller. If this stack is empty then an + empty string (not ) is returned. + + + + + + Pushes a new context message into this stack. + + The new context message. + + An that can be used to clean up the context stack. + + + + Pushes a new context onto this stack. An + is returned that can be used to clean up this stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) + { + log.Warn("This should have an ThreadContext Stack message"); + } + + + + + + Gets the current context information for this stack. + + The current context information. + + + + Gets the current context information for this stack. + + Gets the current context information + + + Gets the current context information for this stack. + + + + + + Get a portable version of this object + + the portable instance of this object + + + Get a cross thread portable version of this object + + + + + + The number of messages in the stack + + + The current number of messages in the stack + + + + The current number of messages in the stack. That is + the number of times has been called + minus the number of times has been called. + + + + + + Gets and sets the internal stack used by this + + The internal storage stack + + + This property is provided only to support backward compatability + of the . Tytpically the internal stack should not + be modified. + + + + + + Inner class used to represent a single context frame in the stack. + + + + Inner class used to represent a single context frame in the stack. + + + + + + Constructor + + The message for this context. + The parent context in the chain. + + + Initializes a new instance of the class + with the specified message and parent context. + + + + + + Get the message. + + The message. + + + Get the message. + + + + + + Gets the full text of the context down to the root level. + + + The full text of the context down to the root level. + + + + Gets the full text of the context down to the root level. + + + + + + Struct returned from the method. + + + + This struct implements the and is designed to be used + with the pattern to remove the stack frame at the end of the scope. + + + + + + The ThreadContextStack internal stack + + + + + The depth to trim the stack to when this instance is disposed + + + + + Constructor + + The internal stack used by the ThreadContextStack. + The depth to return the stack to when this object is disposed. + + + Initializes a new instance of the class with + the specified stack and return depth. + + + + + + Returns the stack to the correct depth. + + + + Returns the stack to the correct depth. + + + + + + Implementation of Stacks collection for the + + + + Implementation of Stacks collection for the + + + Nicko Cadell + + + + Internal constructor + + + + Initializes a new instance of the class. + + + + + + Gets the named thread context stack + + + The named stack + + + + Gets the named thread context stack + + + + + + Utility class for transforming strings. + + + + Utility class for transforming strings. + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + Write a string to an + + the writer to write to + the string to write + The string to replace non XML compliant chars with + + + The test is escaped either using XML escape entities + or using CDATA sections. + + + + + + Replace invalid XML characters in text string + + the XML text input string + the string to use in place of invalid characters + A string that does not contain invalid XML characters. + + + Certain Unicode code points are not allowed in the XML InfoSet, for + details see: http://www.w3.org/TR/REC-xml/#charsets. + + + This method replaces any illegal characters in the input string + with the mask string specified. + + + + + + Count the number of times that the substring occurs in the text + + the text to search + the substring to find + the number of times the substring occurs in the text + + + The substring is assumed to be non repeating within itself. + + + + + + Impersonate a Windows Account + + + + This impersonates a Windows account. + + + How the impersonation is done depends on the value of . + This allows the context to either impersonate a set of user credentials specified + using username, domain name and password or to revert to the process credentials. + + + + + + Default constructor + + + + Default constructor + + + + + + Initialize the SecurityContext based on the options set. + + + + This is part of the delayed object + activation scheme. The method must + be called on this object after the configuration properties have + been set. Until is called this + object is in an undefined state and must not be used. + + + If any of the configuration properties are modified then + must be called again. + + + The security context will try to Logon the specified user account and + capture a primary token for impersonation. + + + The required , + or properties were not specified. + + + + Impersonate the Windows account specified by the and properties. + + caller provided state + + An instance that will revoke the impersonation of this SecurityContext + + + + Depending on the property either + impersonate a user using credentials supplied or revert + to the process credentials. + + + + + + Create a given the userName, domainName and password. + + the user name + the domain name + the password + the for the account specified + + + Uses the Windows API call LogonUser to get a principal token for the account. This + token is used to initialize the WindowsIdentity. + + + + + + Gets or sets the impersonation mode for this security context + + + The impersonation mode for this security context + + + + Impersonate either a user with user credentials or + revert this thread to the credentials of the process. + The value is one of the + enum. + + + The default value is + + + When the mode is set to + the user's credentials are established using the + , and + values. + + + When the mode is set to + no other properties need to be set. If the calling thread is + impersonating then it will be reverted back to the process credentials. + + + + + + Gets or sets the Windows username for this security context + + + The Windows username for this security context + + + + This property must be set if + is set to (the default setting). + + + + + + Gets or sets the Windows domain name for this security context + + + The Windows domain name for this security context + + + + The default value for is the local machine name + taken from the property. + + + This property must be set if + is set to (the default setting). + + + + + + Sets the password for the Windows account specified by the and properties. + + + The password for the Windows account specified by the and properties. + + + + This property must be set if + is set to (the default setting). + + + + + + The impersonation modes for the + + + + See the property for + details. + + + + + + Impersonate a user using the credentials supplied + + + + + Revert this the thread to the credentials of the process + + + + + Adds to + + + + Helper class to expose the + through the interface. + + + + + + Constructor + + the impersonation context being wrapped + + + Constructor + + + + + + Revert the impersonation + + + + Revert the impersonation + + + + + + The log4net Global Context. + + + + The GlobalContext provides a location for global debugging + information to be stored. + + + The global context has a properties map and these properties can + be included in the output of log messages. The + supports selecting and outputing these properties. + + + By default the log4net:HostName property is set to the name of + the current machine. + + + + + GlobalContext.Properties["hostname"] = Environment.MachineName; + + + + Nicko Cadell + + + + Private Constructor. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + The global context properties instance + + + + + The global properties map. + + + The global properties map. + + + + The global properties map. + + + + + + The log4net Logical Thread Context. + + + + The LogicalThreadContext provides a location for specific debugging + information to be stored. + The LogicalThreadContext properties override any or + properties with the same name. + + + The Logical Thread Context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Logical Thread Context provides a diagnostic context for the current call context. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Logical Thread Context is managed on a per basis. + + + Example of using the thread context properties to store a username. + + LogicalThreadContext.Properties["user"] = userName; + log.Info("This log message has a LogicalThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) + { + log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The LogicalThreadContext properties override any + or properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The logical thread stacks. + + + + + + This class is used by client applications to request logger instances. + + + + This class has static methods that are used by a client to request + a logger instance. The method is + used to retrieve a logger. + + + See the interface for more details. + + + Simple example of logging messages + + ILog log = LogManager.GetLogger("application-log"); + + log.Info("Application Start"); + log.Debug("This is a debug message"); + + if (log.IsDebugEnabled) + { + log.Debug("This is another debug message"); + } + + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + Returns the named logger if it exists. + + Returns the named logger if it exists. + + + + If the named logger exists (in the default repository) then it + returns a reference to the logger, otherwise it returns null. + + + The fully qualified logger name to look for. + The logger found, or null if no logger could be found. + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the specified repository) then it + returns a reference to the logger, otherwise it returns + null. + + + The repository to lookup in. + The fully qualified logger name to look for. + + The logger found, or null if the logger doesn't exist in the specified + repository. + + + + + Returns the named logger if it exists. + + + + If the named logger exists (in the repository for the specified assembly) then it + returns a reference to the logger, otherwise it returns + null. + + + The assembly to use to lookup the repository. + The fully qualified logger name to look for. + + The logger, or null if the logger doesn't exist in the specified + assembly's repository. + + + + Get the currently defined loggers. + + Returns all the currently defined loggers in the default repository. + + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified repository. + + The repository to lookup in. + + The root logger is not included in the returned array. + + All the defined loggers. + + + + Returns all the currently defined loggers in the specified assembly's repository. + + The assembly to use to lookup the repository. + + The root logger is not included in the returned array. + + All the defined loggers. + + + Get or create a logger. + + Retrieves or creates a named logger. + + + + Retrieves a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The repository to lookup in. + The name of the logger to retrieve. + The logger with the name specified. + + + + Retrieves or creates a named logger. + + + + Retrieve a logger named as the + parameter. If the named logger already exists, then the + existing instance will be returned. Otherwise, a new instance is + created. + + + By default, loggers do not have a set level but inherit + it from the hierarchy. This is one of the central features of + log4net. + + + The assembly to use to lookup the repository. + The name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Get the logger for the fully qualified name of the type specified. + + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The repository to lookup in. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shorthand for . + + + Gets the logger for the fully qualified name of the type specified. + + The assembly to use to lookup the repository. + The full name of will be used as the name of the logger to retrieve. + The logger with the name specified. + + + + Shuts down the log4net system. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in all the + default repositories. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + Shutdown a logger repository. + + Shuts down the default repository. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + default repository. + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + + + + Shuts down the repository for the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The repository to shutdown. + + + + Shuts down the repository specified. + + + + Calling this method will safely close and remove all + appenders in all the loggers including root contained in the + repository. The repository is looked up using + the specified. + + + Some appenders need to be closed before the application exists. + Otherwise, pending logging events might be lost. + + + The shutdown method is careful to close nested + appenders before closing regular appenders. This is allows + configurations where a regular appender is attached to a logger + and again to a nested appender. + + + The assembly to use to lookup the repository. + + + Reset the configuration of a repository + + Resets all values contained in this repository instance to their defaults. + + + + Resets all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The repository to reset. + + + + Resets all values contained in this repository instance to their defaults. + + + + Reset all values contained in the repository instance to their + defaults. This removes all appenders from all loggers, sets + the level of all non-root loggers to null, + sets their additivity flag to true and sets the level + of the root logger to . Moreover, + message disabling is set to its default "off" value. + + + The assembly to use to lookup the repository to reset. + + + Get the logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Get a logger repository. + + Returns the default instance. + + + + Gets the for the repository specified + by the callers assembly (). + + + The instance for the default repository. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The repository to lookup in. + + + + Returns the default instance. + + The default instance. + + + Gets the for the repository specified + by the argument. + + + The assembly to use to lookup the repository. + + + Create a domain + + Creates a repository with the specified repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + Create a logger repository. + + Creates a repository with the specified repository type. + + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + The created will be associated with the repository + specified such that a call to will return + the same repository instance. + + + + + + Creates a repository with the specified name. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name. + + + + Creates the default type of which is a + object. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique amongst repositories. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository with the specified name and repository type. + + + + The name must be unique. Repositories cannot be redefined. + An will be thrown if the repository already exists. + + + The name of the repository, this must be unique to the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + The specified repository already exists. + + + + Creates a repository for the specified assembly and repository type. + + + + CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Creates a repository for the specified assembly and repository type. + + + + The created will be associated with the repository + specified such that a call to with the + same assembly specified will return the same repository instance. + + + The assembly to use to get the name of the repository. + A that implements + and has a no arg constructor. An instance of this type will be created to act + as the for the repository specified. + The created for the repository. + + + + Gets the list of currently defined repositories. + + + + Get an array of all the objects that have been created. + + + An array of all the known objects. + + + + Looks up the wrapper object for the logger specified. + + The logger to get the wrapper for. + The wrapper for the logger specified. + + + + Looks up the wrapper objects for the loggers specified. + + The loggers to get the wrappers for. + The wrapper objects for the loggers specified. + + + + Create the objects used by + this manager. + + The logger to wrap. + The wrapper for the logger specified. + + + + The wrapper map to use to hold the objects. + + + + + Implementation of Mapped Diagnostic Contexts. + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + The MDC class is similar to the class except that it is + based on a map instead of a stack. It provides mapped + diagnostic contexts. A Mapped Diagnostic Context, or + MDC in short, is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The MDC is managed on a per thread basis. + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Gets the context value identified by the parameter. + + The key to lookup in the MDC. + The string value held for the key, or a null reference if no corresponding value is found. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + If the parameter does not look up to a + previously defined context then null will be returned. + + + + + + Add an entry to the MDC + + The key to store the value under. + The value to store. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Puts a context value (the parameter) as identified + with the parameter into the current thread's + context map. + + + If a value is already defined for the + specified then the value will be replaced. If the + is specified as null then the key value mapping will be removed. + + + + + + Removes the key value mapping for the key specified. + + The key to remove. + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove the specified entry from this thread's MDC + + + + + + Clear all entries in the MDC + + + + + The MDC is deprecated and has been replaced by the . + The current MDC implementation forwards to the ThreadContext.Properties. + + + + Remove all the entries from this thread's MDC + + + + + + Implementation of Nested Diagnostic Contexts. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + A Nested Diagnostic Context, or NDC in short, is an instrument + to distinguish interleaved log output from different sources. Log + output is typically interleaved when a server handles multiple + clients near-simultaneously. + + + Interleaved log output can still be meaningful if each log entry + from different contexts had a distinctive stamp. This is where NDCs + come into play. + + + Note that NDCs are managed on a per thread basis. The NDC class + is made up of static methods that operate on the context of the + calling thread. + + + How to push a message into the context + + using(NDC.Push("my context message")) + { + ... all log calls will have 'my context message' included ... + + } // at the end of the using block the message is automatically removed + + + + Nicko Cadell + Gert Driesen + + + + Initializes a new instance of the class. + + + Uses a private access modifier to prevent instantiation of this class. + + + + + Clears all the contextual information held on the current thread. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Clears the stack of NDC data held on the current thread. + + + + + + Creates a clone of the stack of context information. + + A clone of the context info for this thread. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The results of this method can be passed to the + method to allow child threads to inherit the context of their + parent thread. + + + + + + Inherits the contextual information from another thread. + + The context stack to inherit. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This thread will use the context information from the stack + supplied. This can be used to initialize child threads with + the same contextual information as their parent threads. These + contexts will NOT be shared. Any further contexts that + are pushed onto the stack will not be visible to the other. + Call to obtain a stack to pass to + this method. + + + + + + Removes the top context from the stack. + + + The message in the context that was removed from the top + of the stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Remove the top context from the stack, and return + it to the caller. If the stack is empty then an + empty string (not null) is returned. + + + + + + Pushes a new context message. + + The new context message. + + An that can be used to clean up + the context stack. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Pushes a new context onto the context stack. An + is returned that can be used to clean up the context stack. This + can be easily combined with the using keyword to scope the + context. + + + Simple example of using the Push method with the using keyword. + + using(log4net.NDC.Push("NDC_Message")) + { + log.Warn("This should have an NDC message"); + } + + + + + + Removes the context information for this thread. It is + not required to call this method. + + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + This method is not implemented. + + + + + + Forces the stack depth to be at most . + + The maximum depth of the stack + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + Forces the stack depth to be at most . + This may truncate the head of the stack. This only affects the + stack in the current thread. Also it does not prevent it from + growing, it only sets the maximum depth at the time of the + call. This can be used to return to a known context depth. + + + + + + Gets the current context depth. + + The current context depth. + + + + The NDC is deprecated and has been replaced by the . + The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. + + + + The number of context values pushed onto the context stack. + + + Used to record the current depth of the context. This can then + be restored using the method. + + + + + + + The log4net Thread Context. + + + + The ThreadContext provides a location for thread specific debugging + information to be stored. + The ThreadContext properties override any + properties with the same name. + + + The thread context has a properties map and a stack. + The properties and stack can + be included in the output of log messages. The + supports selecting and outputting these properties. + + + The Thread Context provides a diagnostic context for the current thread. + This is an instrument for distinguishing interleaved log + output from different sources. Log output is typically interleaved + when a server handles multiple clients near-simultaneously. + + + The Thread Context is managed on a per thread basis. + + + Example of using the thread context properties to store a username. + + ThreadContext.Properties["user"] = userName; + log.Info("This log message has a ThreadContext Property called 'user'"); + + + Example of how to push a message into the context stack + + using(ThreadContext.Stacks["NDC"].Push("my context message")) + { + log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); + + } // at the end of the using block the message is automatically popped + + + + Nicko Cadell + + + + Private Constructor. + + + + Uses a private access modifier to prevent instantiation of this class. + + + + + + The thread context properties instance + + + + + The thread context stacks instance + + + + + The thread properties map + + + The thread properties map + + + + The ThreadContext properties override any + properties with the same name. + + + + + + The thread stacks + + + stack map + + + + The thread local stacks. + + + + + diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryService.wsdl b/source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryService.wsdl new file mode 100644 index 0000000000..2a7f975102 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryService.wsdl @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryServicePort.wsdl b/source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryServicePort.wsdl new file mode 100644 index 0000000000..4aaafcb02a --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/DiscoveryServicePort.wsdl @@ -0,0 +1,1434 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.cs b/source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.cs new file mode 100644 index 0000000000..733bcce36f --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.cs @@ -0,0 +1,2020 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WcfTestClient.DiscoveryService { + using System.Runtime.Serialization; + using System; + + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="cmisFaultType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.notInFolderExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.operationNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.permissionDeniedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.storageExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.offsetExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.constraintViolationExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.versioningExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.filterNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.typeNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.updateConflictExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.folderNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.objectNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.streamNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.runtimeExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.contentAlreadyExistsExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.DiscoveryService.invalidArgumentExceptionType))] + public partial class cmisFaultType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { + + [System.NonSerializedAttribute()] + private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + + private long errorCodeField; + + private string errorMessageField; + + [global::System.ComponentModel.BrowsableAttribute(false)] + public System.Runtime.Serialization.ExtensionDataObject ExtensionData { + get { + return this.extensionDataField; + } + set { + this.extensionDataField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] + public long errorCode { + get { + return this.errorCodeField; + } + set { + if ((this.errorCodeField.Equals(value) != true)) { + this.errorCodeField = value; + this.RaisePropertyChanged("errorCode"); + } + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)] + public string errorMessage { + get { + return this.errorMessageField; + } + set { + if ((object.ReferenceEquals(this.errorMessageField, value) != true)) { + this.errorMessageField = value; + this.RaisePropertyChanged("errorMessage"); + } + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="notInFolderExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class notInFolderExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="operationNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class operationNotSupportedExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="permissionDeniedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class permissionDeniedExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="storageExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class storageExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="offsetExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class offsetExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="constraintViolationExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class constraintViolationExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="versioningExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class versioningExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="filterNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class filterNotValidExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="typeNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class typeNotFoundExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="updateConflictExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class updateConflictExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="folderNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class folderNotValidExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="objectNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class objectNotFoundExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="streamNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class streamNotSupportedExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="runtimeExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class runtimeExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="contentAlreadyExistsExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class contentAlreadyExistsExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="invalidArgumentExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class invalidArgumentExceptionType : WcfTestClient.DiscoveryService.cmisFaultType { + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cmis.org/2008/05", ConfigurationName="DiscoveryService.DiscoveryServicePort")] + public interface DiscoveryServicePort { + + // CODEGEN: Parameter 'object' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.DiscoveryService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.DiscoveryService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.DiscoveryService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.DiscoveryService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.DiscoveryService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.DiscoveryService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.DiscoveryService.queryResponse query(WcfTestClient.DiscoveryService.query request); + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisObjectType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisPropertiesType propertiesField; + + private cmisAllowableActionsType allowableActionsField; + + private cmisObjectType[] relationshipField; + + private cmisObjectType[] childField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public cmisPropertiesType properties { + get { + return this.propertiesField; + } + set { + this.propertiesField = value; + this.RaisePropertyChanged("properties"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public cmisAllowableActionsType allowableActions { + get { + return this.allowableActionsField; + } + set { + this.allowableActionsField = value; + this.RaisePropertyChanged("allowableActions"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("relationship", IsNullable=true, Order=2)] + public cmisObjectType[] relationship { + get { + return this.relationshipField; + } + set { + this.relationshipField = value; + this.RaisePropertyChanged("relationship"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("child", IsNullable=true, Order=3)] + public cmisObjectType[] child { + get { + return this.childField; + } + set { + this.childField = value; + this.RaisePropertyChanged("child"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=4)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertiesType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisProperty[] itemsField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute("propertyBoolean", typeof(cmisPropertyBoolean), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDateTime", typeof(cmisPropertyDateTime), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDecimal", typeof(cmisPropertyDecimal), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyHtml", typeof(cmisPropertyHtml), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyId", typeof(cmisPropertyId), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyInteger", typeof(cmisPropertyInteger), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyString", typeof(cmisPropertyString), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyUri", typeof(cmisPropertyUri), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyXml", typeof(cmisPropertyXml), IsNullable=true, Order=0)] + public cmisProperty[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=1)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyBoolean : cmisProperty { + + private bool valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumPropertyType { + + /// + boolean, + + /// + id, + + /// + integer, + + /// + datetime, + + /// + @decimal, + + /// + html, + + /// + @string, + + /// + uri, + + /// + xml, + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyBoolean))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyInteger))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyHtml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDateTime))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyString))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyXml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDecimal))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyId))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyUri))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisProperty : object, System.ComponentModel.INotifyPropertyChanged { + + private string nameField; + + private string indexField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public string name { + get { + return this.nameField; + } + set { + this.nameField = value; + this.RaisePropertyChanged("name"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="integer")] + public string index { + get { + return this.indexField; + } + set { + this.indexField = value; + this.RaisePropertyChanged("index"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisAllowableActionsType : object, System.ComponentModel.INotifyPropertyChanged { + + private string parentIdField; + + private string parentUrlField; + + private bool canDeleteField; + + private bool canDeleteFieldSpecified; + + private bool canUpdatePropertiesField; + + private bool canUpdatePropertiesFieldSpecified; + + private bool canGetPropertiesField; + + private bool canGetPropertiesFieldSpecified; + + private bool canGetRelationshipsField; + + private bool canGetRelationshipsFieldSpecified; + + private bool canGetParentsField; + + private bool canGetParentsFieldSpecified; + + private bool canGetFolderParentField; + + private bool canGetFolderParentFieldSpecified; + + private bool canGetDescendantsField; + + private bool canGetDescendantsFieldSpecified; + + private bool canMoveField; + + private bool canMoveFieldSpecified; + + private bool canDeleteVersionField; + + private bool canDeleteVersionFieldSpecified; + + private bool canDeleteContentField; + + private bool canDeleteContentFieldSpecified; + + private bool canCheckoutField; + + private bool canCheckoutFieldSpecified; + + private bool canCancelCheckoutField; + + private bool canCancelCheckoutFieldSpecified; + + private bool canCheckinField; + + private bool canCheckinFieldSpecified; + + private bool canSetContentField; + + private bool canSetContentFieldSpecified; + + private bool canGetAllVersionsField; + + private bool canGetAllVersionsFieldSpecified; + + private bool canAddToFolderField; + + private bool canAddToFolderFieldSpecified; + + private bool canRemoveFromFolderField; + + private bool canRemoveFromFolderFieldSpecified; + + private bool canViewContentField; + + private bool canViewContentFieldSpecified; + + private bool canAddPolicyField; + + private bool canAddPolicyFieldSpecified; + + private bool canGetAppliedPoliciesField; + + private bool canGetAppliedPoliciesFieldSpecified; + + private bool canRemovePolicyField; + + private bool canRemovePolicyFieldSpecified; + + private bool canGetChildrenField; + + private bool canGetChildrenFieldSpecified; + + private bool canCreateDocumentField; + + private bool canCreateDocumentFieldSpecified; + + private bool canCreateFolderField; + + private bool canCreateFolderFieldSpecified; + + private bool canCreateRelationshipField; + + private bool canCreateRelationshipFieldSpecified; + + private bool canCreatePolicyField; + + private bool canCreatePolicyFieldSpecified; + + private bool canDeleteTreeField; + + private bool canDeleteTreeFieldSpecified; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string parentId { + get { + return this.parentIdField; + } + set { + this.parentIdField = value; + this.RaisePropertyChanged("parentId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string parentUrl { + get { + return this.parentUrlField; + } + set { + this.parentUrlField = value; + this.RaisePropertyChanged("parentUrl"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public bool canDelete { + get { + return this.canDeleteField; + } + set { + this.canDeleteField = value; + this.RaisePropertyChanged("canDelete"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteSpecified { + get { + return this.canDeleteFieldSpecified; + } + set { + this.canDeleteFieldSpecified = value; + this.RaisePropertyChanged("canDeleteSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public bool canUpdateProperties { + get { + return this.canUpdatePropertiesField; + } + set { + this.canUpdatePropertiesField = value; + this.RaisePropertyChanged("canUpdateProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canUpdatePropertiesSpecified { + get { + return this.canUpdatePropertiesFieldSpecified; + } + set { + this.canUpdatePropertiesFieldSpecified = value; + this.RaisePropertyChanged("canUpdatePropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public bool canGetProperties { + get { + return this.canGetPropertiesField; + } + set { + this.canGetPropertiesField = value; + this.RaisePropertyChanged("canGetProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetPropertiesSpecified { + get { + return this.canGetPropertiesFieldSpecified; + } + set { + this.canGetPropertiesFieldSpecified = value; + this.RaisePropertyChanged("canGetPropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public bool canGetRelationships { + get { + return this.canGetRelationshipsField; + } + set { + this.canGetRelationshipsField = value; + this.RaisePropertyChanged("canGetRelationships"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetRelationshipsSpecified { + get { + return this.canGetRelationshipsFieldSpecified; + } + set { + this.canGetRelationshipsFieldSpecified = value; + this.RaisePropertyChanged("canGetRelationshipsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public bool canGetParents { + get { + return this.canGetParentsField; + } + set { + this.canGetParentsField = value; + this.RaisePropertyChanged("canGetParents"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetParentsSpecified { + get { + return this.canGetParentsFieldSpecified; + } + set { + this.canGetParentsFieldSpecified = value; + this.RaisePropertyChanged("canGetParentsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public bool canGetFolderParent { + get { + return this.canGetFolderParentField; + } + set { + this.canGetFolderParentField = value; + this.RaisePropertyChanged("canGetFolderParent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetFolderParentSpecified { + get { + return this.canGetFolderParentFieldSpecified; + } + set { + this.canGetFolderParentFieldSpecified = value; + this.RaisePropertyChanged("canGetFolderParentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public bool canGetDescendants { + get { + return this.canGetDescendantsField; + } + set { + this.canGetDescendantsField = value; + this.RaisePropertyChanged("canGetDescendants"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetDescendantsSpecified { + get { + return this.canGetDescendantsFieldSpecified; + } + set { + this.canGetDescendantsFieldSpecified = value; + this.RaisePropertyChanged("canGetDescendantsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public bool canMove { + get { + return this.canMoveField; + } + set { + this.canMoveField = value; + this.RaisePropertyChanged("canMove"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canMoveSpecified { + get { + return this.canMoveFieldSpecified; + } + set { + this.canMoveFieldSpecified = value; + this.RaisePropertyChanged("canMoveSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public bool canDeleteVersion { + get { + return this.canDeleteVersionField; + } + set { + this.canDeleteVersionField = value; + this.RaisePropertyChanged("canDeleteVersion"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteVersionSpecified { + get { + return this.canDeleteVersionFieldSpecified; + } + set { + this.canDeleteVersionFieldSpecified = value; + this.RaisePropertyChanged("canDeleteVersionSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=11)] + public bool canDeleteContent { + get { + return this.canDeleteContentField; + } + set { + this.canDeleteContentField = value; + this.RaisePropertyChanged("canDeleteContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteContentSpecified { + get { + return this.canDeleteContentFieldSpecified; + } + set { + this.canDeleteContentFieldSpecified = value; + this.RaisePropertyChanged("canDeleteContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=12)] + public bool canCheckout { + get { + return this.canCheckoutField; + } + set { + this.canCheckoutField = value; + this.RaisePropertyChanged("canCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckoutSpecified { + get { + return this.canCheckoutFieldSpecified; + } + set { + this.canCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=13)] + public bool canCancelCheckout { + get { + return this.canCancelCheckoutField; + } + set { + this.canCancelCheckoutField = value; + this.RaisePropertyChanged("canCancelCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCancelCheckoutSpecified { + get { + return this.canCancelCheckoutFieldSpecified; + } + set { + this.canCancelCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCancelCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=14)] + public bool canCheckin { + get { + return this.canCheckinField; + } + set { + this.canCheckinField = value; + this.RaisePropertyChanged("canCheckin"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckinSpecified { + get { + return this.canCheckinFieldSpecified; + } + set { + this.canCheckinFieldSpecified = value; + this.RaisePropertyChanged("canCheckinSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=15)] + public bool canSetContent { + get { + return this.canSetContentField; + } + set { + this.canSetContentField = value; + this.RaisePropertyChanged("canSetContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canSetContentSpecified { + get { + return this.canSetContentFieldSpecified; + } + set { + this.canSetContentFieldSpecified = value; + this.RaisePropertyChanged("canSetContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=16)] + public bool canGetAllVersions { + get { + return this.canGetAllVersionsField; + } + set { + this.canGetAllVersionsField = value; + this.RaisePropertyChanged("canGetAllVersions"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAllVersionsSpecified { + get { + return this.canGetAllVersionsFieldSpecified; + } + set { + this.canGetAllVersionsFieldSpecified = value; + this.RaisePropertyChanged("canGetAllVersionsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=17)] + public bool canAddToFolder { + get { + return this.canAddToFolderField; + } + set { + this.canAddToFolderField = value; + this.RaisePropertyChanged("canAddToFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddToFolderSpecified { + get { + return this.canAddToFolderFieldSpecified; + } + set { + this.canAddToFolderFieldSpecified = value; + this.RaisePropertyChanged("canAddToFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=18)] + public bool canRemoveFromFolder { + get { + return this.canRemoveFromFolderField; + } + set { + this.canRemoveFromFolderField = value; + this.RaisePropertyChanged("canRemoveFromFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemoveFromFolderSpecified { + get { + return this.canRemoveFromFolderFieldSpecified; + } + set { + this.canRemoveFromFolderFieldSpecified = value; + this.RaisePropertyChanged("canRemoveFromFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=19)] + public bool canViewContent { + get { + return this.canViewContentField; + } + set { + this.canViewContentField = value; + this.RaisePropertyChanged("canViewContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canViewContentSpecified { + get { + return this.canViewContentFieldSpecified; + } + set { + this.canViewContentFieldSpecified = value; + this.RaisePropertyChanged("canViewContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=20)] + public bool canAddPolicy { + get { + return this.canAddPolicyField; + } + set { + this.canAddPolicyField = value; + this.RaisePropertyChanged("canAddPolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddPolicySpecified { + get { + return this.canAddPolicyFieldSpecified; + } + set { + this.canAddPolicyFieldSpecified = value; + this.RaisePropertyChanged("canAddPolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=21)] + public bool canGetAppliedPolicies { + get { + return this.canGetAppliedPoliciesField; + } + set { + this.canGetAppliedPoliciesField = value; + this.RaisePropertyChanged("canGetAppliedPolicies"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAppliedPoliciesSpecified { + get { + return this.canGetAppliedPoliciesFieldSpecified; + } + set { + this.canGetAppliedPoliciesFieldSpecified = value; + this.RaisePropertyChanged("canGetAppliedPoliciesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=22)] + public bool canRemovePolicy { + get { + return this.canRemovePolicyField; + } + set { + this.canRemovePolicyField = value; + this.RaisePropertyChanged("canRemovePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemovePolicySpecified { + get { + return this.canRemovePolicyFieldSpecified; + } + set { + this.canRemovePolicyFieldSpecified = value; + this.RaisePropertyChanged("canRemovePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=23)] + public bool canGetChildren { + get { + return this.canGetChildrenField; + } + set { + this.canGetChildrenField = value; + this.RaisePropertyChanged("canGetChildren"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetChildrenSpecified { + get { + return this.canGetChildrenFieldSpecified; + } + set { + this.canGetChildrenFieldSpecified = value; + this.RaisePropertyChanged("canGetChildrenSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=24)] + public bool canCreateDocument { + get { + return this.canCreateDocumentField; + } + set { + this.canCreateDocumentField = value; + this.RaisePropertyChanged("canCreateDocument"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateDocumentSpecified { + get { + return this.canCreateDocumentFieldSpecified; + } + set { + this.canCreateDocumentFieldSpecified = value; + this.RaisePropertyChanged("canCreateDocumentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=25)] + public bool canCreateFolder { + get { + return this.canCreateFolderField; + } + set { + this.canCreateFolderField = value; + this.RaisePropertyChanged("canCreateFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateFolderSpecified { + get { + return this.canCreateFolderFieldSpecified; + } + set { + this.canCreateFolderFieldSpecified = value; + this.RaisePropertyChanged("canCreateFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=26)] + public bool canCreateRelationship { + get { + return this.canCreateRelationshipField; + } + set { + this.canCreateRelationshipField = value; + this.RaisePropertyChanged("canCreateRelationship"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateRelationshipSpecified { + get { + return this.canCreateRelationshipFieldSpecified; + } + set { + this.canCreateRelationshipFieldSpecified = value; + this.RaisePropertyChanged("canCreateRelationshipSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=27)] + public bool canCreatePolicy { + get { + return this.canCreatePolicyField; + } + set { + this.canCreatePolicyField = value; + this.RaisePropertyChanged("canCreatePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreatePolicySpecified { + get { + return this.canCreatePolicyFieldSpecified; + } + set { + this.canCreatePolicyFieldSpecified = value; + this.RaisePropertyChanged("canCreatePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=28)] + public bool canDeleteTree { + get { + return this.canDeleteTreeField; + } + set { + this.canDeleteTreeField = value; + this.RaisePropertyChanged("canDeleteTree"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteTreeSpecified { + get { + return this.canDeleteTreeFieldSpecified; + } + set { + this.canDeleteTreeFieldSpecified = value; + this.RaisePropertyChanged("canDeleteTreeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=29)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyInteger : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyHtml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDateTime : cmisProperty { + + private System.DateTime valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public System.DateTime value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyString : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyXml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDecimal : cmisProperty { + + private decimal valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public decimal value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyId : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private string hrefField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="anyURI")] + public string href { + get { + return this.hrefField; + } + set { + this.hrefField = value; + this.RaisePropertyChanged("href"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyUri : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="query", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class query { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string statement; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public bool searchAllVersions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string pageSize; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string skipCount; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public bool returnAllowableActions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=5)] + [System.Xml.Serialization.XmlAnyElementAttribute()] + public System.Xml.XmlElement[] Any; + + public query() { + } + + public query(string statement, bool searchAllVersions, string pageSize, string skipCount, bool returnAllowableActions, System.Xml.XmlElement[] Any) { + this.statement = statement; + this.searchAllVersions = searchAllVersions; + this.pageSize = pageSize; + this.skipCount = skipCount; + this.returnAllowableActions = returnAllowableActions; + this.Any = Any; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="queryResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class queryResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("object", IsNullable=true)] + public cmisObjectType[] @object; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public bool hasMoreItems; + + public queryResponse() { + } + + public queryResponse(cmisObjectType[] @object, bool hasMoreItems) { + this.@object = @object; + this.hasMoreItems = hasMoreItems; + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public interface DiscoveryServicePortChannel : WcfTestClient.DiscoveryService.DiscoveryServicePort, System.ServiceModel.IClientChannel { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public partial class DiscoveryServicePortClient : System.ServiceModel.ClientBase, WcfTestClient.DiscoveryService.DiscoveryServicePort { + + public DiscoveryServicePortClient() { + } + + public DiscoveryServicePortClient(string endpointConfigurationName) : + base(endpointConfigurationName) { + } + + public DiscoveryServicePortClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public DiscoveryServicePortClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public DiscoveryServicePortClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.DiscoveryService.queryResponse WcfTestClient.DiscoveryService.DiscoveryServicePort.query(WcfTestClient.DiscoveryService.query request) { + return base.Channel.query(request); + } + + public cmisObjectType[] query(string statement, bool searchAllVersions, string pageSize, string skipCount, bool returnAllowableActions, System.Xml.XmlElement[] Any, out bool hasMoreItems) { + WcfTestClient.DiscoveryService.query inValue = new WcfTestClient.DiscoveryService.query(); + inValue.statement = statement; + inValue.searchAllVersions = searchAllVersions; + inValue.pageSize = pageSize; + inValue.skipCount = skipCount; + inValue.returnAllowableActions = returnAllowableActions; + inValue.Any = Any; + WcfTestClient.DiscoveryService.queryResponse retVal = ((WcfTestClient.DiscoveryService.DiscoveryServicePort)(this)).query(inValue); + hasMoreItems = retVal.hasMoreItems; + return retVal.@object; + } + + public cmisObjectType[] queryWrapper(WcfTestClient.DiscoveryService.query query, out bool hasMoreItems) { + WcfTestClient.DiscoveryService.queryResponse retVal = ((WcfTestClient.DiscoveryService.DiscoveryServicePort)(this)).query(query); + hasMoreItems = retVal.hasMoreItems; + return retVal.@object; + } + } +} diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.svcmap b/source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.svcmap new file mode 100644 index 0000000000..e28c698644 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/Reference.svcmap @@ -0,0 +1,30 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfCmisWSTests.DiscoveryService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfCmisWSTests.DiscoveryService.cmisObjectType.datasource new file mode 100644 index 0000000000..3bf7c46ed8 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfCmisWSTests.DiscoveryService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.DiscoveryService.cmisObjectType, Service References.DiscoveryService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfTestClient.DiscoveryService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfTestClient.DiscoveryService.cmisObjectType.datasource new file mode 100644 index 0000000000..0a091bf921 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/WcfTestClient.DiscoveryService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.DiscoveryService.cmisObjectType, Service References.DiscoveryService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration.svcinfo b/source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration.svcinfo new file mode 100644 index 0000000000..35ef224dc1 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration.svcinfo @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration91.svcinfo b/source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration91.svcinfo new file mode 100644 index 0000000000..03356f83ff --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/DiscoveryService/configuration91.svcinfo @@ -0,0 +1,280 @@ + + + + + + + DiscoveryServiceSoapBinding + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + Transport + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + DiscoveryServiceSoapBinding1 + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + + + https://localhost:8443/alfresco/cmis/DiscoveryService + + + + + + basicHttpBinding + + + DiscoveryServiceSoapBinding + + + DiscoveryService.DiscoveryServicePort + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + DiscoveryServicePort + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingService.wsdl b/source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingService.wsdl new file mode 100644 index 0000000000..8c5354eb57 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingService.wsdl @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingServicePort.wsdl b/source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingServicePort.wsdl new file mode 100644 index 0000000000..269b45dcb4 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/MultiFilingService/MultiFilingServicePort.wsdl @@ -0,0 +1,1464 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.cs b/source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.cs new file mode 100644 index 0000000000..cb0ae549c7 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.cs @@ -0,0 +1,418 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WcfTestClient.MultiFilingService { + using System.Runtime.Serialization; + using System; + + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="cmisFaultType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.notInFolderExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.operationNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.permissionDeniedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.storageExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.offsetExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.constraintViolationExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.versioningExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.filterNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.typeNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.updateConflictExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.folderNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.objectNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.streamNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.runtimeExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.contentAlreadyExistsExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.MultiFilingService.invalidArgumentExceptionType))] + public partial class cmisFaultType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { + + [System.NonSerializedAttribute()] + private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + + private long errorCodeField; + + private string errorMessageField; + + [global::System.ComponentModel.BrowsableAttribute(false)] + public System.Runtime.Serialization.ExtensionDataObject ExtensionData { + get { + return this.extensionDataField; + } + set { + this.extensionDataField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] + public long errorCode { + get { + return this.errorCodeField; + } + set { + if ((this.errorCodeField.Equals(value) != true)) { + this.errorCodeField = value; + this.RaisePropertyChanged("errorCode"); + } + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)] + public string errorMessage { + get { + return this.errorMessageField; + } + set { + if ((object.ReferenceEquals(this.errorMessageField, value) != true)) { + this.errorMessageField = value; + this.RaisePropertyChanged("errorMessage"); + } + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="notInFolderExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class notInFolderExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="operationNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class operationNotSupportedExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="permissionDeniedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class permissionDeniedExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="storageExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class storageExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="offsetExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class offsetExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="constraintViolationExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class constraintViolationExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="versioningExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class versioningExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="filterNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class filterNotValidExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="typeNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class typeNotFoundExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="updateConflictExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class updateConflictExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="folderNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class folderNotValidExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="objectNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class objectNotFoundExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="streamNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class streamNotSupportedExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="runtimeExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class runtimeExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="contentAlreadyExistsExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class contentAlreadyExistsExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="invalidArgumentExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class invalidArgumentExceptionType : WcfTestClient.MultiFilingService.cmisFaultType { + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cmis.org/2008/05", ConfigurationName="MultiFilingService.MultiFilingServicePort")] + public interface MultiFilingServicePort { + + // CODEGEN: Generating message contract since element name repositoryId from namespace http://www.cmis.org/2008/05 is not marked nillable + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.notInFolderExceptionType), Action="", Name="notInFolderException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + WcfTestClient.MultiFilingService.removeObjectFromFolderResponse removeObjectFromFolder(WcfTestClient.MultiFilingService.removeObjectFromFolder request); + + // CODEGEN: Generating message contract since element name repositoryId from namespace http://www.cmis.org/2008/05 is not marked nillable + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.MultiFilingService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + WcfTestClient.MultiFilingService.addObjectToFolderResponse addObjectToFolder(WcfTestClient.MultiFilingService.addObjectToFolder request); + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] + public partial class removeObjectFromFolder { + + [System.ServiceModel.MessageBodyMemberAttribute(Name="removeObjectFromFolder", Namespace="http://www.cmis.org/2008/05", Order=0)] + public WcfTestClient.MultiFilingService.removeObjectFromFolderBody Body; + + public removeObjectFromFolder() { + } + + public removeObjectFromFolder(WcfTestClient.MultiFilingService.removeObjectFromFolderBody Body) { + this.Body = Body; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class removeObjectFromFolderBody { + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=0)] + public string repositoryId; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=1)] + public string objectId; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)] + public string folderId; + + public removeObjectFromFolderBody() { + } + + public removeObjectFromFolderBody(string repositoryId, string objectId, string folderId) { + this.repositoryId = repositoryId; + this.objectId = objectId; + this.folderId = folderId; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] + public partial class removeObjectFromFolderResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Name="removeObjectFromFolderResponse", Namespace="http://www.cmis.org/2008/05", Order=0)] + public WcfTestClient.MultiFilingService.removeObjectFromFolderResponseBody Body; + + public removeObjectFromFolderResponse() { + } + + public removeObjectFromFolderResponse(WcfTestClient.MultiFilingService.removeObjectFromFolderResponseBody Body) { + this.Body = Body; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute()] + public partial class removeObjectFromFolderResponseBody { + + public removeObjectFromFolderResponseBody() { + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] + public partial class addObjectToFolder { + + [System.ServiceModel.MessageBodyMemberAttribute(Name="addObjectToFolder", Namespace="http://www.cmis.org/2008/05", Order=0)] + public WcfTestClient.MultiFilingService.addObjectToFolderBody Body; + + public addObjectToFolder() { + } + + public addObjectToFolder(WcfTestClient.MultiFilingService.addObjectToFolderBody Body) { + this.Body = Body; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class addObjectToFolderBody { + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=0)] + public string repositoryId; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=1)] + public string objectId; + + [System.Runtime.Serialization.DataMemberAttribute(EmitDefaultValue=false, Order=2)] + public string folderId; + + public addObjectToFolderBody() { + } + + public addObjectToFolderBody(string repositoryId, string objectId, string folderId) { + this.repositoryId = repositoryId; + this.objectId = objectId; + this.folderId = folderId; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(IsWrapped=false)] + public partial class addObjectToFolderResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Name="addObjectToFolderResponse", Namespace="http://www.cmis.org/2008/05", Order=0)] + public WcfTestClient.MultiFilingService.addObjectToFolderResponseBody Body; + + public addObjectToFolderResponse() { + } + + public addObjectToFolderResponse(WcfTestClient.MultiFilingService.addObjectToFolderResponseBody Body) { + this.Body = Body; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute()] + public partial class addObjectToFolderResponseBody { + + public addObjectToFolderResponseBody() { + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public interface MultiFilingServicePortChannel : WcfTestClient.MultiFilingService.MultiFilingServicePort, System.ServiceModel.IClientChannel { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public partial class MultiFilingServicePortClient : System.ServiceModel.ClientBase, WcfTestClient.MultiFilingService.MultiFilingServicePort { + + public MultiFilingServicePortClient() { + } + + public MultiFilingServicePortClient(string endpointConfigurationName) : + base(endpointConfigurationName) { + } + + public MultiFilingServicePortClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public MultiFilingServicePortClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public MultiFilingServicePortClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.MultiFilingService.removeObjectFromFolderResponse WcfTestClient.MultiFilingService.MultiFilingServicePort.removeObjectFromFolder(WcfTestClient.MultiFilingService.removeObjectFromFolder request) { + return base.Channel.removeObjectFromFolder(request); + } + + public void removeObjectFromFolder(string repositoryId, string objectId, string folderId) { + WcfTestClient.MultiFilingService.removeObjectFromFolder inValue = new WcfTestClient.MultiFilingService.removeObjectFromFolder(); + inValue.Body = new WcfTestClient.MultiFilingService.removeObjectFromFolderBody(); + inValue.Body.repositoryId = repositoryId; + inValue.Body.objectId = objectId; + inValue.Body.folderId = folderId; + WcfTestClient.MultiFilingService.removeObjectFromFolderResponse retVal = ((WcfTestClient.MultiFilingService.MultiFilingServicePort)(this)).removeObjectFromFolder(inValue); + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.MultiFilingService.addObjectToFolderResponse WcfTestClient.MultiFilingService.MultiFilingServicePort.addObjectToFolder(WcfTestClient.MultiFilingService.addObjectToFolder request) { + return base.Channel.addObjectToFolder(request); + } + + public void addObjectToFolder(string repositoryId, string objectId, string folderId) { + WcfTestClient.MultiFilingService.addObjectToFolder inValue = new WcfTestClient.MultiFilingService.addObjectToFolder(); + inValue.Body = new WcfTestClient.MultiFilingService.addObjectToFolderBody(); + inValue.Body.repositoryId = repositoryId; + inValue.Body.objectId = objectId; + inValue.Body.folderId = folderId; + WcfTestClient.MultiFilingService.addObjectToFolderResponse retVal = ((WcfTestClient.MultiFilingService.MultiFilingServicePort)(this)).addObjectToFolder(inValue); + } + } +} diff --git a/source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.svcmap b/source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.svcmap new file mode 100644 index 0000000000..a8b691386c --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/MultiFilingService/Reference.svcmap @@ -0,0 +1,30 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration.svcinfo b/source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration.svcinfo new file mode 100644 index 0000000000..8385096042 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration.svcinfo @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration91.svcinfo b/source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration91.svcinfo new file mode 100644 index 0000000000..1bae7885bf --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/MultiFilingService/configuration91.svcinfo @@ -0,0 +1,280 @@ + + + + + + + MultiFilingServiceSoapBinding + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + Transport + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + MultiFilingServiceSoapBinding1 + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + + + https://localhost:8443/alfresco/cmis/MultiFilingService + + + + + + basicHttpBinding + + + MultiFilingServiceSoapBinding + + + MultiFilingService.MultiFilingServicePort + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + MultiFilingServicePort + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/NavigationService.wsdl b/source/test/dotnet/CmisWS/Service References/NavigationService/NavigationService.wsdl new file mode 100644 index 0000000000..c05292729b --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/NavigationService.wsdl @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/NavigationServicePort.wsdl b/source/test/dotnet/CmisWS/Service References/NavigationService/NavigationServicePort.wsdl new file mode 100644 index 0000000000..a50192a320 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/NavigationServicePort.wsdl @@ -0,0 +1,1522 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/Reference.cs b/source/test/dotnet/CmisWS/Service References/NavigationService/Reference.cs new file mode 100644 index 0000000000..e692ed2114 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/Reference.cs @@ -0,0 +1,2402 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WcfTestClient.NavigationService { + using System.Runtime.Serialization; + using System; + + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="cmisFaultType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.notInFolderExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.operationNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.permissionDeniedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.storageExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.offsetExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.constraintViolationExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.versioningExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.filterNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.typeNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.updateConflictExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.folderNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.objectNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.streamNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.runtimeExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.contentAlreadyExistsExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.NavigationService.invalidArgumentExceptionType))] + public partial class cmisFaultType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { + + [System.NonSerializedAttribute()] + private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + + private long errorCodeField; + + private string errorMessageField; + + [global::System.ComponentModel.BrowsableAttribute(false)] + public System.Runtime.Serialization.ExtensionDataObject ExtensionData { + get { + return this.extensionDataField; + } + set { + this.extensionDataField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] + public long errorCode { + get { + return this.errorCodeField; + } + set { + if ((this.errorCodeField.Equals(value) != true)) { + this.errorCodeField = value; + this.RaisePropertyChanged("errorCode"); + } + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)] + public string errorMessage { + get { + return this.errorMessageField; + } + set { + if ((object.ReferenceEquals(this.errorMessageField, value) != true)) { + this.errorMessageField = value; + this.RaisePropertyChanged("errorMessage"); + } + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="notInFolderExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class notInFolderExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="operationNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class operationNotSupportedExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="permissionDeniedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class permissionDeniedExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="storageExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class storageExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="offsetExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class offsetExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="constraintViolationExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class constraintViolationExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="versioningExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class versioningExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="filterNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class filterNotValidExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="typeNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class typeNotFoundExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="updateConflictExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class updateConflictExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="folderNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class folderNotValidExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="objectNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class objectNotFoundExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="streamNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class streamNotSupportedExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="runtimeExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class runtimeExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="contentAlreadyExistsExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class contentAlreadyExistsExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="invalidArgumentExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class invalidArgumentExceptionType : WcfTestClient.NavigationService.cmisFaultType { + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cmis.org/2008/05", ConfigurationName="NavigationService.NavigationServicePort")] + public interface NavigationServicePort { + + // CODEGEN: Parameter 'object' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.NavigationService.getCheckedoutDocsResponse getCheckedoutDocs(WcfTestClient.NavigationService.getCheckedoutDocs request); + + // CODEGEN: Parameter 'object' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.NavigationService.getChildrenResponse getChildren(WcfTestClient.NavigationService.getChildren request); + + // CODEGEN: Parameter 'object' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.NavigationService.getObjectParentsResponse getObjectParents(WcfTestClient.NavigationService.getObjectParents request); + + // CODEGEN: Parameter 'object' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.NavigationService.getFolderParentResponse getFolderParent(WcfTestClient.NavigationService.getFolderParent request); + + // CODEGEN: Parameter 'object' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.NavigationService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.NavigationService.getDescendantsResponse getDescendants(WcfTestClient.NavigationService.getDescendants request); + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisObjectType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisPropertiesType propertiesField; + + private cmisAllowableActionsType allowableActionsField; + + private cmisObjectType[] relationshipField; + + private cmisObjectType[] childField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public cmisPropertiesType properties { + get { + return this.propertiesField; + } + set { + this.propertiesField = value; + this.RaisePropertyChanged("properties"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public cmisAllowableActionsType allowableActions { + get { + return this.allowableActionsField; + } + set { + this.allowableActionsField = value; + this.RaisePropertyChanged("allowableActions"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("relationship", IsNullable=true, Order=2)] + public cmisObjectType[] relationship { + get { + return this.relationshipField; + } + set { + this.relationshipField = value; + this.RaisePropertyChanged("relationship"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("child", IsNullable=true, Order=3)] + public cmisObjectType[] child { + get { + return this.childField; + } + set { + this.childField = value; + this.RaisePropertyChanged("child"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=4)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertiesType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisProperty[] itemsField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute("propertyBoolean", typeof(cmisPropertyBoolean), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDateTime", typeof(cmisPropertyDateTime), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDecimal", typeof(cmisPropertyDecimal), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyHtml", typeof(cmisPropertyHtml), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyId", typeof(cmisPropertyId), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyInteger", typeof(cmisPropertyInteger), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyString", typeof(cmisPropertyString), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyUri", typeof(cmisPropertyUri), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyXml", typeof(cmisPropertyXml), IsNullable=true, Order=0)] + public cmisProperty[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=1)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyBoolean : cmisProperty { + + private bool valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumPropertyType { + + /// + boolean, + + /// + id, + + /// + integer, + + /// + datetime, + + /// + @decimal, + + /// + html, + + /// + @string, + + /// + uri, + + /// + xml, + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyBoolean))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyInteger))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyHtml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDateTime))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyString))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyXml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDecimal))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyId))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyUri))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisProperty : object, System.ComponentModel.INotifyPropertyChanged { + + private string nameField; + + private string indexField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public string name { + get { + return this.nameField; + } + set { + this.nameField = value; + this.RaisePropertyChanged("name"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="integer")] + public string index { + get { + return this.indexField; + } + set { + this.indexField = value; + this.RaisePropertyChanged("index"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisAllowableActionsType : object, System.ComponentModel.INotifyPropertyChanged { + + private string parentIdField; + + private string parentUrlField; + + private bool canDeleteField; + + private bool canDeleteFieldSpecified; + + private bool canUpdatePropertiesField; + + private bool canUpdatePropertiesFieldSpecified; + + private bool canGetPropertiesField; + + private bool canGetPropertiesFieldSpecified; + + private bool canGetRelationshipsField; + + private bool canGetRelationshipsFieldSpecified; + + private bool canGetParentsField; + + private bool canGetParentsFieldSpecified; + + private bool canGetFolderParentField; + + private bool canGetFolderParentFieldSpecified; + + private bool canGetDescendantsField; + + private bool canGetDescendantsFieldSpecified; + + private bool canMoveField; + + private bool canMoveFieldSpecified; + + private bool canDeleteVersionField; + + private bool canDeleteVersionFieldSpecified; + + private bool canDeleteContentField; + + private bool canDeleteContentFieldSpecified; + + private bool canCheckoutField; + + private bool canCheckoutFieldSpecified; + + private bool canCancelCheckoutField; + + private bool canCancelCheckoutFieldSpecified; + + private bool canCheckinField; + + private bool canCheckinFieldSpecified; + + private bool canSetContentField; + + private bool canSetContentFieldSpecified; + + private bool canGetAllVersionsField; + + private bool canGetAllVersionsFieldSpecified; + + private bool canAddToFolderField; + + private bool canAddToFolderFieldSpecified; + + private bool canRemoveFromFolderField; + + private bool canRemoveFromFolderFieldSpecified; + + private bool canViewContentField; + + private bool canViewContentFieldSpecified; + + private bool canAddPolicyField; + + private bool canAddPolicyFieldSpecified; + + private bool canGetAppliedPoliciesField; + + private bool canGetAppliedPoliciesFieldSpecified; + + private bool canRemovePolicyField; + + private bool canRemovePolicyFieldSpecified; + + private bool canGetChildrenField; + + private bool canGetChildrenFieldSpecified; + + private bool canCreateDocumentField; + + private bool canCreateDocumentFieldSpecified; + + private bool canCreateFolderField; + + private bool canCreateFolderFieldSpecified; + + private bool canCreateRelationshipField; + + private bool canCreateRelationshipFieldSpecified; + + private bool canCreatePolicyField; + + private bool canCreatePolicyFieldSpecified; + + private bool canDeleteTreeField; + + private bool canDeleteTreeFieldSpecified; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string parentId { + get { + return this.parentIdField; + } + set { + this.parentIdField = value; + this.RaisePropertyChanged("parentId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string parentUrl { + get { + return this.parentUrlField; + } + set { + this.parentUrlField = value; + this.RaisePropertyChanged("parentUrl"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public bool canDelete { + get { + return this.canDeleteField; + } + set { + this.canDeleteField = value; + this.RaisePropertyChanged("canDelete"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteSpecified { + get { + return this.canDeleteFieldSpecified; + } + set { + this.canDeleteFieldSpecified = value; + this.RaisePropertyChanged("canDeleteSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public bool canUpdateProperties { + get { + return this.canUpdatePropertiesField; + } + set { + this.canUpdatePropertiesField = value; + this.RaisePropertyChanged("canUpdateProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canUpdatePropertiesSpecified { + get { + return this.canUpdatePropertiesFieldSpecified; + } + set { + this.canUpdatePropertiesFieldSpecified = value; + this.RaisePropertyChanged("canUpdatePropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public bool canGetProperties { + get { + return this.canGetPropertiesField; + } + set { + this.canGetPropertiesField = value; + this.RaisePropertyChanged("canGetProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetPropertiesSpecified { + get { + return this.canGetPropertiesFieldSpecified; + } + set { + this.canGetPropertiesFieldSpecified = value; + this.RaisePropertyChanged("canGetPropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public bool canGetRelationships { + get { + return this.canGetRelationshipsField; + } + set { + this.canGetRelationshipsField = value; + this.RaisePropertyChanged("canGetRelationships"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetRelationshipsSpecified { + get { + return this.canGetRelationshipsFieldSpecified; + } + set { + this.canGetRelationshipsFieldSpecified = value; + this.RaisePropertyChanged("canGetRelationshipsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public bool canGetParents { + get { + return this.canGetParentsField; + } + set { + this.canGetParentsField = value; + this.RaisePropertyChanged("canGetParents"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetParentsSpecified { + get { + return this.canGetParentsFieldSpecified; + } + set { + this.canGetParentsFieldSpecified = value; + this.RaisePropertyChanged("canGetParentsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public bool canGetFolderParent { + get { + return this.canGetFolderParentField; + } + set { + this.canGetFolderParentField = value; + this.RaisePropertyChanged("canGetFolderParent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetFolderParentSpecified { + get { + return this.canGetFolderParentFieldSpecified; + } + set { + this.canGetFolderParentFieldSpecified = value; + this.RaisePropertyChanged("canGetFolderParentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public bool canGetDescendants { + get { + return this.canGetDescendantsField; + } + set { + this.canGetDescendantsField = value; + this.RaisePropertyChanged("canGetDescendants"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetDescendantsSpecified { + get { + return this.canGetDescendantsFieldSpecified; + } + set { + this.canGetDescendantsFieldSpecified = value; + this.RaisePropertyChanged("canGetDescendantsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public bool canMove { + get { + return this.canMoveField; + } + set { + this.canMoveField = value; + this.RaisePropertyChanged("canMove"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canMoveSpecified { + get { + return this.canMoveFieldSpecified; + } + set { + this.canMoveFieldSpecified = value; + this.RaisePropertyChanged("canMoveSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public bool canDeleteVersion { + get { + return this.canDeleteVersionField; + } + set { + this.canDeleteVersionField = value; + this.RaisePropertyChanged("canDeleteVersion"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteVersionSpecified { + get { + return this.canDeleteVersionFieldSpecified; + } + set { + this.canDeleteVersionFieldSpecified = value; + this.RaisePropertyChanged("canDeleteVersionSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=11)] + public bool canDeleteContent { + get { + return this.canDeleteContentField; + } + set { + this.canDeleteContentField = value; + this.RaisePropertyChanged("canDeleteContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteContentSpecified { + get { + return this.canDeleteContentFieldSpecified; + } + set { + this.canDeleteContentFieldSpecified = value; + this.RaisePropertyChanged("canDeleteContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=12)] + public bool canCheckout { + get { + return this.canCheckoutField; + } + set { + this.canCheckoutField = value; + this.RaisePropertyChanged("canCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckoutSpecified { + get { + return this.canCheckoutFieldSpecified; + } + set { + this.canCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=13)] + public bool canCancelCheckout { + get { + return this.canCancelCheckoutField; + } + set { + this.canCancelCheckoutField = value; + this.RaisePropertyChanged("canCancelCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCancelCheckoutSpecified { + get { + return this.canCancelCheckoutFieldSpecified; + } + set { + this.canCancelCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCancelCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=14)] + public bool canCheckin { + get { + return this.canCheckinField; + } + set { + this.canCheckinField = value; + this.RaisePropertyChanged("canCheckin"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckinSpecified { + get { + return this.canCheckinFieldSpecified; + } + set { + this.canCheckinFieldSpecified = value; + this.RaisePropertyChanged("canCheckinSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=15)] + public bool canSetContent { + get { + return this.canSetContentField; + } + set { + this.canSetContentField = value; + this.RaisePropertyChanged("canSetContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canSetContentSpecified { + get { + return this.canSetContentFieldSpecified; + } + set { + this.canSetContentFieldSpecified = value; + this.RaisePropertyChanged("canSetContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=16)] + public bool canGetAllVersions { + get { + return this.canGetAllVersionsField; + } + set { + this.canGetAllVersionsField = value; + this.RaisePropertyChanged("canGetAllVersions"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAllVersionsSpecified { + get { + return this.canGetAllVersionsFieldSpecified; + } + set { + this.canGetAllVersionsFieldSpecified = value; + this.RaisePropertyChanged("canGetAllVersionsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=17)] + public bool canAddToFolder { + get { + return this.canAddToFolderField; + } + set { + this.canAddToFolderField = value; + this.RaisePropertyChanged("canAddToFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddToFolderSpecified { + get { + return this.canAddToFolderFieldSpecified; + } + set { + this.canAddToFolderFieldSpecified = value; + this.RaisePropertyChanged("canAddToFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=18)] + public bool canRemoveFromFolder { + get { + return this.canRemoveFromFolderField; + } + set { + this.canRemoveFromFolderField = value; + this.RaisePropertyChanged("canRemoveFromFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemoveFromFolderSpecified { + get { + return this.canRemoveFromFolderFieldSpecified; + } + set { + this.canRemoveFromFolderFieldSpecified = value; + this.RaisePropertyChanged("canRemoveFromFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=19)] + public bool canViewContent { + get { + return this.canViewContentField; + } + set { + this.canViewContentField = value; + this.RaisePropertyChanged("canViewContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canViewContentSpecified { + get { + return this.canViewContentFieldSpecified; + } + set { + this.canViewContentFieldSpecified = value; + this.RaisePropertyChanged("canViewContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=20)] + public bool canAddPolicy { + get { + return this.canAddPolicyField; + } + set { + this.canAddPolicyField = value; + this.RaisePropertyChanged("canAddPolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddPolicySpecified { + get { + return this.canAddPolicyFieldSpecified; + } + set { + this.canAddPolicyFieldSpecified = value; + this.RaisePropertyChanged("canAddPolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=21)] + public bool canGetAppliedPolicies { + get { + return this.canGetAppliedPoliciesField; + } + set { + this.canGetAppliedPoliciesField = value; + this.RaisePropertyChanged("canGetAppliedPolicies"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAppliedPoliciesSpecified { + get { + return this.canGetAppliedPoliciesFieldSpecified; + } + set { + this.canGetAppliedPoliciesFieldSpecified = value; + this.RaisePropertyChanged("canGetAppliedPoliciesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=22)] + public bool canRemovePolicy { + get { + return this.canRemovePolicyField; + } + set { + this.canRemovePolicyField = value; + this.RaisePropertyChanged("canRemovePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemovePolicySpecified { + get { + return this.canRemovePolicyFieldSpecified; + } + set { + this.canRemovePolicyFieldSpecified = value; + this.RaisePropertyChanged("canRemovePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=23)] + public bool canGetChildren { + get { + return this.canGetChildrenField; + } + set { + this.canGetChildrenField = value; + this.RaisePropertyChanged("canGetChildren"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetChildrenSpecified { + get { + return this.canGetChildrenFieldSpecified; + } + set { + this.canGetChildrenFieldSpecified = value; + this.RaisePropertyChanged("canGetChildrenSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=24)] + public bool canCreateDocument { + get { + return this.canCreateDocumentField; + } + set { + this.canCreateDocumentField = value; + this.RaisePropertyChanged("canCreateDocument"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateDocumentSpecified { + get { + return this.canCreateDocumentFieldSpecified; + } + set { + this.canCreateDocumentFieldSpecified = value; + this.RaisePropertyChanged("canCreateDocumentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=25)] + public bool canCreateFolder { + get { + return this.canCreateFolderField; + } + set { + this.canCreateFolderField = value; + this.RaisePropertyChanged("canCreateFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateFolderSpecified { + get { + return this.canCreateFolderFieldSpecified; + } + set { + this.canCreateFolderFieldSpecified = value; + this.RaisePropertyChanged("canCreateFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=26)] + public bool canCreateRelationship { + get { + return this.canCreateRelationshipField; + } + set { + this.canCreateRelationshipField = value; + this.RaisePropertyChanged("canCreateRelationship"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateRelationshipSpecified { + get { + return this.canCreateRelationshipFieldSpecified; + } + set { + this.canCreateRelationshipFieldSpecified = value; + this.RaisePropertyChanged("canCreateRelationshipSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=27)] + public bool canCreatePolicy { + get { + return this.canCreatePolicyField; + } + set { + this.canCreatePolicyField = value; + this.RaisePropertyChanged("canCreatePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreatePolicySpecified { + get { + return this.canCreatePolicyFieldSpecified; + } + set { + this.canCreatePolicyFieldSpecified = value; + this.RaisePropertyChanged("canCreatePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=28)] + public bool canDeleteTree { + get { + return this.canDeleteTreeField; + } + set { + this.canDeleteTreeField = value; + this.RaisePropertyChanged("canDeleteTree"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteTreeSpecified { + get { + return this.canDeleteTreeFieldSpecified; + } + set { + this.canDeleteTreeFieldSpecified = value; + this.RaisePropertyChanged("canDeleteTreeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=29)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyInteger : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyHtml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDateTime : cmisProperty { + + private System.DateTime valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public System.DateTime value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyString : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyXml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDecimal : cmisProperty { + + private decimal valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public decimal value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyId : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private string hrefField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="anyURI")] + public string href { + get { + return this.hrefField; + } + set { + this.hrefField = value; + this.RaisePropertyChanged("href"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyUri : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getCheckedoutDocs", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getCheckedoutDocs { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string folderID; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public string filter; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + public bool includeAllowableActions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public bool includeRelationships; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=5)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string maxItems; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=6)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string skipCount; + + public getCheckedoutDocs() { + } + + public getCheckedoutDocs(string repositoryId, string folderID, string filter, bool includeAllowableActions, bool includeRelationships, string maxItems, string skipCount) { + this.repositoryId = repositoryId; + this.folderID = folderID; + this.filter = filter; + this.includeAllowableActions = includeAllowableActions; + this.includeRelationships = includeRelationships; + this.maxItems = maxItems; + this.skipCount = skipCount; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getCheckedoutDocsResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getCheckedoutDocsResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("object", IsNullable=true)] + public cmisObjectType[] @object; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public bool hasMoreItems; + + public getCheckedoutDocsResponse() { + } + + public getCheckedoutDocsResponse(cmisObjectType[] @object, bool hasMoreItems) { + this.@object = @object; + this.hasMoreItems = hasMoreItems; + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumTypesOfFileableObjects { + + /// + documents, + + /// + folders, + + /// + policies, + + /// + any, + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getChildren", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getChildren { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string folderId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public WcfTestClient.NavigationService.enumTypesOfFileableObjects type; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + public string filter; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public bool includeAllowableActions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=5)] + public bool includeRelationships; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=6)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string maxItems; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=7)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string skipCount; + + public getChildren() { + } + + public getChildren(string repositoryId, string folderId, WcfTestClient.NavigationService.enumTypesOfFileableObjects type, string filter, bool includeAllowableActions, bool includeRelationships, string maxItems, string skipCount) { + this.repositoryId = repositoryId; + this.folderId = folderId; + this.type = type; + this.filter = filter; + this.includeAllowableActions = includeAllowableActions; + this.includeRelationships = includeRelationships; + this.maxItems = maxItems; + this.skipCount = skipCount; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getChildrenResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getChildrenResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("object", IsNullable=true)] + public cmisObjectType[] @object; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public bool hasMoreItems; + + public getChildrenResponse() { + } + + public getChildrenResponse(cmisObjectType[] @object, bool hasMoreItems) { + this.@object = @object; + this.hasMoreItems = hasMoreItems; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getObjectParents", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getObjectParents { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string objectId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public string filter; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + public bool includeAllowableActions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public bool includeRelationships; + + public getObjectParents() { + } + + public getObjectParents(string repositoryId, string objectId, string filter, bool includeAllowableActions, bool includeRelationships) { + this.repositoryId = repositoryId; + this.objectId = objectId; + this.filter = filter; + this.includeAllowableActions = includeAllowableActions; + this.includeRelationships = includeRelationships; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getObjectParentsResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getObjectParentsResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("object", IsNullable=true)] + public cmisObjectType[] @object; + + public getObjectParentsResponse() { + } + + public getObjectParentsResponse(cmisObjectType[] @object) { + this.@object = @object; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getFolderParent", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getFolderParent { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string folderId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public string filter; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + public bool includeAllowableActions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public bool includeRelationships; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=5)] + public bool returnToRoot; + + public getFolderParent() { + } + + public getFolderParent(string repositoryId, string folderId, string filter, bool includeAllowableActions, bool includeRelationships, bool returnToRoot) { + this.repositoryId = repositoryId; + this.folderId = folderId; + this.filter = filter; + this.includeAllowableActions = includeAllowableActions; + this.includeRelationships = includeRelationships; + this.returnToRoot = returnToRoot; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getFolderParentResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getFolderParentResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("object", IsNullable=true)] + public cmisObjectType[] @object; + + public getFolderParentResponse() { + } + + public getFolderParentResponse(cmisObjectType[] @object) { + this.@object = @object; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getDescendants", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getDescendants { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string folderId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public WcfTestClient.NavigationService.enumTypesOfFileableObjects type; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string depth; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public string filter; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=5)] + public bool includeAllowableActions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=6)] + public bool includeRelationships; + + public getDescendants() { + } + + public getDescendants(string repositoryId, string folderId, WcfTestClient.NavigationService.enumTypesOfFileableObjects type, string depth, string filter, bool includeAllowableActions, bool includeRelationships) { + this.repositoryId = repositoryId; + this.folderId = folderId; + this.type = type; + this.depth = depth; + this.filter = filter; + this.includeAllowableActions = includeAllowableActions; + this.includeRelationships = includeRelationships; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getDescendantsResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getDescendantsResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("object", IsNullable=true)] + public cmisObjectType[] @object; + + public getDescendantsResponse() { + } + + public getDescendantsResponse(cmisObjectType[] @object) { + this.@object = @object; + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public interface NavigationServicePortChannel : WcfTestClient.NavigationService.NavigationServicePort, System.ServiceModel.IClientChannel { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public partial class NavigationServicePortClient : System.ServiceModel.ClientBase, WcfTestClient.NavigationService.NavigationServicePort { + + public NavigationServicePortClient() { + } + + public NavigationServicePortClient(string endpointConfigurationName) : + base(endpointConfigurationName) { + } + + public NavigationServicePortClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public NavigationServicePortClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public NavigationServicePortClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.NavigationService.getCheckedoutDocsResponse WcfTestClient.NavigationService.NavigationServicePort.getCheckedoutDocs(WcfTestClient.NavigationService.getCheckedoutDocs request) { + return base.Channel.getCheckedoutDocs(request); + } + + public cmisObjectType[] getCheckedoutDocs(string repositoryId, string folderID, string filter, bool includeAllowableActions, bool includeRelationships, string maxItems, string skipCount, out bool hasMoreItems) { + WcfTestClient.NavigationService.getCheckedoutDocs inValue = new WcfTestClient.NavigationService.getCheckedoutDocs(); + inValue.repositoryId = repositoryId; + inValue.folderID = folderID; + inValue.filter = filter; + inValue.includeAllowableActions = includeAllowableActions; + inValue.includeRelationships = includeRelationships; + inValue.maxItems = maxItems; + inValue.skipCount = skipCount; + WcfTestClient.NavigationService.getCheckedoutDocsResponse retVal = ((WcfTestClient.NavigationService.NavigationServicePort)(this)).getCheckedoutDocs(inValue); + hasMoreItems = retVal.hasMoreItems; + return retVal.@object; + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.NavigationService.getChildrenResponse WcfTestClient.NavigationService.NavigationServicePort.getChildren(WcfTestClient.NavigationService.getChildren request) { + return base.Channel.getChildren(request); + } + + public cmisObjectType[] getChildren(string repositoryId, string folderId, WcfTestClient.NavigationService.enumTypesOfFileableObjects type, string filter, bool includeAllowableActions, bool includeRelationships, string maxItems, string skipCount, out bool hasMoreItems) { + WcfTestClient.NavigationService.getChildren inValue = new WcfTestClient.NavigationService.getChildren(); + inValue.repositoryId = repositoryId; + inValue.folderId = folderId; + inValue.type = type; + inValue.filter = filter; + inValue.includeAllowableActions = includeAllowableActions; + inValue.includeRelationships = includeRelationships; + inValue.maxItems = maxItems; + inValue.skipCount = skipCount; + WcfTestClient.NavigationService.getChildrenResponse retVal = ((WcfTestClient.NavigationService.NavigationServicePort)(this)).getChildren(inValue); + hasMoreItems = retVal.hasMoreItems; + return retVal.@object; + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.NavigationService.getObjectParentsResponse WcfTestClient.NavigationService.NavigationServicePort.getObjectParents(WcfTestClient.NavigationService.getObjectParents request) { + return base.Channel.getObjectParents(request); + } + + public cmisObjectType[] getObjectParents(string repositoryId, string objectId, string filter, bool includeAllowableActions, bool includeRelationships) { + WcfTestClient.NavigationService.getObjectParents inValue = new WcfTestClient.NavigationService.getObjectParents(); + inValue.repositoryId = repositoryId; + inValue.objectId = objectId; + inValue.filter = filter; + inValue.includeAllowableActions = includeAllowableActions; + inValue.includeRelationships = includeRelationships; + WcfTestClient.NavigationService.getObjectParentsResponse retVal = ((WcfTestClient.NavigationService.NavigationServicePort)(this)).getObjectParents(inValue); + return retVal.@object; + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.NavigationService.getFolderParentResponse WcfTestClient.NavigationService.NavigationServicePort.getFolderParent(WcfTestClient.NavigationService.getFolderParent request) { + return base.Channel.getFolderParent(request); + } + + public cmisObjectType[] getFolderParent(string repositoryId, string folderId, string filter, bool includeAllowableActions, bool includeRelationships, bool returnToRoot) { + WcfTestClient.NavigationService.getFolderParent inValue = new WcfTestClient.NavigationService.getFolderParent(); + inValue.repositoryId = repositoryId; + inValue.folderId = folderId; + inValue.filter = filter; + inValue.includeAllowableActions = includeAllowableActions; + inValue.includeRelationships = includeRelationships; + inValue.returnToRoot = returnToRoot; + WcfTestClient.NavigationService.getFolderParentResponse retVal = ((WcfTestClient.NavigationService.NavigationServicePort)(this)).getFolderParent(inValue); + return retVal.@object; + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.NavigationService.getDescendantsResponse WcfTestClient.NavigationService.NavigationServicePort.getDescendants(WcfTestClient.NavigationService.getDescendants request) { + return base.Channel.getDescendants(request); + } + + public cmisObjectType[] getDescendants(string repositoryId, string folderId, WcfTestClient.NavigationService.enumTypesOfFileableObjects type, string depth, string filter, bool includeAllowableActions, bool includeRelationships) { + WcfTestClient.NavigationService.getDescendants inValue = new WcfTestClient.NavigationService.getDescendants(); + inValue.repositoryId = repositoryId; + inValue.folderId = folderId; + inValue.type = type; + inValue.depth = depth; + inValue.filter = filter; + inValue.includeAllowableActions = includeAllowableActions; + inValue.includeRelationships = includeRelationships; + WcfTestClient.NavigationService.getDescendantsResponse retVal = ((WcfTestClient.NavigationService.NavigationServicePort)(this)).getDescendants(inValue); + return retVal.@object; + } + } +} diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/Reference.svcmap b/source/test/dotnet/CmisWS/Service References/NavigationService/Reference.svcmap new file mode 100644 index 0000000000..73fc8a46fb --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/Reference.svcmap @@ -0,0 +1,30 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/WcfCmisWSTests.NavigationService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/NavigationService/WcfCmisWSTests.NavigationService.cmisObjectType.datasource new file mode 100644 index 0000000000..eae9038d96 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/WcfCmisWSTests.NavigationService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.NavigationService.cmisObjectType, Service References.NavigationService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/WcfTestClient.NavigationService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/NavigationService/WcfTestClient.NavigationService.cmisObjectType.datasource new file mode 100644 index 0000000000..5c4b450e23 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/WcfTestClient.NavigationService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.NavigationService.cmisObjectType, Service References.NavigationService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/configuration.svcinfo b/source/test/dotnet/CmisWS/Service References/NavigationService/configuration.svcinfo new file mode 100644 index 0000000000..e7c9e8b789 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/configuration.svcinfo @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/NavigationService/configuration91.svcinfo b/source/test/dotnet/CmisWS/Service References/NavigationService/configuration91.svcinfo new file mode 100644 index 0000000000..a7c2002c27 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/NavigationService/configuration91.svcinfo @@ -0,0 +1,280 @@ + + + + + + + NavigationServiceSoapBinding + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + Transport + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + NavigationServiceSoapBinding1 + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + + + https://localhost:8443/alfresco/cmis/NavigationService + + + + + + basicHttpBinding + + + NavigationServiceSoapBinding + + + NavigationService.NavigationServicePort + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + NavigationServicePort + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/ObjectService.wsdl b/source/test/dotnet/CmisWS/Service References/ObjectService/ObjectService.wsdl new file mode 100644 index 0000000000..76f5aafe0a --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/ObjectService.wsdl @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/ObjectServicePort.wsdl b/source/test/dotnet/CmisWS/Service References/ObjectService/ObjectServicePort.wsdl new file mode 100644 index 0000000000..f46cbb832c --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/ObjectServicePort.wsdl @@ -0,0 +1,1684 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/Reference.cs b/source/test/dotnet/CmisWS/Service References/ObjectService/Reference.cs new file mode 100644 index 0000000000..feba11abb4 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/Reference.cs @@ -0,0 +1,2361 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WcfTestClient.ObjectService { + using System.Runtime.Serialization; + using System; + + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="cmisFaultType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.notInFolderExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.storageExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.offsetExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.versioningExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.filterNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.typeNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.folderNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.streamNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.ObjectService.contentAlreadyExistsExceptionType))] + public partial class cmisFaultType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { + + [System.NonSerializedAttribute()] + private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + + private long errorCodeField; + + private string errorMessageField; + + [global::System.ComponentModel.BrowsableAttribute(false)] + public System.Runtime.Serialization.ExtensionDataObject ExtensionData { + get { + return this.extensionDataField; + } + set { + this.extensionDataField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] + public long errorCode { + get { + return this.errorCodeField; + } + set { + if ((this.errorCodeField.Equals(value) != true)) { + this.errorCodeField = value; + this.RaisePropertyChanged("errorCode"); + } + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)] + public string errorMessage { + get { + return this.errorMessageField; + } + set { + if ((object.ReferenceEquals(this.errorMessageField, value) != true)) { + this.errorMessageField = value; + this.RaisePropertyChanged("errorMessage"); + } + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="notInFolderExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class notInFolderExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="operationNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class operationNotSupportedExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="permissionDeniedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class permissionDeniedExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="storageExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class storageExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="offsetExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class offsetExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="constraintViolationExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class constraintViolationExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="versioningExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class versioningExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="invalidArgumentExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class invalidArgumentExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="filterNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class filterNotValidExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="typeNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class typeNotFoundExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="updateConflictExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class updateConflictExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="folderNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class folderNotValidExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="objectNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class objectNotFoundExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="streamNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class streamNotSupportedExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="runtimeExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class runtimeExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="contentAlreadyExistsExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class contentAlreadyExistsExceptionType : WcfTestClient.ObjectService.cmisFaultType { + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cmis.org/2008/05", ConfigurationName="ObjectService.ObjectServicePort")] + public interface ObjectServicePort { + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.contentAlreadyExistsExceptionType), Action="", Name="contentAlreadyExistsException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.storageExceptionType), Action="", Name="storageException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.streamNotSupportedExceptionType), Action="", Name="streamNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void setContentStream(string repositoryId, ref string documentId, bool overwriteFlag, WcfTestClient.ObjectService.cmisContentStreamType contentStream); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.typeNotFoundExceptionType), Action="", Name="typeNotFoundException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="objectId")] + string createRelationship(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string sourceObjectId, string targetObjectId); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.storageExceptionType), Action="", Name="storageException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.streamNotSupportedExceptionType), Action="", Name="streamNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.typeNotFoundExceptionType), Action="", Name="typeNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="objectId")] + string createDocument(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string folderId, WcfTestClient.ObjectService.cmisContentStreamType contentStream, WcfTestClient.ObjectService.enumVersioningState versioningState); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.storageExceptionType), Action="", Name="storageException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.streamNotSupportedExceptionType), Action="", Name="streamNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.offsetExceptionType), Action="", Name="offsetException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="contentStream")] + WcfTestClient.ObjectService.cmisContentStreamType getContentStream(string repositoryId, string documentId); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void updateProperties(string repositoryId, ref string objectId, string changeToken, WcfTestClient.ObjectService.cmisPropertiesType properties); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.typeNotFoundExceptionType), Action="", Name="typeNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="objectId")] + string createFolder(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string folderId); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.notInFolderExceptionType), Action="", Name="notInFolderException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void moveObject(string repositoryId, string objectId, string targetFolderId, string sourceFolderId); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.storageExceptionType), Action="", Name="storageException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.streamNotSupportedExceptionType), Action="", Name="streamNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.versioningExceptionType), Action="", Name="versioningException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void deleteContentStream(string repositoryId, string documentId); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void deleteObject(string repositoryId, string objectId); + + // CODEGEN: Parameter 'failedToDelete' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlArrayItemAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="failedToDelete")] + WcfTestClient.ObjectService.deleteTreeResponse deleteTree(WcfTestClient.ObjectService.deleteTree request); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.ObjectService.cmisObjectType getProperties(string repositoryId, string objectId, WcfTestClient.ObjectService.enumReturnVersion returnVersion, string filter, bool includeAllowableActions, bool includeRelationships); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.typeNotFoundExceptionType), Action="", Name="typeNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.folderNotValidExceptionType), Action="", Name="folderNotValidException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="objectId")] + string createPolicy(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string folderId); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.ObjectService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="allowableActions")] + WcfTestClient.ObjectService.cmisAllowableActionsType getAllowableActions(string repositoryId, string objectId); + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisContentStreamType : object, System.ComponentModel.INotifyPropertyChanged { + + private string lengthField; + + private string mimeTypeField; + + private string filenameField; + + private string uriField; + + private byte[] streamField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string length { + get { + return this.lengthField; + } + set { + this.lengthField = value; + this.RaisePropertyChanged("length"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string mimeType { + get { + return this.mimeTypeField; + } + set { + this.mimeTypeField = value; + this.RaisePropertyChanged("mimeType"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string filename { + get { + return this.filenameField; + } + set { + this.filenameField = value; + this.RaisePropertyChanged("filename"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=3)] + public string uri { + get { + return this.uriField; + } + set { + this.uriField = value; + this.RaisePropertyChanged("uri"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary", Order=4)] + public byte[] stream { + get { + return this.streamField; + } + set { + this.streamField = value; + this.RaisePropertyChanged("stream"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=5)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisAllowableActionsType : object, System.ComponentModel.INotifyPropertyChanged { + + private string parentIdField; + + private string parentUrlField; + + private bool canDeleteField; + + private bool canDeleteFieldSpecified; + + private bool canUpdatePropertiesField; + + private bool canUpdatePropertiesFieldSpecified; + + private bool canGetPropertiesField; + + private bool canGetPropertiesFieldSpecified; + + private bool canGetRelationshipsField; + + private bool canGetRelationshipsFieldSpecified; + + private bool canGetParentsField; + + private bool canGetParentsFieldSpecified; + + private bool canGetFolderParentField; + + private bool canGetFolderParentFieldSpecified; + + private bool canGetDescendantsField; + + private bool canGetDescendantsFieldSpecified; + + private bool canMoveField; + + private bool canMoveFieldSpecified; + + private bool canDeleteVersionField; + + private bool canDeleteVersionFieldSpecified; + + private bool canDeleteContentField; + + private bool canDeleteContentFieldSpecified; + + private bool canCheckoutField; + + private bool canCheckoutFieldSpecified; + + private bool canCancelCheckoutField; + + private bool canCancelCheckoutFieldSpecified; + + private bool canCheckinField; + + private bool canCheckinFieldSpecified; + + private bool canSetContentField; + + private bool canSetContentFieldSpecified; + + private bool canGetAllVersionsField; + + private bool canGetAllVersionsFieldSpecified; + + private bool canAddToFolderField; + + private bool canAddToFolderFieldSpecified; + + private bool canRemoveFromFolderField; + + private bool canRemoveFromFolderFieldSpecified; + + private bool canViewContentField; + + private bool canViewContentFieldSpecified; + + private bool canAddPolicyField; + + private bool canAddPolicyFieldSpecified; + + private bool canGetAppliedPoliciesField; + + private bool canGetAppliedPoliciesFieldSpecified; + + private bool canRemovePolicyField; + + private bool canRemovePolicyFieldSpecified; + + private bool canGetChildrenField; + + private bool canGetChildrenFieldSpecified; + + private bool canCreateDocumentField; + + private bool canCreateDocumentFieldSpecified; + + private bool canCreateFolderField; + + private bool canCreateFolderFieldSpecified; + + private bool canCreateRelationshipField; + + private bool canCreateRelationshipFieldSpecified; + + private bool canCreatePolicyField; + + private bool canCreatePolicyFieldSpecified; + + private bool canDeleteTreeField; + + private bool canDeleteTreeFieldSpecified; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string parentId { + get { + return this.parentIdField; + } + set { + this.parentIdField = value; + this.RaisePropertyChanged("parentId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string parentUrl { + get { + return this.parentUrlField; + } + set { + this.parentUrlField = value; + this.RaisePropertyChanged("parentUrl"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public bool canDelete { + get { + return this.canDeleteField; + } + set { + this.canDeleteField = value; + this.RaisePropertyChanged("canDelete"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteSpecified { + get { + return this.canDeleteFieldSpecified; + } + set { + this.canDeleteFieldSpecified = value; + this.RaisePropertyChanged("canDeleteSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public bool canUpdateProperties { + get { + return this.canUpdatePropertiesField; + } + set { + this.canUpdatePropertiesField = value; + this.RaisePropertyChanged("canUpdateProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canUpdatePropertiesSpecified { + get { + return this.canUpdatePropertiesFieldSpecified; + } + set { + this.canUpdatePropertiesFieldSpecified = value; + this.RaisePropertyChanged("canUpdatePropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public bool canGetProperties { + get { + return this.canGetPropertiesField; + } + set { + this.canGetPropertiesField = value; + this.RaisePropertyChanged("canGetProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetPropertiesSpecified { + get { + return this.canGetPropertiesFieldSpecified; + } + set { + this.canGetPropertiesFieldSpecified = value; + this.RaisePropertyChanged("canGetPropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public bool canGetRelationships { + get { + return this.canGetRelationshipsField; + } + set { + this.canGetRelationshipsField = value; + this.RaisePropertyChanged("canGetRelationships"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetRelationshipsSpecified { + get { + return this.canGetRelationshipsFieldSpecified; + } + set { + this.canGetRelationshipsFieldSpecified = value; + this.RaisePropertyChanged("canGetRelationshipsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public bool canGetParents { + get { + return this.canGetParentsField; + } + set { + this.canGetParentsField = value; + this.RaisePropertyChanged("canGetParents"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetParentsSpecified { + get { + return this.canGetParentsFieldSpecified; + } + set { + this.canGetParentsFieldSpecified = value; + this.RaisePropertyChanged("canGetParentsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public bool canGetFolderParent { + get { + return this.canGetFolderParentField; + } + set { + this.canGetFolderParentField = value; + this.RaisePropertyChanged("canGetFolderParent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetFolderParentSpecified { + get { + return this.canGetFolderParentFieldSpecified; + } + set { + this.canGetFolderParentFieldSpecified = value; + this.RaisePropertyChanged("canGetFolderParentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public bool canGetDescendants { + get { + return this.canGetDescendantsField; + } + set { + this.canGetDescendantsField = value; + this.RaisePropertyChanged("canGetDescendants"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetDescendantsSpecified { + get { + return this.canGetDescendantsFieldSpecified; + } + set { + this.canGetDescendantsFieldSpecified = value; + this.RaisePropertyChanged("canGetDescendantsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public bool canMove { + get { + return this.canMoveField; + } + set { + this.canMoveField = value; + this.RaisePropertyChanged("canMove"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canMoveSpecified { + get { + return this.canMoveFieldSpecified; + } + set { + this.canMoveFieldSpecified = value; + this.RaisePropertyChanged("canMoveSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public bool canDeleteVersion { + get { + return this.canDeleteVersionField; + } + set { + this.canDeleteVersionField = value; + this.RaisePropertyChanged("canDeleteVersion"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteVersionSpecified { + get { + return this.canDeleteVersionFieldSpecified; + } + set { + this.canDeleteVersionFieldSpecified = value; + this.RaisePropertyChanged("canDeleteVersionSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=11)] + public bool canDeleteContent { + get { + return this.canDeleteContentField; + } + set { + this.canDeleteContentField = value; + this.RaisePropertyChanged("canDeleteContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteContentSpecified { + get { + return this.canDeleteContentFieldSpecified; + } + set { + this.canDeleteContentFieldSpecified = value; + this.RaisePropertyChanged("canDeleteContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=12)] + public bool canCheckout { + get { + return this.canCheckoutField; + } + set { + this.canCheckoutField = value; + this.RaisePropertyChanged("canCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckoutSpecified { + get { + return this.canCheckoutFieldSpecified; + } + set { + this.canCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=13)] + public bool canCancelCheckout { + get { + return this.canCancelCheckoutField; + } + set { + this.canCancelCheckoutField = value; + this.RaisePropertyChanged("canCancelCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCancelCheckoutSpecified { + get { + return this.canCancelCheckoutFieldSpecified; + } + set { + this.canCancelCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCancelCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=14)] + public bool canCheckin { + get { + return this.canCheckinField; + } + set { + this.canCheckinField = value; + this.RaisePropertyChanged("canCheckin"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckinSpecified { + get { + return this.canCheckinFieldSpecified; + } + set { + this.canCheckinFieldSpecified = value; + this.RaisePropertyChanged("canCheckinSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=15)] + public bool canSetContent { + get { + return this.canSetContentField; + } + set { + this.canSetContentField = value; + this.RaisePropertyChanged("canSetContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canSetContentSpecified { + get { + return this.canSetContentFieldSpecified; + } + set { + this.canSetContentFieldSpecified = value; + this.RaisePropertyChanged("canSetContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=16)] + public bool canGetAllVersions { + get { + return this.canGetAllVersionsField; + } + set { + this.canGetAllVersionsField = value; + this.RaisePropertyChanged("canGetAllVersions"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAllVersionsSpecified { + get { + return this.canGetAllVersionsFieldSpecified; + } + set { + this.canGetAllVersionsFieldSpecified = value; + this.RaisePropertyChanged("canGetAllVersionsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=17)] + public bool canAddToFolder { + get { + return this.canAddToFolderField; + } + set { + this.canAddToFolderField = value; + this.RaisePropertyChanged("canAddToFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddToFolderSpecified { + get { + return this.canAddToFolderFieldSpecified; + } + set { + this.canAddToFolderFieldSpecified = value; + this.RaisePropertyChanged("canAddToFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=18)] + public bool canRemoveFromFolder { + get { + return this.canRemoveFromFolderField; + } + set { + this.canRemoveFromFolderField = value; + this.RaisePropertyChanged("canRemoveFromFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemoveFromFolderSpecified { + get { + return this.canRemoveFromFolderFieldSpecified; + } + set { + this.canRemoveFromFolderFieldSpecified = value; + this.RaisePropertyChanged("canRemoveFromFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=19)] + public bool canViewContent { + get { + return this.canViewContentField; + } + set { + this.canViewContentField = value; + this.RaisePropertyChanged("canViewContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canViewContentSpecified { + get { + return this.canViewContentFieldSpecified; + } + set { + this.canViewContentFieldSpecified = value; + this.RaisePropertyChanged("canViewContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=20)] + public bool canAddPolicy { + get { + return this.canAddPolicyField; + } + set { + this.canAddPolicyField = value; + this.RaisePropertyChanged("canAddPolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddPolicySpecified { + get { + return this.canAddPolicyFieldSpecified; + } + set { + this.canAddPolicyFieldSpecified = value; + this.RaisePropertyChanged("canAddPolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=21)] + public bool canGetAppliedPolicies { + get { + return this.canGetAppliedPoliciesField; + } + set { + this.canGetAppliedPoliciesField = value; + this.RaisePropertyChanged("canGetAppliedPolicies"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAppliedPoliciesSpecified { + get { + return this.canGetAppliedPoliciesFieldSpecified; + } + set { + this.canGetAppliedPoliciesFieldSpecified = value; + this.RaisePropertyChanged("canGetAppliedPoliciesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=22)] + public bool canRemovePolicy { + get { + return this.canRemovePolicyField; + } + set { + this.canRemovePolicyField = value; + this.RaisePropertyChanged("canRemovePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemovePolicySpecified { + get { + return this.canRemovePolicyFieldSpecified; + } + set { + this.canRemovePolicyFieldSpecified = value; + this.RaisePropertyChanged("canRemovePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=23)] + public bool canGetChildren { + get { + return this.canGetChildrenField; + } + set { + this.canGetChildrenField = value; + this.RaisePropertyChanged("canGetChildren"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetChildrenSpecified { + get { + return this.canGetChildrenFieldSpecified; + } + set { + this.canGetChildrenFieldSpecified = value; + this.RaisePropertyChanged("canGetChildrenSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=24)] + public bool canCreateDocument { + get { + return this.canCreateDocumentField; + } + set { + this.canCreateDocumentField = value; + this.RaisePropertyChanged("canCreateDocument"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateDocumentSpecified { + get { + return this.canCreateDocumentFieldSpecified; + } + set { + this.canCreateDocumentFieldSpecified = value; + this.RaisePropertyChanged("canCreateDocumentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=25)] + public bool canCreateFolder { + get { + return this.canCreateFolderField; + } + set { + this.canCreateFolderField = value; + this.RaisePropertyChanged("canCreateFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateFolderSpecified { + get { + return this.canCreateFolderFieldSpecified; + } + set { + this.canCreateFolderFieldSpecified = value; + this.RaisePropertyChanged("canCreateFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=26)] + public bool canCreateRelationship { + get { + return this.canCreateRelationshipField; + } + set { + this.canCreateRelationshipField = value; + this.RaisePropertyChanged("canCreateRelationship"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateRelationshipSpecified { + get { + return this.canCreateRelationshipFieldSpecified; + } + set { + this.canCreateRelationshipFieldSpecified = value; + this.RaisePropertyChanged("canCreateRelationshipSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=27)] + public bool canCreatePolicy { + get { + return this.canCreatePolicyField; + } + set { + this.canCreatePolicyField = value; + this.RaisePropertyChanged("canCreatePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreatePolicySpecified { + get { + return this.canCreatePolicyFieldSpecified; + } + set { + this.canCreatePolicyFieldSpecified = value; + this.RaisePropertyChanged("canCreatePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=28)] + public bool canDeleteTree { + get { + return this.canDeleteTreeField; + } + set { + this.canDeleteTreeField = value; + this.RaisePropertyChanged("canDeleteTree"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteTreeSpecified { + get { + return this.canDeleteTreeFieldSpecified; + } + set { + this.canDeleteTreeFieldSpecified = value; + this.RaisePropertyChanged("canDeleteTreeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=29)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisObjectType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisPropertiesType propertiesField; + + private cmisAllowableActionsType allowableActionsField; + + private cmisObjectType[] relationshipField; + + private cmisObjectType[] childField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public cmisPropertiesType properties { + get { + return this.propertiesField; + } + set { + this.propertiesField = value; + this.RaisePropertyChanged("properties"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public cmisAllowableActionsType allowableActions { + get { + return this.allowableActionsField; + } + set { + this.allowableActionsField = value; + this.RaisePropertyChanged("allowableActions"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("relationship", IsNullable=true, Order=2)] + public cmisObjectType[] relationship { + get { + return this.relationshipField; + } + set { + this.relationshipField = value; + this.RaisePropertyChanged("relationship"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("child", IsNullable=true, Order=3)] + public cmisObjectType[] child { + get { + return this.childField; + } + set { + this.childField = value; + this.RaisePropertyChanged("child"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=4)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertiesType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisProperty[] itemsField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute("propertyBoolean", typeof(cmisPropertyBoolean), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDateTime", typeof(cmisPropertyDateTime), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDecimal", typeof(cmisPropertyDecimal), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyHtml", typeof(cmisPropertyHtml), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyId", typeof(cmisPropertyId), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyInteger", typeof(cmisPropertyInteger), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyString", typeof(cmisPropertyString), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyUri", typeof(cmisPropertyUri), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyXml", typeof(cmisPropertyXml), IsNullable=true, Order=0)] + public cmisProperty[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=1)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyBoolean : cmisProperty { + + private bool valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumPropertyType { + + /// + boolean, + + /// + id, + + /// + integer, + + /// + datetime, + + /// + @decimal, + + /// + html, + + /// + @string, + + /// + uri, + + /// + xml, + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyBoolean))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyInteger))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyHtml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDateTime))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyString))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyXml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDecimal))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyId))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyUri))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisProperty : object, System.ComponentModel.INotifyPropertyChanged { + + private string nameField; + + private string indexField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public string name { + get { + return this.nameField; + } + set { + this.nameField = value; + this.RaisePropertyChanged("name"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="integer")] + public string index { + get { + return this.indexField; + } + set { + this.indexField = value; + this.RaisePropertyChanged("index"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyInteger : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyHtml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDateTime : cmisProperty { + + private System.DateTime valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public System.DateTime value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyString : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyXml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDecimal : cmisProperty { + + private decimal valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public decimal value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyId : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private string hrefField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="anyURI")] + public string href { + get { + return this.hrefField; + } + set { + this.hrefField = value; + this.RaisePropertyChanged("href"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyUri : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumVersioningState { + + /// + checkedout, + + /// + minor, + + /// + major, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumUnfileNonfolderObjects { + + /// + unfile, + + /// + deletesinglefiled, + + /// + delete, + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="deleteTree", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class deleteTree { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string folderId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public WcfTestClient.ObjectService.enumUnfileNonfolderObjects unfileNonfolderObjects; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + public bool continueOnFailure; + + public deleteTree() { + } + + public deleteTree(string repositoryId, string folderId, WcfTestClient.ObjectService.enumUnfileNonfolderObjects unfileNonfolderObjects, bool continueOnFailure) { + this.repositoryId = repositoryId; + this.folderId = folderId; + this.unfileNonfolderObjects = unfileNonfolderObjects; + this.continueOnFailure = continueOnFailure; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="deleteTreeResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class deleteTreeResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlArrayItemAttribute("objectId")] + public string[] failedToDelete; + + public deleteTreeResponse() { + } + + public deleteTreeResponse(string[] failedToDelete) { + this.failedToDelete = failedToDelete; + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumReturnVersion { + + /// + @this, + + /// + latest, + + /// + latestmajor, + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public interface ObjectServicePortChannel : WcfTestClient.ObjectService.ObjectServicePort, System.ServiceModel.IClientChannel { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public partial class ObjectServicePortClient : System.ServiceModel.ClientBase, WcfTestClient.ObjectService.ObjectServicePort { + + public ObjectServicePortClient() { + } + + public ObjectServicePortClient(string endpointConfigurationName) : + base(endpointConfigurationName) { + } + + public ObjectServicePortClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public ObjectServicePortClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public ObjectServicePortClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { + } + + public void setContentStream(string repositoryId, ref string documentId, bool overwriteFlag, WcfTestClient.ObjectService.cmisContentStreamType contentStream) { + base.Channel.setContentStream(repositoryId, ref documentId, overwriteFlag, contentStream); + } + + public string createRelationship(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string sourceObjectId, string targetObjectId) { + return base.Channel.createRelationship(repositoryId, typeId, properties, sourceObjectId, targetObjectId); + } + + public string createDocument(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string folderId, WcfTestClient.ObjectService.cmisContentStreamType contentStream, WcfTestClient.ObjectService.enumVersioningState versioningState) { + return base.Channel.createDocument(repositoryId, typeId, properties, folderId, contentStream, versioningState); + } + + public WcfTestClient.ObjectService.cmisContentStreamType getContentStream(string repositoryId, string documentId) { + return base.Channel.getContentStream(repositoryId, documentId); + } + + public void updateProperties(string repositoryId, ref string objectId, string changeToken, WcfTestClient.ObjectService.cmisPropertiesType properties) { + base.Channel.updateProperties(repositoryId, ref objectId, changeToken, properties); + } + + public string createFolder(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string folderId) { + return base.Channel.createFolder(repositoryId, typeId, properties, folderId); + } + + public void moveObject(string repositoryId, string objectId, string targetFolderId, string sourceFolderId) { + base.Channel.moveObject(repositoryId, objectId, targetFolderId, sourceFolderId); + } + + public void deleteContentStream(string repositoryId, string documentId) { + base.Channel.deleteContentStream(repositoryId, documentId); + } + + public void deleteObject(string repositoryId, string objectId) { + base.Channel.deleteObject(repositoryId, objectId); + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.ObjectService.deleteTreeResponse WcfTestClient.ObjectService.ObjectServicePort.deleteTree(WcfTestClient.ObjectService.deleteTree request) { + return base.Channel.deleteTree(request); + } + + public string[] deleteTree(string repositoryId, string folderId, WcfTestClient.ObjectService.enumUnfileNonfolderObjects unfileNonfolderObjects, bool continueOnFailure) { + WcfTestClient.ObjectService.deleteTree inValue = new WcfTestClient.ObjectService.deleteTree(); + inValue.repositoryId = repositoryId; + inValue.folderId = folderId; + inValue.unfileNonfolderObjects = unfileNonfolderObjects; + inValue.continueOnFailure = continueOnFailure; + WcfTestClient.ObjectService.deleteTreeResponse retVal = ((WcfTestClient.ObjectService.ObjectServicePort)(this)).deleteTree(inValue); + return retVal.failedToDelete; + } + + public WcfTestClient.ObjectService.cmisObjectType getProperties(string repositoryId, string objectId, WcfTestClient.ObjectService.enumReturnVersion returnVersion, string filter, bool includeAllowableActions, bool includeRelationships) { + return base.Channel.getProperties(repositoryId, objectId, returnVersion, filter, includeAllowableActions, includeRelationships); + } + + public string createPolicy(string repositoryId, string typeId, WcfTestClient.ObjectService.cmisPropertiesType properties, string folderId) { + return base.Channel.createPolicy(repositoryId, typeId, properties, folderId); + } + + public WcfTestClient.ObjectService.cmisAllowableActionsType getAllowableActions(string repositoryId, string objectId) { + return base.Channel.getAllowableActions(repositoryId, objectId); + } + } +} diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/Reference.svcmap b/source/test/dotnet/CmisWS/Service References/ObjectService/Reference.svcmap new file mode 100644 index 0000000000..47c59c823b --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/Reference.svcmap @@ -0,0 +1,30 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisAllowableActionsType.datasource b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisAllowableActionsType.datasource new file mode 100644 index 0000000000..fc2a97ca4f --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisAllowableActionsType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.ObjectService.cmisAllowableActionsType, Service References.ObjectService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisContentStreamType.datasource b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisContentStreamType.datasource new file mode 100644 index 0000000000..2f0b5b9770 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisContentStreamType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.ObjectService.cmisContentStreamType, Service References.ObjectService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisObjectType.datasource new file mode 100644 index 0000000000..5b2a638846 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfCmisWSTests.ObjectService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.ObjectService.cmisObjectType, Service References.ObjectService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisAllowableActionsType.datasource b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisAllowableActionsType.datasource new file mode 100644 index 0000000000..a04daf993a --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisAllowableActionsType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.ObjectService.cmisAllowableActionsType, Service References.ObjectService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisContentStreamType.datasource b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisContentStreamType.datasource new file mode 100644 index 0000000000..68da2dddb9 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisContentStreamType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.ObjectService.cmisContentStreamType, Service References.ObjectService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisObjectType.datasource new file mode 100644 index 0000000000..614466b2b4 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/WcfTestClient.ObjectService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.ObjectService.cmisObjectType, Service References.ObjectService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/configuration.svcinfo b/source/test/dotnet/CmisWS/Service References/ObjectService/configuration.svcinfo new file mode 100644 index 0000000000..6b7ccc72b5 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/configuration.svcinfo @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/ObjectService/configuration91.svcinfo b/source/test/dotnet/CmisWS/Service References/ObjectService/configuration91.svcinfo new file mode 100644 index 0000000000..bc3c1e8c19 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/ObjectService/configuration91.svcinfo @@ -0,0 +1,280 @@ + + + + + + + ObjectServiceSoapBinding + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + Transport + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + ObjectServiceSoapBinding1 + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + + + https://localhost:8443/alfresco/cmis/ObjectService + + + + + + basicHttpBinding + + + ObjectServiceSoapBinding + + + ObjectService.ObjectServicePort + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + ObjectServicePort + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.cs b/source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.cs new file mode 100644 index 0000000000..0f6949f325 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.cs @@ -0,0 +1,4685 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WcfTestClient.RepositoryService { + using System.Runtime.Serialization; + using System; + + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="cmisFaultType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.notInFolderExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.operationNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.permissionDeniedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.storageExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.offsetExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.constraintViolationExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.versioningExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.filterNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.typeNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.updateConflictExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.folderNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.objectNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.streamNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.runtimeExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.contentAlreadyExistsExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.RepositoryService.invalidArgumentExceptionType))] + public partial class cmisFaultType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { + + [System.NonSerializedAttribute()] + private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + + private long errorCodeField; + + private string errorMessageField; + + [global::System.ComponentModel.BrowsableAttribute(false)] + public System.Runtime.Serialization.ExtensionDataObject ExtensionData { + get { + return this.extensionDataField; + } + set { + this.extensionDataField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] + public long errorCode { + get { + return this.errorCodeField; + } + set { + if ((this.errorCodeField.Equals(value) != true)) { + this.errorCodeField = value; + this.RaisePropertyChanged("errorCode"); + } + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)] + public string errorMessage { + get { + return this.errorMessageField; + } + set { + if ((object.ReferenceEquals(this.errorMessageField, value) != true)) { + this.errorMessageField = value; + this.RaisePropertyChanged("errorMessage"); + } + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="notInFolderExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class notInFolderExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="operationNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class operationNotSupportedExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="permissionDeniedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class permissionDeniedExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="storageExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class storageExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="offsetExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class offsetExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="constraintViolationExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class constraintViolationExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="versioningExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class versioningExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="filterNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class filterNotValidExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="typeNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class typeNotFoundExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="updateConflictExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class updateConflictExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="folderNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class folderNotValidExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="objectNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class objectNotFoundExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="streamNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class streamNotSupportedExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="runtimeExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class runtimeExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="contentAlreadyExistsExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class contentAlreadyExistsExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="invalidArgumentExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class invalidArgumentExceptionType : WcfTestClient.RepositoryService.cmisFaultType { + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cmis.org/2008/05", ConfigurationName="RepositoryService.RepositoryServicePort")] + public interface RepositoryServicePort { + + // CODEGEN: Parameter 'Item' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.typeNotFoundExceptionType), Action="", Name="typeNotFoundException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisContentStreamType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisFaultType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisRepositoryInfoType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisQueryType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisPropertyDefinitionType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="Item")] + WcfTestClient.RepositoryService.getTypeDefinitionResponse getTypeDefinition(WcfTestClient.RepositoryService.getTypeDefinition request); + + // CODEGEN: Generating message contract since message part namespace () does not match the default value (http://www.cmis.org/2008/05) + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisContentStreamType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisFaultType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisRepositoryInfoType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisQueryType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisPropertyDefinitionType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + WcfTestClient.RepositoryService.getRepositoryInfoResponse getRepositoryInfo(WcfTestClient.RepositoryService.getRepositoryInfo request); + + // CODEGEN: Parameter 'repository' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisContentStreamType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisFaultType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisRepositoryInfoType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisQueryType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisPropertyDefinitionType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="repository")] + WcfTestClient.RepositoryService.getRepositoriesResponse getRepositories(WcfTestClient.RepositoryService.getRepositories request); + + // CODEGEN: Parameter 'Items' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.RepositoryService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisContentStreamType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisFaultType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisRepositoryInfoType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisQueryType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisPropertyDefinitionType))] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="Items")] + WcfTestClient.RepositoryService.getTypesResponse getTypes(WcfTestClient.RepositoryService.getTypes request); + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisTypeDocumentDefinitionType : cmisTypeDefinitionType { + + private bool versionableField; + + private enumContentStreamAllowed contentStreamAllowedField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool versionable { + get { + return this.versionableField; + } + set { + this.versionableField = value; + this.RaisePropertyChanged("versionable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public enumContentStreamAllowed contentStreamAllowed { + get { + return this.contentStreamAllowedField; + } + set { + this.contentStreamAllowedField = value; + this.RaisePropertyChanged("contentStreamAllowed"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumContentStreamAllowed { + + /// + notallowed, + + /// + allowed, + + /// + required, + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisTypePolicyDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisTypeRelationshipDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisTypeFolderDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisTypeDocumentDefinitionType))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisTypeDefinitionType : object, System.ComponentModel.INotifyPropertyChanged { + + private string typeIdField; + + private string queryNameField; + + private string displayNameField; + + private enumObjectType baseTypeField; + + private string baseTypeQueryNameField; + + private object parentIdField; + + private string descriptionField; + + private bool creatableField; + + private bool fileableField; + + private bool queryableField; + + private bool controllableField; + + private bool includedInSupertypeQueryField; + + private cmisPropertyDefinitionType[] itemsField; + + private System.Xml.XmlElement[] anyField; + + public cmisTypeDefinitionType() { + this.includedInSupertypeQueryField = true; + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string typeId { + get { + return this.typeIdField; + } + set { + this.typeIdField = value; + this.RaisePropertyChanged("typeId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string queryName { + get { + return this.queryNameField; + } + set { + this.queryNameField = value; + this.RaisePropertyChanged("queryName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string displayName { + get { + return this.displayNameField; + } + set { + this.displayNameField = value; + this.RaisePropertyChanged("displayName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public enumObjectType baseType { + get { + return this.baseTypeField; + } + set { + this.baseTypeField = value; + this.RaisePropertyChanged("baseType"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public string baseTypeQueryName { + get { + return this.baseTypeQueryNameField; + } + set { + this.baseTypeQueryNameField = value; + this.RaisePropertyChanged("baseTypeQueryName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public object parentId { + get { + return this.parentIdField; + } + set { + this.parentIdField = value; + this.RaisePropertyChanged("parentId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public string description { + get { + return this.descriptionField; + } + set { + this.descriptionField = value; + this.RaisePropertyChanged("description"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public bool creatable { + get { + return this.creatableField; + } + set { + this.creatableField = value; + this.RaisePropertyChanged("creatable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public bool fileable { + get { + return this.fileableField; + } + set { + this.fileableField = value; + this.RaisePropertyChanged("fileable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public bool queryable { + get { + return this.queryableField; + } + set { + this.queryableField = value; + this.RaisePropertyChanged("queryable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public bool controllable { + get { + return this.controllableField; + } + set { + this.controllableField = value; + this.RaisePropertyChanged("controllable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=11)] + public bool includedInSupertypeQuery { + get { + return this.includedInSupertypeQueryField; + } + set { + this.includedInSupertypeQueryField = value; + this.RaisePropertyChanged("includedInSupertypeQuery"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("propertyBooleanDefinition", typeof(cmisPropertyBooleanDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyDateTimeDefinition", typeof(cmisPropertyDateTimeDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyDecimalDefinition", typeof(cmisPropertyDecimalDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyHtmlDefinition", typeof(cmisPropertyHtmlDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyIdDefinition", typeof(cmisPropertyIdDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyIntegerDefinition", typeof(cmisPropertyIntegerDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyStringDefinition", typeof(cmisPropertyStringDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyUriDefinition", typeof(cmisPropertyUriDefinitionType), Order=12)] + [System.Xml.Serialization.XmlElementAttribute("propertyXmlDefinition", typeof(cmisPropertyXmlDefinitionType), Order=12)] + public cmisPropertyDefinitionType[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=13)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumObjectType { + + /// + document, + + /// + folder, + + /// + relationship, + + /// + policy, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisContentStreamType : object, System.ComponentModel.INotifyPropertyChanged { + + private string lengthField; + + private string mimeTypeField; + + private string filenameField; + + private string uriField; + + private byte[] streamField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string length { + get { + return this.lengthField; + } + set { + this.lengthField = value; + this.RaisePropertyChanged("length"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string mimeType { + get { + return this.mimeTypeField; + } + set { + this.mimeTypeField = value; + this.RaisePropertyChanged("mimeType"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string filename { + get { + return this.filenameField; + } + set { + this.filenameField = value; + this.RaisePropertyChanged("filename"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=3)] + public string uri { + get { + return this.uriField; + } + set { + this.uriField = value; + this.RaisePropertyChanged("uri"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary", Order=4)] + public byte[] stream { + get { + return this.streamField; + } + set { + this.streamField = value; + this.RaisePropertyChanged("stream"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=5)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class contentAlreadyExistsExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class runtimeExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class streamNotSupportedExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class objectNotFoundExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class folderNotValidExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class updateConflictExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class typeNotFoundExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class filterNotValidExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class invalidArgumentExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class versioningExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class constraintViolationExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class offsetExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class storageExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class permissionDeniedExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class operationNotSupportedExceptionType : cmisFaultType { + } + + /// + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class notInFolderExceptionType : cmisFaultType { + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisAnyXml : object, System.ComponentModel.INotifyPropertyChanged { + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisRepositoryCapabilitiesType : object, System.ComponentModel.INotifyPropertyChanged { + + private bool capabilityMultifilingField; + + private bool capabilityUnfilingField; + + private bool capabilityVersionSpecificFilingField; + + private bool capabilityPWCUpdateableField; + + private bool capabilityPWCSearchableField; + + private bool capabilityAllVersionsSearchableField; + + private enumCapabilityQuery capabilityQueryField; + + private enumCapabilityJoin capabilityJoinField; + + private enumCapabilityFullText capabilityFullTextField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool capabilityMultifiling { + get { + return this.capabilityMultifilingField; + } + set { + this.capabilityMultifilingField = value; + this.RaisePropertyChanged("capabilityMultifiling"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public bool capabilityUnfiling { + get { + return this.capabilityUnfilingField; + } + set { + this.capabilityUnfilingField = value; + this.RaisePropertyChanged("capabilityUnfiling"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public bool capabilityVersionSpecificFiling { + get { + return this.capabilityVersionSpecificFilingField; + } + set { + this.capabilityVersionSpecificFilingField = value; + this.RaisePropertyChanged("capabilityVersionSpecificFiling"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public bool capabilityPWCUpdateable { + get { + return this.capabilityPWCUpdateableField; + } + set { + this.capabilityPWCUpdateableField = value; + this.RaisePropertyChanged("capabilityPWCUpdateable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public bool capabilityPWCSearchable { + get { + return this.capabilityPWCSearchableField; + } + set { + this.capabilityPWCSearchableField = value; + this.RaisePropertyChanged("capabilityPWCSearchable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public bool capabilityAllVersionsSearchable { + get { + return this.capabilityAllVersionsSearchableField; + } + set { + this.capabilityAllVersionsSearchableField = value; + this.RaisePropertyChanged("capabilityAllVersionsSearchable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public enumCapabilityQuery capabilityQuery { + get { + return this.capabilityQueryField; + } + set { + this.capabilityQueryField = value; + this.RaisePropertyChanged("capabilityQuery"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public enumCapabilityJoin capabilityJoin { + get { + return this.capabilityJoinField; + } + set { + this.capabilityJoinField = value; + this.RaisePropertyChanged("capabilityJoin"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public enumCapabilityFullText capabilityFullText { + get { + return this.capabilityFullTextField; + } + set { + this.capabilityFullTextField = value; + this.RaisePropertyChanged("capabilityFullText"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=9)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumCapabilityQuery { + + /// + none, + + /// + metadataonly, + + /// + fulltextonly, + + /// + both, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumCapabilityJoin { + + /// + nojoin, + + /// + inneronly, + + /// + innerandouter, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumCapabilityFullText { + + /// + none, + + /// + fulltextonly, + + /// + fulltextandstructured, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisRepositoryInfoType : object, System.ComponentModel.INotifyPropertyChanged { + + private string repositoryIdField; + + private string repositoryNameField; + + private string repositoryRelationshipField; + + private string repositoryDescriptionField; + + private string vendorNameField; + + private string productNameField; + + private string productVersionField; + + private string rootFolderIdField; + + private cmisRepositoryCapabilitiesType capabilitiesField; + + private string cmisVersionsSupportedField; + + private cmisAnyXml repositorySpecificInformationField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string repositoryId { + get { + return this.repositoryIdField; + } + set { + this.repositoryIdField = value; + this.RaisePropertyChanged("repositoryId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string repositoryName { + get { + return this.repositoryNameField; + } + set { + this.repositoryNameField = value; + this.RaisePropertyChanged("repositoryName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string repositoryRelationship { + get { + return this.repositoryRelationshipField; + } + set { + this.repositoryRelationshipField = value; + this.RaisePropertyChanged("repositoryRelationship"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public string repositoryDescription { + get { + return this.repositoryDescriptionField; + } + set { + this.repositoryDescriptionField = value; + this.RaisePropertyChanged("repositoryDescription"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public string vendorName { + get { + return this.vendorNameField; + } + set { + this.vendorNameField = value; + this.RaisePropertyChanged("vendorName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public string productName { + get { + return this.productNameField; + } + set { + this.productNameField = value; + this.RaisePropertyChanged("productName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public string productVersion { + get { + return this.productVersionField; + } + set { + this.productVersionField = value; + this.RaisePropertyChanged("productVersion"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public string rootFolderId { + get { + return this.rootFolderIdField; + } + set { + this.rootFolderIdField = value; + this.RaisePropertyChanged("rootFolderId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public cmisRepositoryCapabilitiesType capabilities { + get { + return this.capabilitiesField; + } + set { + this.capabilitiesField = value; + this.RaisePropertyChanged("capabilities"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public string cmisVersionsSupported { + get { + return this.cmisVersionsSupportedField; + } + set { + this.cmisVersionsSupportedField = value; + this.RaisePropertyChanged("cmisVersionsSupported"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public cmisAnyXml repositorySpecificInformation { + get { + return this.repositorySpecificInformationField; + } + set { + this.repositorySpecificInformationField = value; + this.RaisePropertyChanged("repositorySpecificInformation"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=11)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisRepositoryEntryType : object, System.ComponentModel.INotifyPropertyChanged { + + private string repositoryIDField; + + private string repositoryNameField; + + private string repositoryURIField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string repositoryID { + get { + return this.repositoryIDField; + } + set { + this.repositoryIDField = value; + this.RaisePropertyChanged("repositoryID"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string repositoryName { + get { + return this.repositoryNameField; + } + set { + this.repositoryNameField = value; + this.RaisePropertyChanged("repositoryName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=2)] + public string repositoryURI { + get { + return this.repositoryURIField; + } + set { + this.repositoryURIField = value; + this.RaisePropertyChanged("repositoryURI"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=3)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisQueryType : object, System.ComponentModel.INotifyPropertyChanged { + + private string statementField; + + private bool searchAllVersionsField; + + private bool searchAllVersionsFieldSpecified; + + private string pageSizeField; + + private string skipCountField; + + private bool returnAllowableActionsField; + + private bool returnAllowableActionsFieldSpecified; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string statement { + get { + return this.statementField; + } + set { + this.statementField = value; + this.RaisePropertyChanged("statement"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public bool searchAllVersions { + get { + return this.searchAllVersionsField; + } + set { + this.searchAllVersionsField = value; + this.RaisePropertyChanged("searchAllVersions"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool searchAllVersionsSpecified { + get { + return this.searchAllVersionsFieldSpecified; + } + set { + this.searchAllVersionsFieldSpecified = value; + this.RaisePropertyChanged("searchAllVersionsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=2)] + public string pageSize { + get { + return this.pageSizeField; + } + set { + this.pageSizeField = value; + this.RaisePropertyChanged("pageSize"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=3)] + public string skipCount { + get { + return this.skipCountField; + } + set { + this.skipCountField = value; + this.RaisePropertyChanged("skipCount"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public bool returnAllowableActions { + get { + return this.returnAllowableActionsField; + } + set { + this.returnAllowableActionsField = value; + this.RaisePropertyChanged("returnAllowableActions"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool returnAllowableActionsSpecified { + get { + return this.returnAllowableActionsFieldSpecified; + } + set { + this.returnAllowableActionsFieldSpecified = value; + this.RaisePropertyChanged("returnAllowableActionsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=5)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceXmlType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceUriType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceHtmlType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceStringType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceIntegerType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceIdType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceDecimalType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceDateTimeType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisChoiceBooleanType))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public abstract partial class cmisChoiceType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisChoiceType[] itemsField; + + private string indexField; + + private string keyField; + + /// + [System.Xml.Serialization.XmlElementAttribute("choice", typeof(cmisChoiceType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceBoolean", typeof(cmisChoiceBooleanType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceDateTime", typeof(cmisChoiceDateTimeType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceDecimal", typeof(cmisChoiceDecimalType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceHtml", typeof(cmisChoiceHtmlType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceId", typeof(cmisChoiceIdType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceInteger", typeof(cmisChoiceIntegerType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceString", typeof(cmisChoiceStringType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceUri", typeof(cmisChoiceUriType), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("choiceXml", typeof(cmisChoiceXmlType), IsNullable=true, Order=0)] + public cmisChoiceType[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="integer")] + public string index { + get { + return this.indexField; + } + set { + this.indexField = value; + this.RaisePropertyChanged("index"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public string key { + get { + return this.keyField; + } + set { + this.keyField = value; + this.RaisePropertyChanged("key"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceBooleanType : cmisChoiceType { + + private bool valueField; + + private bool valueFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceDateTimeType : cmisChoiceType { + + private System.DateTime valueField; + + private bool valueFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public System.DateTime value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceDecimalType : cmisChoiceType { + + private decimal valueField; + + private bool valueFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public decimal value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceHtmlType : cmisChoiceType { + + private System.Xml.XmlElement[] anyField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceIdType : cmisChoiceType { + + private string valueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceIntegerType : cmisChoiceType { + + private string valueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceStringType : cmisChoiceType { + + private string valueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceUriType : cmisChoiceType { + + private string valueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisChoiceXmlType : cmisChoiceType { + + private System.Xml.XmlElement[] anyField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyXmlDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyUriDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDateTimeDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDecimalDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyStringDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyIdDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyBooleanDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyIntegerDefinitionType))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyHtmlDefinitionType))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDefinitionType : object, System.ComponentModel.INotifyPropertyChanged { + + private string nameField; + + private string idField; + + private string displayNameField; + + private string descriptionField; + + private enumPropertyType propertyTypeField; + + private enumCardinality cardinalityField; + + private enumUpdateability updateabilityField; + + private bool inheritedField; + + private bool inheritedFieldSpecified; + + private bool requiredField; + + private bool queryableField; + + private bool orderableField; + + private cmisChoiceType[] itemsField; + + private bool openChoiceField; + + private bool openChoiceFieldSpecified; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string name { + get { + return this.nameField; + } + set { + this.nameField = value; + this.RaisePropertyChanged("name"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string id { + get { + return this.idField; + } + set { + this.idField = value; + this.RaisePropertyChanged("id"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string displayName { + get { + return this.displayNameField; + } + set { + this.displayNameField = value; + this.RaisePropertyChanged("displayName"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public string description { + get { + return this.descriptionField; + } + set { + this.descriptionField = value; + this.RaisePropertyChanged("description"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public enumCardinality cardinality { + get { + return this.cardinalityField; + } + set { + this.cardinalityField = value; + this.RaisePropertyChanged("cardinality"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public enumUpdateability updateability { + get { + return this.updateabilityField; + } + set { + this.updateabilityField = value; + this.RaisePropertyChanged("updateability"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public bool inherited { + get { + return this.inheritedField; + } + set { + this.inheritedField = value; + this.RaisePropertyChanged("inherited"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool inheritedSpecified { + get { + return this.inheritedFieldSpecified; + } + set { + this.inheritedFieldSpecified = value; + this.RaisePropertyChanged("inheritedSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public bool required { + get { + return this.requiredField; + } + set { + this.requiredField = value; + this.RaisePropertyChanged("required"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public bool queryable { + get { + return this.queryableField; + } + set { + this.queryableField = value; + this.RaisePropertyChanged("queryable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public bool orderable { + get { + return this.orderableField; + } + set { + this.orderableField = value; + this.RaisePropertyChanged("orderable"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("choiceBoolean", typeof(cmisChoiceBooleanType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceDateTime", typeof(cmisChoiceDateTimeType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceDecimal", typeof(cmisChoiceDecimalType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceHtml", typeof(cmisChoiceHtmlType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceId", typeof(cmisChoiceIdType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceInteger", typeof(cmisChoiceIntegerType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceString", typeof(cmisChoiceStringType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceUri", typeof(cmisChoiceUriType), Order=11)] + [System.Xml.Serialization.XmlElementAttribute("choiceXml", typeof(cmisChoiceXmlType), Order=11)] + public cmisChoiceType[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=12)] + public bool openChoice { + get { + return this.openChoiceField; + } + set { + this.openChoiceField = value; + this.RaisePropertyChanged("openChoice"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool openChoiceSpecified { + get { + return this.openChoiceFieldSpecified; + } + set { + this.openChoiceFieldSpecified = value; + this.RaisePropertyChanged("openChoiceSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=13)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumPropertyType { + + /// + boolean, + + /// + id, + + /// + integer, + + /// + datetime, + + /// + @decimal, + + /// + html, + + /// + @string, + + /// + uri, + + /// + xml, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumCardinality { + + /// + single, + + /// + multi, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumUpdateability { + + /// + @readonly, + + /// + readwrite, + + /// + whencheckedout, + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyXmlDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceXmlType[] defaultValueField; + + private string schemaURIField; + + private string encodingField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceXmlType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=1)] + public string schemaURI { + get { + return this.schemaURIField; + } + set { + this.schemaURIField = value; + this.RaisePropertyChanged("schemaURI"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string encoding { + get { + return this.encodingField; + } + set { + this.encodingField = value; + this.RaisePropertyChanged("encoding"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyUriDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceUriType[] defaultValueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceUriType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDateTimeDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceDateTimeType[] defaultValueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceDateTimeType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDecimalDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceDecimalType[] defaultValueField; + + private string precisionField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceDecimalType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=1)] + public string precision { + get { + return this.precisionField; + } + set { + this.precisionField = value; + this.RaisePropertyChanged("precision"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyStringDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceStringType[] defaultValueField; + + private string maxLengthField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceStringType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=1)] + public string maxLength { + get { + return this.maxLengthField; + } + set { + this.maxLengthField = value; + this.RaisePropertyChanged("maxLength"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyIdDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceIdType[] defaultValueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceIdType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyBooleanDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceBooleanType[] defaultValueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceBooleanType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyIntegerDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceIntegerType[] defaultValueField; + + private string maxValueField; + + private string minValueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceIntegerType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=1)] + public string maxValue { + get { + return this.maxValueField; + } + set { + this.maxValueField = value; + this.RaisePropertyChanged("maxValue"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=2)] + public string minValue { + get { + return this.minValueField; + } + set { + this.minValueField = value; + this.RaisePropertyChanged("minValue"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyHtmlDefinitionType : cmisPropertyDefinitionType { + + private cmisChoiceHtmlType[] defaultValueField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("defaultValue", IsNullable=true, Order=0)] + public cmisChoiceHtmlType[] defaultValue { + get { + return this.defaultValueField; + } + set { + this.defaultValueField = value; + this.RaisePropertyChanged("defaultValue"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisAllowableActionsType : object, System.ComponentModel.INotifyPropertyChanged { + + private string parentIdField; + + private string parentUrlField; + + private bool canDeleteField; + + private bool canDeleteFieldSpecified; + + private bool canUpdatePropertiesField; + + private bool canUpdatePropertiesFieldSpecified; + + private bool canGetPropertiesField; + + private bool canGetPropertiesFieldSpecified; + + private bool canGetRelationshipsField; + + private bool canGetRelationshipsFieldSpecified; + + private bool canGetParentsField; + + private bool canGetParentsFieldSpecified; + + private bool canGetFolderParentField; + + private bool canGetFolderParentFieldSpecified; + + private bool canGetDescendantsField; + + private bool canGetDescendantsFieldSpecified; + + private bool canMoveField; + + private bool canMoveFieldSpecified; + + private bool canDeleteVersionField; + + private bool canDeleteVersionFieldSpecified; + + private bool canDeleteContentField; + + private bool canDeleteContentFieldSpecified; + + private bool canCheckoutField; + + private bool canCheckoutFieldSpecified; + + private bool canCancelCheckoutField; + + private bool canCancelCheckoutFieldSpecified; + + private bool canCheckinField; + + private bool canCheckinFieldSpecified; + + private bool canSetContentField; + + private bool canSetContentFieldSpecified; + + private bool canGetAllVersionsField; + + private bool canGetAllVersionsFieldSpecified; + + private bool canAddToFolderField; + + private bool canAddToFolderFieldSpecified; + + private bool canRemoveFromFolderField; + + private bool canRemoveFromFolderFieldSpecified; + + private bool canViewContentField; + + private bool canViewContentFieldSpecified; + + private bool canAddPolicyField; + + private bool canAddPolicyFieldSpecified; + + private bool canGetAppliedPoliciesField; + + private bool canGetAppliedPoliciesFieldSpecified; + + private bool canRemovePolicyField; + + private bool canRemovePolicyFieldSpecified; + + private bool canGetChildrenField; + + private bool canGetChildrenFieldSpecified; + + private bool canCreateDocumentField; + + private bool canCreateDocumentFieldSpecified; + + private bool canCreateFolderField; + + private bool canCreateFolderFieldSpecified; + + private bool canCreateRelationshipField; + + private bool canCreateRelationshipFieldSpecified; + + private bool canCreatePolicyField; + + private bool canCreatePolicyFieldSpecified; + + private bool canDeleteTreeField; + + private bool canDeleteTreeFieldSpecified; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string parentId { + get { + return this.parentIdField; + } + set { + this.parentIdField = value; + this.RaisePropertyChanged("parentId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string parentUrl { + get { + return this.parentUrlField; + } + set { + this.parentUrlField = value; + this.RaisePropertyChanged("parentUrl"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public bool canDelete { + get { + return this.canDeleteField; + } + set { + this.canDeleteField = value; + this.RaisePropertyChanged("canDelete"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteSpecified { + get { + return this.canDeleteFieldSpecified; + } + set { + this.canDeleteFieldSpecified = value; + this.RaisePropertyChanged("canDeleteSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public bool canUpdateProperties { + get { + return this.canUpdatePropertiesField; + } + set { + this.canUpdatePropertiesField = value; + this.RaisePropertyChanged("canUpdateProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canUpdatePropertiesSpecified { + get { + return this.canUpdatePropertiesFieldSpecified; + } + set { + this.canUpdatePropertiesFieldSpecified = value; + this.RaisePropertyChanged("canUpdatePropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public bool canGetProperties { + get { + return this.canGetPropertiesField; + } + set { + this.canGetPropertiesField = value; + this.RaisePropertyChanged("canGetProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetPropertiesSpecified { + get { + return this.canGetPropertiesFieldSpecified; + } + set { + this.canGetPropertiesFieldSpecified = value; + this.RaisePropertyChanged("canGetPropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public bool canGetRelationships { + get { + return this.canGetRelationshipsField; + } + set { + this.canGetRelationshipsField = value; + this.RaisePropertyChanged("canGetRelationships"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetRelationshipsSpecified { + get { + return this.canGetRelationshipsFieldSpecified; + } + set { + this.canGetRelationshipsFieldSpecified = value; + this.RaisePropertyChanged("canGetRelationshipsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public bool canGetParents { + get { + return this.canGetParentsField; + } + set { + this.canGetParentsField = value; + this.RaisePropertyChanged("canGetParents"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetParentsSpecified { + get { + return this.canGetParentsFieldSpecified; + } + set { + this.canGetParentsFieldSpecified = value; + this.RaisePropertyChanged("canGetParentsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public bool canGetFolderParent { + get { + return this.canGetFolderParentField; + } + set { + this.canGetFolderParentField = value; + this.RaisePropertyChanged("canGetFolderParent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetFolderParentSpecified { + get { + return this.canGetFolderParentFieldSpecified; + } + set { + this.canGetFolderParentFieldSpecified = value; + this.RaisePropertyChanged("canGetFolderParentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public bool canGetDescendants { + get { + return this.canGetDescendantsField; + } + set { + this.canGetDescendantsField = value; + this.RaisePropertyChanged("canGetDescendants"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetDescendantsSpecified { + get { + return this.canGetDescendantsFieldSpecified; + } + set { + this.canGetDescendantsFieldSpecified = value; + this.RaisePropertyChanged("canGetDescendantsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public bool canMove { + get { + return this.canMoveField; + } + set { + this.canMoveField = value; + this.RaisePropertyChanged("canMove"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canMoveSpecified { + get { + return this.canMoveFieldSpecified; + } + set { + this.canMoveFieldSpecified = value; + this.RaisePropertyChanged("canMoveSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public bool canDeleteVersion { + get { + return this.canDeleteVersionField; + } + set { + this.canDeleteVersionField = value; + this.RaisePropertyChanged("canDeleteVersion"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteVersionSpecified { + get { + return this.canDeleteVersionFieldSpecified; + } + set { + this.canDeleteVersionFieldSpecified = value; + this.RaisePropertyChanged("canDeleteVersionSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=11)] + public bool canDeleteContent { + get { + return this.canDeleteContentField; + } + set { + this.canDeleteContentField = value; + this.RaisePropertyChanged("canDeleteContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteContentSpecified { + get { + return this.canDeleteContentFieldSpecified; + } + set { + this.canDeleteContentFieldSpecified = value; + this.RaisePropertyChanged("canDeleteContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=12)] + public bool canCheckout { + get { + return this.canCheckoutField; + } + set { + this.canCheckoutField = value; + this.RaisePropertyChanged("canCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckoutSpecified { + get { + return this.canCheckoutFieldSpecified; + } + set { + this.canCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=13)] + public bool canCancelCheckout { + get { + return this.canCancelCheckoutField; + } + set { + this.canCancelCheckoutField = value; + this.RaisePropertyChanged("canCancelCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCancelCheckoutSpecified { + get { + return this.canCancelCheckoutFieldSpecified; + } + set { + this.canCancelCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCancelCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=14)] + public bool canCheckin { + get { + return this.canCheckinField; + } + set { + this.canCheckinField = value; + this.RaisePropertyChanged("canCheckin"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckinSpecified { + get { + return this.canCheckinFieldSpecified; + } + set { + this.canCheckinFieldSpecified = value; + this.RaisePropertyChanged("canCheckinSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=15)] + public bool canSetContent { + get { + return this.canSetContentField; + } + set { + this.canSetContentField = value; + this.RaisePropertyChanged("canSetContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canSetContentSpecified { + get { + return this.canSetContentFieldSpecified; + } + set { + this.canSetContentFieldSpecified = value; + this.RaisePropertyChanged("canSetContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=16)] + public bool canGetAllVersions { + get { + return this.canGetAllVersionsField; + } + set { + this.canGetAllVersionsField = value; + this.RaisePropertyChanged("canGetAllVersions"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAllVersionsSpecified { + get { + return this.canGetAllVersionsFieldSpecified; + } + set { + this.canGetAllVersionsFieldSpecified = value; + this.RaisePropertyChanged("canGetAllVersionsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=17)] + public bool canAddToFolder { + get { + return this.canAddToFolderField; + } + set { + this.canAddToFolderField = value; + this.RaisePropertyChanged("canAddToFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddToFolderSpecified { + get { + return this.canAddToFolderFieldSpecified; + } + set { + this.canAddToFolderFieldSpecified = value; + this.RaisePropertyChanged("canAddToFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=18)] + public bool canRemoveFromFolder { + get { + return this.canRemoveFromFolderField; + } + set { + this.canRemoveFromFolderField = value; + this.RaisePropertyChanged("canRemoveFromFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemoveFromFolderSpecified { + get { + return this.canRemoveFromFolderFieldSpecified; + } + set { + this.canRemoveFromFolderFieldSpecified = value; + this.RaisePropertyChanged("canRemoveFromFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=19)] + public bool canViewContent { + get { + return this.canViewContentField; + } + set { + this.canViewContentField = value; + this.RaisePropertyChanged("canViewContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canViewContentSpecified { + get { + return this.canViewContentFieldSpecified; + } + set { + this.canViewContentFieldSpecified = value; + this.RaisePropertyChanged("canViewContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=20)] + public bool canAddPolicy { + get { + return this.canAddPolicyField; + } + set { + this.canAddPolicyField = value; + this.RaisePropertyChanged("canAddPolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddPolicySpecified { + get { + return this.canAddPolicyFieldSpecified; + } + set { + this.canAddPolicyFieldSpecified = value; + this.RaisePropertyChanged("canAddPolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=21)] + public bool canGetAppliedPolicies { + get { + return this.canGetAppliedPoliciesField; + } + set { + this.canGetAppliedPoliciesField = value; + this.RaisePropertyChanged("canGetAppliedPolicies"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAppliedPoliciesSpecified { + get { + return this.canGetAppliedPoliciesFieldSpecified; + } + set { + this.canGetAppliedPoliciesFieldSpecified = value; + this.RaisePropertyChanged("canGetAppliedPoliciesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=22)] + public bool canRemovePolicy { + get { + return this.canRemovePolicyField; + } + set { + this.canRemovePolicyField = value; + this.RaisePropertyChanged("canRemovePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemovePolicySpecified { + get { + return this.canRemovePolicyFieldSpecified; + } + set { + this.canRemovePolicyFieldSpecified = value; + this.RaisePropertyChanged("canRemovePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=23)] + public bool canGetChildren { + get { + return this.canGetChildrenField; + } + set { + this.canGetChildrenField = value; + this.RaisePropertyChanged("canGetChildren"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetChildrenSpecified { + get { + return this.canGetChildrenFieldSpecified; + } + set { + this.canGetChildrenFieldSpecified = value; + this.RaisePropertyChanged("canGetChildrenSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=24)] + public bool canCreateDocument { + get { + return this.canCreateDocumentField; + } + set { + this.canCreateDocumentField = value; + this.RaisePropertyChanged("canCreateDocument"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateDocumentSpecified { + get { + return this.canCreateDocumentFieldSpecified; + } + set { + this.canCreateDocumentFieldSpecified = value; + this.RaisePropertyChanged("canCreateDocumentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=25)] + public bool canCreateFolder { + get { + return this.canCreateFolderField; + } + set { + this.canCreateFolderField = value; + this.RaisePropertyChanged("canCreateFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateFolderSpecified { + get { + return this.canCreateFolderFieldSpecified; + } + set { + this.canCreateFolderFieldSpecified = value; + this.RaisePropertyChanged("canCreateFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=26)] + public bool canCreateRelationship { + get { + return this.canCreateRelationshipField; + } + set { + this.canCreateRelationshipField = value; + this.RaisePropertyChanged("canCreateRelationship"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateRelationshipSpecified { + get { + return this.canCreateRelationshipFieldSpecified; + } + set { + this.canCreateRelationshipFieldSpecified = value; + this.RaisePropertyChanged("canCreateRelationshipSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=27)] + public bool canCreatePolicy { + get { + return this.canCreatePolicyField; + } + set { + this.canCreatePolicyField = value; + this.RaisePropertyChanged("canCreatePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreatePolicySpecified { + get { + return this.canCreatePolicyFieldSpecified; + } + set { + this.canCreatePolicyFieldSpecified = value; + this.RaisePropertyChanged("canCreatePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=28)] + public bool canDeleteTree { + get { + return this.canDeleteTreeField; + } + set { + this.canDeleteTreeField = value; + this.RaisePropertyChanged("canDeleteTree"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteTreeSpecified { + get { + return this.canDeleteTreeFieldSpecified; + } + set { + this.canDeleteTreeFieldSpecified = value; + this.RaisePropertyChanged("canDeleteTreeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=29)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyBoolean))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyInteger))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyHtml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDateTime))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyString))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyXml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDecimal))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyId))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyUri))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisProperty : object, System.ComponentModel.INotifyPropertyChanged { + + private string nameField; + + private string indexField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public string name { + get { + return this.nameField; + } + set { + this.nameField = value; + this.RaisePropertyChanged("name"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="integer")] + public string index { + get { + return this.indexField; + } + set { + this.indexField = value; + this.RaisePropertyChanged("index"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyBoolean : cmisProperty { + + private bool valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyInteger : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyHtml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDateTime : cmisProperty { + + private System.DateTime valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public System.DateTime value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyString : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyXml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDecimal : cmisProperty { + + private decimal valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public decimal value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyId : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private string hrefField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="anyURI")] + public string href { + get { + return this.hrefField; + } + set { + this.hrefField = value; + this.RaisePropertyChanged("href"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyUri : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertiesType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisProperty[] itemsField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute("propertyBoolean", typeof(cmisPropertyBoolean), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDateTime", typeof(cmisPropertyDateTime), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDecimal", typeof(cmisPropertyDecimal), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyHtml", typeof(cmisPropertyHtml), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyId", typeof(cmisPropertyId), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyInteger", typeof(cmisPropertyInteger), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyString", typeof(cmisPropertyString), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyUri", typeof(cmisPropertyUri), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyXml", typeof(cmisPropertyXml), IsNullable=true, Order=0)] + public cmisProperty[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=1)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisObjectType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisPropertiesType propertiesField; + + private cmisAllowableActionsType allowableActionsField; + + private cmisObjectType[] relationshipField; + + private cmisObjectType[] childField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public cmisPropertiesType properties { + get { + return this.propertiesField; + } + set { + this.propertiesField = value; + this.RaisePropertyChanged("properties"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public cmisAllowableActionsType allowableActions { + get { + return this.allowableActionsField; + } + set { + this.allowableActionsField = value; + this.RaisePropertyChanged("allowableActions"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("relationship", IsNullable=true, Order=2)] + public cmisObjectType[] relationship { + get { + return this.relationshipField; + } + set { + this.relationshipField = value; + this.RaisePropertyChanged("relationship"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("child", IsNullable=true, Order=3)] + public cmisObjectType[] child { + get { + return this.childField; + } + set { + this.childField = value; + this.RaisePropertyChanged("child"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=4)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisTypePolicyDefinitionType : cmisTypeDefinitionType { + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisTypeRelationshipDefinitionType : cmisTypeDefinitionType { + + private string[] allowedSourceTypesField; + + private string[] allowedTargetTypesField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute("allowedSourceTypes", IsNullable=true, Order=0)] + public string[] allowedSourceTypes { + get { + return this.allowedSourceTypesField; + } + set { + this.allowedSourceTypesField = value; + this.RaisePropertyChanged("allowedSourceTypes"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("allowedTargetTypes", IsNullable=true, Order=1)] + public string[] allowedTargetTypes { + get { + return this.allowedTargetTypesField; + } + set { + this.allowedTargetTypesField = value; + this.RaisePropertyChanged("allowedTargetTypes"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisTypeFolderDefinitionType : cmisTypeDefinitionType { + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getTypeDefinition", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getTypeDefinition { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string typeId; + + public getTypeDefinition() { + } + + public getTypeDefinition(string repositoryId, string typeId) { + this.repositoryId = repositoryId; + this.typeId = typeId; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getTypeDefinitionResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getTypeDefinitionResponse { + + //[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.ServiceModel.MessageProperty(Name="Item")] + [System.Xml.Serialization.XmlChoiceIdentifierAttribute(MemberName="Item")] + [System.Xml.Serialization.XmlElementAttribute("documentType", typeof(cmisTypeDocumentDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("folderType", typeof(cmisTypeFolderDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("policyType", typeof(cmisTypePolicyDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("relationshipType", typeof(cmisTypeRelationshipDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("type", typeof(cmisTypeDefinitionType), IsNullable=true)] + public object Item; + + public getTypeDefinitionResponse() { + } + + public getTypeDefinitionResponse(object Item) { + this.Item = Item; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getRepositoryInfo", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getRepositoryInfo { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + public getRepositoryInfo() { + } + + public getRepositoryInfo(string repositoryId) { + this.repositoryId = repositoryId; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getRepositoryInfoResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getRepositoryInfoResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string repositoryName; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public string repositoryRelationship; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + public string repositoryDescription; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public string vendorName; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=5)] + public string productName; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=6)] + public string productVersion; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=7)] + public string rootFolderId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=8)] + public WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType capabilities; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=9)] + public string cmisVersionsSupported; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=10)] + public WcfTestClient.RepositoryService.cmisAnyXml repositorySpecificInformation; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="", Order=11)] + [System.Xml.Serialization.XmlAnyElementAttribute()] + public System.Xml.XmlElement[] Any; + + public getRepositoryInfoResponse() { + } + + public getRepositoryInfoResponse(string repositoryId, string repositoryName, string repositoryRelationship, string repositoryDescription, string vendorName, string productName, string productVersion, string rootFolderId, WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType capabilities, string cmisVersionsSupported, WcfTestClient.RepositoryService.cmisAnyXml repositorySpecificInformation, System.Xml.XmlElement[] Any) { + this.repositoryId = repositoryId; + this.repositoryName = repositoryName; + this.repositoryRelationship = repositoryRelationship; + this.repositoryDescription = repositoryDescription; + this.vendorName = vendorName; + this.productName = productName; + this.productVersion = productVersion; + this.rootFolderId = rootFolderId; + this.capabilities = capabilities; + this.cmisVersionsSupported = cmisVersionsSupported; + this.repositorySpecificInformation = repositorySpecificInformation; + this.Any = Any; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getRepositories", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getRepositories { + + public getRepositories() { + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getRepositoriesResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getRepositoriesResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("repository", IsNullable=true)] + public cmisRepositoryEntryType[] repository; + + public getRepositoriesResponse() { + } + + public getRepositoriesResponse(cmisRepositoryEntryType[] repository) { + this.repository = repository; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getTypes", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getTypes { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string typeId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public bool returnPropertyDefinitions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string maxItems; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + [System.Xml.Serialization.XmlElementAttribute(DataType="integer")] + public string skipCount; + + public getTypes() { + } + + public getTypes(string repositoryId, string typeId, bool returnPropertyDefinitions, string maxItems, string skipCount) { + this.repositoryId = repositoryId; + this.typeId = typeId; + this.returnPropertyDefinitions = returnPropertyDefinitions; + this.maxItems = maxItems; + this.skipCount = skipCount; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getTypesResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getTypesResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("documentType", typeof(cmisTypeDocumentDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("folderType", typeof(cmisTypeFolderDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("policyType", typeof(cmisTypePolicyDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("relationshipType", typeof(cmisTypeRelationshipDefinitionType), IsNullable=true)] + [System.Xml.Serialization.XmlElementAttribute("type", typeof(cmisTypeDefinitionType), IsNullable=true)] + public cmisTypeDefinitionType[] Items; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public bool hasMoreItems; + + public getTypesResponse() { + } + + public getTypesResponse(cmisTypeDefinitionType[] Items, bool hasMoreItems) { + this.Items = Items; + this.hasMoreItems = hasMoreItems; + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public interface RepositoryServicePortChannel : WcfTestClient.RepositoryService.RepositoryServicePort, System.ServiceModel.IClientChannel { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public partial class RepositoryServicePortClient : System.ServiceModel.ClientBase, WcfTestClient.RepositoryService.RepositoryServicePort { + + public RepositoryServicePortClient() { + } + + public RepositoryServicePortClient(string endpointConfigurationName) : + base(endpointConfigurationName) { + } + + public RepositoryServicePortClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public RepositoryServicePortClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public RepositoryServicePortClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.RepositoryService.getTypeDefinitionResponse WcfTestClient.RepositoryService.RepositoryServicePort.getTypeDefinition(WcfTestClient.RepositoryService.getTypeDefinition request) { + return base.Channel.getTypeDefinition(request); + } + + public object getTypeDefinition(string repositoryId, string typeId) { + WcfTestClient.RepositoryService.getTypeDefinition inValue = new WcfTestClient.RepositoryService.getTypeDefinition(); + inValue.repositoryId = repositoryId; + inValue.typeId = typeId; + WcfTestClient.RepositoryService.getTypeDefinitionResponse retVal = ((WcfTestClient.RepositoryService.RepositoryServicePort)(this)).getTypeDefinition(inValue); + return retVal.Item; + } + + public WcfTestClient.RepositoryService.getTypeDefinitionResponse getTypeDefinitionWrapper(string repositoryId, string typeId) + { + WcfTestClient.RepositoryService.getTypeDefinition inValue = new WcfTestClient.RepositoryService.getTypeDefinition(); + inValue.repositoryId = repositoryId; + inValue.typeId = typeId; + WcfTestClient.RepositoryService.getTypeDefinitionResponse retVal = ((WcfTestClient.RepositoryService.RepositoryServicePort)(this)).getTypeDefinition(inValue); + return retVal; + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.RepositoryService.getRepositoryInfoResponse WcfTestClient.RepositoryService.RepositoryServicePort.getRepositoryInfo(WcfTestClient.RepositoryService.getRepositoryInfo request) { + return base.Channel.getRepositoryInfo(request); + } + + public string getRepositoryInfo(ref string repositoryId, out string repositoryRelationship, out string repositoryDescription, out string vendorName, out string productName, out string productVersion, out string rootFolderId, out WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType capabilities, out string cmisVersionsSupported, out WcfTestClient.RepositoryService.cmisAnyXml repositorySpecificInformation, out System.Xml.XmlElement[] Any) { + WcfTestClient.RepositoryService.getRepositoryInfo inValue = new WcfTestClient.RepositoryService.getRepositoryInfo(); + inValue.repositoryId = repositoryId; + WcfTestClient.RepositoryService.getRepositoryInfoResponse retVal = ((WcfTestClient.RepositoryService.RepositoryServicePort)(this)).getRepositoryInfo(inValue); + repositoryId = retVal.repositoryId; + repositoryRelationship = retVal.repositoryRelationship; + repositoryDescription = retVal.repositoryDescription; + vendorName = retVal.vendorName; + productName = retVal.productName; + productVersion = retVal.productVersion; + rootFolderId = retVal.rootFolderId; + capabilities = retVal.capabilities; + cmisVersionsSupported = retVal.cmisVersionsSupported; + repositorySpecificInformation = retVal.repositorySpecificInformation; + Any = retVal.Any; + return retVal.repositoryName; + } + + public WcfTestClient.RepositoryService.getRepositoryInfoResponse getRepositoryInfoWrapper(string repositoryId) + { + + WcfTestClient.RepositoryService.getRepositoryInfo inValue = new WcfTestClient.RepositoryService.getRepositoryInfo(); + inValue.repositoryId = repositoryId; + WcfTestClient.RepositoryService.getRepositoryInfoResponse retVal = ((WcfTestClient.RepositoryService.RepositoryServicePort)(this)).getRepositoryInfo(inValue); + + return retVal; + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.RepositoryService.getRepositoriesResponse WcfTestClient.RepositoryService.RepositoryServicePort.getRepositories(WcfTestClient.RepositoryService.getRepositories request) { + return base.Channel.getRepositories(request); + } + + public cmisRepositoryEntryType[] getRepositories() { + WcfTestClient.RepositoryService.getRepositories inValue = new WcfTestClient.RepositoryService.getRepositories(); + WcfTestClient.RepositoryService.getRepositoriesResponse retVal = ((WcfTestClient.RepositoryService.RepositoryServicePort)(this)).getRepositories(inValue); + return retVal.repository; + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.RepositoryService.getTypesResponse WcfTestClient.RepositoryService.RepositoryServicePort.getTypes(WcfTestClient.RepositoryService.getTypes request) { + return base.Channel.getTypes(request); + } + + public cmisTypeDefinitionType[] getTypes(string repositoryId, string typeId, bool returnPropertyDefinitions, string maxItems, string skipCount, out bool hasMoreItems) { + WcfTestClient.RepositoryService.getTypes inValue = new WcfTestClient.RepositoryService.getTypes(); + inValue.repositoryId = repositoryId; + inValue.typeId = typeId; + inValue.returnPropertyDefinitions = returnPropertyDefinitions; + inValue.maxItems = maxItems; + inValue.skipCount = skipCount; + WcfTestClient.RepositoryService.getTypesResponse retVal = ((WcfTestClient.RepositoryService.RepositoryServicePort)(this)).getTypes(inValue); + hasMoreItems = retVal.hasMoreItems; + return retVal.Items; + } + } +} diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.svcmap b/source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.svcmap new file mode 100644 index 0000000000..af56a365f7 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/Reference.svcmap @@ -0,0 +1,30 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryService.wsdl b/source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryService.wsdl new file mode 100644 index 0000000000..652c7a62ab --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryService.wsdl @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryServicePort.wsdl b/source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryServicePort.wsdl new file mode 100644 index 0000000000..447571d140 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/RepositoryServicePort.wsdl @@ -0,0 +1,1491 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisAnyXml.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisAnyXml.datasource new file mode 100644 index 0000000000..d1b9f503c0 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisAnyXml.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.RepositoryService.cmisAnyXml + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryCapabilitiesType.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryCapabilitiesType.datasource new file mode 100644 index 0000000000..016c56f04f --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryCapabilitiesType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.RepositoryService.cmisRepositoryCapabilitiesType + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryEntryType.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryEntryType.datasource new file mode 100644 index 0000000000..025c98fe05 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisRepositoryEntryType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.RepositoryService.cmisRepositoryEntryType + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisTypeDefinitionType.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisTypeDefinitionType.datasource new file mode 100644 index 0000000000..594f5ff418 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfCmisWSTests.RepositoryService.cmisTypeDefinitionType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.RepositoryService.cmisTypeDefinitionType + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisAnyXml.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisAnyXml.datasource new file mode 100644 index 0000000000..359aedbaf4 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisAnyXml.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.RepositoryService.cmisAnyXml + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType.datasource new file mode 100644 index 0000000000..764828c78a --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.RepositoryService.cmisRepositoryCapabilitiesType + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryEntryType.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryEntryType.datasource new file mode 100644 index 0000000000..9d46dac3b9 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisRepositoryEntryType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.RepositoryService.cmisRepositoryEntryType + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisTypeDefinitionType.datasource b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisTypeDefinitionType.datasource new file mode 100644 index 0000000000..b69a3ec272 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/WcfTestClient.RepositoryService.cmisTypeDefinitionType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.RepositoryService.cmisTypeDefinitionType + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/configuration.svcinfo b/source/test/dotnet/CmisWS/Service References/RepositoryService/configuration.svcinfo new file mode 100644 index 0000000000..896e51fc12 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/configuration.svcinfo @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/RepositoryService/configuration91.svcinfo b/source/test/dotnet/CmisWS/Service References/RepositoryService/configuration91.svcinfo new file mode 100644 index 0000000000..a383dbfed8 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/RepositoryService/configuration91.svcinfo @@ -0,0 +1,280 @@ + + + + + + + RepositoryServiceSoapBinding + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + Transport + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + RepositoryServiceSoapBinding1 + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + + + https://localhost:8443/alfresco/cmis/RepositoryService + + + + + + basicHttpBinding + + + RepositoryServiceSoapBinding + + + RepositoryService.RepositoryServicePort + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + RepositoryServicePort + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/Reference.cs b/source/test/dotnet/CmisWS/Service References/VersioningService/Reference.cs new file mode 100644 index 0000000000..167edb42a9 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/Reference.cs @@ -0,0 +1,2186 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WcfTestClient.VersioningService { + using System.Runtime.Serialization; + using System; + + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="cmisFaultType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.operationNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.permissionDeniedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.notInFolderExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.storageExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.offsetExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.constraintViolationExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.versioningExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.filterNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.typeNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.updateConflictExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.folderNotValidExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.objectNotFoundExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.streamNotSupportedExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.runtimeExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.contentAlreadyExistsExceptionType))] + [System.Runtime.Serialization.KnownTypeAttribute(typeof(WcfTestClient.VersioningService.invalidArgumentExceptionType))] + public partial class cmisFaultType : object, System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged { + + [System.NonSerializedAttribute()] + private System.Runtime.Serialization.ExtensionDataObject extensionDataField; + + private long errorCodeField; + + private string errorMessageField; + + [global::System.ComponentModel.BrowsableAttribute(false)] + public System.Runtime.Serialization.ExtensionDataObject ExtensionData { + get { + return this.extensionDataField; + } + set { + this.extensionDataField = value; + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true)] + public long errorCode { + get { + return this.errorCodeField; + } + set { + if ((this.errorCodeField.Equals(value) != true)) { + this.errorCodeField = value; + this.RaisePropertyChanged("errorCode"); + } + } + } + + [System.Runtime.Serialization.DataMemberAttribute(IsRequired=true, EmitDefaultValue=false)] + public string errorMessage { + get { + return this.errorMessageField; + } + set { + if ((object.ReferenceEquals(this.errorMessageField, value) != true)) { + this.errorMessageField = value; + this.RaisePropertyChanged("errorMessage"); + } + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="operationNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class operationNotSupportedExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="permissionDeniedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class permissionDeniedExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="notInFolderExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class notInFolderExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="storageExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class storageExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="offsetExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class offsetExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="constraintViolationExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class constraintViolationExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="versioningExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class versioningExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="filterNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class filterNotValidExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="typeNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class typeNotFoundExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="updateConflictExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class updateConflictExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="folderNotValidExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class folderNotValidExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="objectNotFoundExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class objectNotFoundExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="streamNotSupportedExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class streamNotSupportedExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="runtimeExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class runtimeExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="contentAlreadyExistsExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class contentAlreadyExistsExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")] + [System.Runtime.Serialization.DataContractAttribute(Name="invalidArgumentExceptionType", Namespace="http://www.cmis.org/2008/05")] + [System.SerializableAttribute()] + public partial class invalidArgumentExceptionType : WcfTestClient.VersioningService.cmisFaultType { + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cmis.org/2008/05", ConfigurationName="VersioningService.VersioningServicePort")] + public interface VersioningServicePort { + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + void checkOut(string repositoryId, ref string documentId, out bool contentCopied); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.storageExceptionType), Action="", Name="storageException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.streamNotSupportedExceptionType), Action="", Name="streamNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void checkIn(string repositoryId, ref string documentId, bool major, WcfTestClient.VersioningService.cmisPropertiesType properties, WcfTestClient.VersioningService.cmisContentStreamType contentStream, string checkinComment); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void cancelCheckOut(string repositoryId, string documentId); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.VersioningService.cmisObjectType getPropertiesOfLatestVersion(string repositoryId, string versionSeriesId, bool majorVersion, string filter); + + // CODEGEN: Parameter 'object' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'. + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.filterNotValidExceptionType), Action="", Name="filterNotValidException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + [return: System.ServiceModel.MessageParameterAttribute(Name="object")] + WcfTestClient.VersioningService.getAllVersionsResponse getAllVersions(WcfTestClient.VersioningService.getAllVersions request); + + [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.invalidArgumentExceptionType), Action="", Name="invalidArgumentException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.constraintViolationExceptionType), Action="", Name="constraintViolationException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.runtimeExceptionType), Action="", Name="runtimeException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.updateConflictExceptionType), Action="", Name="updateConflictException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.objectNotFoundExceptionType), Action="", Name="objectNotFoundException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.operationNotSupportedExceptionType), Action="", Name="operationNotSupportedException")] + [System.ServiceModel.FaultContractAttribute(typeof(WcfTestClient.VersioningService.permissionDeniedExceptionType), Action="", Name="permissionDeniedException")] + [System.ServiceModel.XmlSerializerFormatAttribute()] + [System.ServiceModel.ServiceKnownTypeAttribute(typeof(cmisProperty))] + void deleteAllVersions(string repositoryId, string versionSeriesId); + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertiesType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisProperty[] itemsField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute("propertyBoolean", typeof(cmisPropertyBoolean), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDateTime", typeof(cmisPropertyDateTime), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyDecimal", typeof(cmisPropertyDecimal), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyHtml", typeof(cmisPropertyHtml), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyId", typeof(cmisPropertyId), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyInteger", typeof(cmisPropertyInteger), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyString", typeof(cmisPropertyString), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyUri", typeof(cmisPropertyUri), IsNullable=true, Order=0)] + [System.Xml.Serialization.XmlElementAttribute("propertyXml", typeof(cmisPropertyXml), IsNullable=true, Order=0)] + public cmisProperty[] Items { + get { + return this.itemsField; + } + set { + this.itemsField = value; + this.RaisePropertyChanged("Items"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=1)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyBoolean : cmisProperty { + + private bool valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public bool value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public enum enumPropertyType { + + /// + boolean, + + /// + id, + + /// + integer, + + /// + datetime, + + /// + @decimal, + + /// + html, + + /// + @string, + + /// + uri, + + /// + xml, + } + + /// + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyBoolean))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyInteger))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyHtml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDateTime))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyString))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyXml))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyDecimal))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyId))] + [System.Xml.Serialization.XmlIncludeAttribute(typeof(cmisPropertyUri))] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisProperty : object, System.ComponentModel.INotifyPropertyChanged { + + private string nameField; + + private string indexField; + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public string name { + get { + return this.nameField; + } + set { + this.nameField = value; + this.RaisePropertyChanged("name"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="integer")] + public string index { + get { + return this.indexField; + } + set { + this.indexField = value; + this.RaisePropertyChanged("index"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisAllowableActionsType : object, System.ComponentModel.INotifyPropertyChanged { + + private string parentIdField; + + private string parentUrlField; + + private bool canDeleteField; + + private bool canDeleteFieldSpecified; + + private bool canUpdatePropertiesField; + + private bool canUpdatePropertiesFieldSpecified; + + private bool canGetPropertiesField; + + private bool canGetPropertiesFieldSpecified; + + private bool canGetRelationshipsField; + + private bool canGetRelationshipsFieldSpecified; + + private bool canGetParentsField; + + private bool canGetParentsFieldSpecified; + + private bool canGetFolderParentField; + + private bool canGetFolderParentFieldSpecified; + + private bool canGetDescendantsField; + + private bool canGetDescendantsFieldSpecified; + + private bool canMoveField; + + private bool canMoveFieldSpecified; + + private bool canDeleteVersionField; + + private bool canDeleteVersionFieldSpecified; + + private bool canDeleteContentField; + + private bool canDeleteContentFieldSpecified; + + private bool canCheckoutField; + + private bool canCheckoutFieldSpecified; + + private bool canCancelCheckoutField; + + private bool canCancelCheckoutFieldSpecified; + + private bool canCheckinField; + + private bool canCheckinFieldSpecified; + + private bool canSetContentField; + + private bool canSetContentFieldSpecified; + + private bool canGetAllVersionsField; + + private bool canGetAllVersionsFieldSpecified; + + private bool canAddToFolderField; + + private bool canAddToFolderFieldSpecified; + + private bool canRemoveFromFolderField; + + private bool canRemoveFromFolderFieldSpecified; + + private bool canViewContentField; + + private bool canViewContentFieldSpecified; + + private bool canAddPolicyField; + + private bool canAddPolicyFieldSpecified; + + private bool canGetAppliedPoliciesField; + + private bool canGetAppliedPoliciesFieldSpecified; + + private bool canRemovePolicyField; + + private bool canRemovePolicyFieldSpecified; + + private bool canGetChildrenField; + + private bool canGetChildrenFieldSpecified; + + private bool canCreateDocumentField; + + private bool canCreateDocumentFieldSpecified; + + private bool canCreateFolderField; + + private bool canCreateFolderFieldSpecified; + + private bool canCreateRelationshipField; + + private bool canCreateRelationshipFieldSpecified; + + private bool canCreatePolicyField; + + private bool canCreatePolicyFieldSpecified; + + private bool canDeleteTreeField; + + private bool canDeleteTreeFieldSpecified; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string parentId { + get { + return this.parentIdField; + } + set { + this.parentIdField = value; + this.RaisePropertyChanged("parentId"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string parentUrl { + get { + return this.parentUrlField; + } + set { + this.parentUrlField = value; + this.RaisePropertyChanged("parentUrl"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public bool canDelete { + get { + return this.canDeleteField; + } + set { + this.canDeleteField = value; + this.RaisePropertyChanged("canDelete"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteSpecified { + get { + return this.canDeleteFieldSpecified; + } + set { + this.canDeleteFieldSpecified = value; + this.RaisePropertyChanged("canDeleteSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=3)] + public bool canUpdateProperties { + get { + return this.canUpdatePropertiesField; + } + set { + this.canUpdatePropertiesField = value; + this.RaisePropertyChanged("canUpdateProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canUpdatePropertiesSpecified { + get { + return this.canUpdatePropertiesFieldSpecified; + } + set { + this.canUpdatePropertiesFieldSpecified = value; + this.RaisePropertyChanged("canUpdatePropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=4)] + public bool canGetProperties { + get { + return this.canGetPropertiesField; + } + set { + this.canGetPropertiesField = value; + this.RaisePropertyChanged("canGetProperties"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetPropertiesSpecified { + get { + return this.canGetPropertiesFieldSpecified; + } + set { + this.canGetPropertiesFieldSpecified = value; + this.RaisePropertyChanged("canGetPropertiesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=5)] + public bool canGetRelationships { + get { + return this.canGetRelationshipsField; + } + set { + this.canGetRelationshipsField = value; + this.RaisePropertyChanged("canGetRelationships"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetRelationshipsSpecified { + get { + return this.canGetRelationshipsFieldSpecified; + } + set { + this.canGetRelationshipsFieldSpecified = value; + this.RaisePropertyChanged("canGetRelationshipsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=6)] + public bool canGetParents { + get { + return this.canGetParentsField; + } + set { + this.canGetParentsField = value; + this.RaisePropertyChanged("canGetParents"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetParentsSpecified { + get { + return this.canGetParentsFieldSpecified; + } + set { + this.canGetParentsFieldSpecified = value; + this.RaisePropertyChanged("canGetParentsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=7)] + public bool canGetFolderParent { + get { + return this.canGetFolderParentField; + } + set { + this.canGetFolderParentField = value; + this.RaisePropertyChanged("canGetFolderParent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetFolderParentSpecified { + get { + return this.canGetFolderParentFieldSpecified; + } + set { + this.canGetFolderParentFieldSpecified = value; + this.RaisePropertyChanged("canGetFolderParentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=8)] + public bool canGetDescendants { + get { + return this.canGetDescendantsField; + } + set { + this.canGetDescendantsField = value; + this.RaisePropertyChanged("canGetDescendants"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetDescendantsSpecified { + get { + return this.canGetDescendantsFieldSpecified; + } + set { + this.canGetDescendantsFieldSpecified = value; + this.RaisePropertyChanged("canGetDescendantsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=9)] + public bool canMove { + get { + return this.canMoveField; + } + set { + this.canMoveField = value; + this.RaisePropertyChanged("canMove"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canMoveSpecified { + get { + return this.canMoveFieldSpecified; + } + set { + this.canMoveFieldSpecified = value; + this.RaisePropertyChanged("canMoveSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=10)] + public bool canDeleteVersion { + get { + return this.canDeleteVersionField; + } + set { + this.canDeleteVersionField = value; + this.RaisePropertyChanged("canDeleteVersion"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteVersionSpecified { + get { + return this.canDeleteVersionFieldSpecified; + } + set { + this.canDeleteVersionFieldSpecified = value; + this.RaisePropertyChanged("canDeleteVersionSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=11)] + public bool canDeleteContent { + get { + return this.canDeleteContentField; + } + set { + this.canDeleteContentField = value; + this.RaisePropertyChanged("canDeleteContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteContentSpecified { + get { + return this.canDeleteContentFieldSpecified; + } + set { + this.canDeleteContentFieldSpecified = value; + this.RaisePropertyChanged("canDeleteContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=12)] + public bool canCheckout { + get { + return this.canCheckoutField; + } + set { + this.canCheckoutField = value; + this.RaisePropertyChanged("canCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckoutSpecified { + get { + return this.canCheckoutFieldSpecified; + } + set { + this.canCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=13)] + public bool canCancelCheckout { + get { + return this.canCancelCheckoutField; + } + set { + this.canCancelCheckoutField = value; + this.RaisePropertyChanged("canCancelCheckout"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCancelCheckoutSpecified { + get { + return this.canCancelCheckoutFieldSpecified; + } + set { + this.canCancelCheckoutFieldSpecified = value; + this.RaisePropertyChanged("canCancelCheckoutSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=14)] + public bool canCheckin { + get { + return this.canCheckinField; + } + set { + this.canCheckinField = value; + this.RaisePropertyChanged("canCheckin"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCheckinSpecified { + get { + return this.canCheckinFieldSpecified; + } + set { + this.canCheckinFieldSpecified = value; + this.RaisePropertyChanged("canCheckinSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=15)] + public bool canSetContent { + get { + return this.canSetContentField; + } + set { + this.canSetContentField = value; + this.RaisePropertyChanged("canSetContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canSetContentSpecified { + get { + return this.canSetContentFieldSpecified; + } + set { + this.canSetContentFieldSpecified = value; + this.RaisePropertyChanged("canSetContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=16)] + public bool canGetAllVersions { + get { + return this.canGetAllVersionsField; + } + set { + this.canGetAllVersionsField = value; + this.RaisePropertyChanged("canGetAllVersions"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAllVersionsSpecified { + get { + return this.canGetAllVersionsFieldSpecified; + } + set { + this.canGetAllVersionsFieldSpecified = value; + this.RaisePropertyChanged("canGetAllVersionsSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=17)] + public bool canAddToFolder { + get { + return this.canAddToFolderField; + } + set { + this.canAddToFolderField = value; + this.RaisePropertyChanged("canAddToFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddToFolderSpecified { + get { + return this.canAddToFolderFieldSpecified; + } + set { + this.canAddToFolderFieldSpecified = value; + this.RaisePropertyChanged("canAddToFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=18)] + public bool canRemoveFromFolder { + get { + return this.canRemoveFromFolderField; + } + set { + this.canRemoveFromFolderField = value; + this.RaisePropertyChanged("canRemoveFromFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemoveFromFolderSpecified { + get { + return this.canRemoveFromFolderFieldSpecified; + } + set { + this.canRemoveFromFolderFieldSpecified = value; + this.RaisePropertyChanged("canRemoveFromFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=19)] + public bool canViewContent { + get { + return this.canViewContentField; + } + set { + this.canViewContentField = value; + this.RaisePropertyChanged("canViewContent"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canViewContentSpecified { + get { + return this.canViewContentFieldSpecified; + } + set { + this.canViewContentFieldSpecified = value; + this.RaisePropertyChanged("canViewContentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=20)] + public bool canAddPolicy { + get { + return this.canAddPolicyField; + } + set { + this.canAddPolicyField = value; + this.RaisePropertyChanged("canAddPolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canAddPolicySpecified { + get { + return this.canAddPolicyFieldSpecified; + } + set { + this.canAddPolicyFieldSpecified = value; + this.RaisePropertyChanged("canAddPolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=21)] + public bool canGetAppliedPolicies { + get { + return this.canGetAppliedPoliciesField; + } + set { + this.canGetAppliedPoliciesField = value; + this.RaisePropertyChanged("canGetAppliedPolicies"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetAppliedPoliciesSpecified { + get { + return this.canGetAppliedPoliciesFieldSpecified; + } + set { + this.canGetAppliedPoliciesFieldSpecified = value; + this.RaisePropertyChanged("canGetAppliedPoliciesSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=22)] + public bool canRemovePolicy { + get { + return this.canRemovePolicyField; + } + set { + this.canRemovePolicyField = value; + this.RaisePropertyChanged("canRemovePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canRemovePolicySpecified { + get { + return this.canRemovePolicyFieldSpecified; + } + set { + this.canRemovePolicyFieldSpecified = value; + this.RaisePropertyChanged("canRemovePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=23)] + public bool canGetChildren { + get { + return this.canGetChildrenField; + } + set { + this.canGetChildrenField = value; + this.RaisePropertyChanged("canGetChildren"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canGetChildrenSpecified { + get { + return this.canGetChildrenFieldSpecified; + } + set { + this.canGetChildrenFieldSpecified = value; + this.RaisePropertyChanged("canGetChildrenSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=24)] + public bool canCreateDocument { + get { + return this.canCreateDocumentField; + } + set { + this.canCreateDocumentField = value; + this.RaisePropertyChanged("canCreateDocument"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateDocumentSpecified { + get { + return this.canCreateDocumentFieldSpecified; + } + set { + this.canCreateDocumentFieldSpecified = value; + this.RaisePropertyChanged("canCreateDocumentSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=25)] + public bool canCreateFolder { + get { + return this.canCreateFolderField; + } + set { + this.canCreateFolderField = value; + this.RaisePropertyChanged("canCreateFolder"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateFolderSpecified { + get { + return this.canCreateFolderFieldSpecified; + } + set { + this.canCreateFolderFieldSpecified = value; + this.RaisePropertyChanged("canCreateFolderSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=26)] + public bool canCreateRelationship { + get { + return this.canCreateRelationshipField; + } + set { + this.canCreateRelationshipField = value; + this.RaisePropertyChanged("canCreateRelationship"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreateRelationshipSpecified { + get { + return this.canCreateRelationshipFieldSpecified; + } + set { + this.canCreateRelationshipFieldSpecified = value; + this.RaisePropertyChanged("canCreateRelationshipSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=27)] + public bool canCreatePolicy { + get { + return this.canCreatePolicyField; + } + set { + this.canCreatePolicyField = value; + this.RaisePropertyChanged("canCreatePolicy"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canCreatePolicySpecified { + get { + return this.canCreatePolicyFieldSpecified; + } + set { + this.canCreatePolicyFieldSpecified = value; + this.RaisePropertyChanged("canCreatePolicySpecified"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=28)] + public bool canDeleteTree { + get { + return this.canDeleteTreeField; + } + set { + this.canDeleteTreeField = value; + this.RaisePropertyChanged("canDeleteTree"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool canDeleteTreeSpecified { + get { + return this.canDeleteTreeFieldSpecified; + } + set { + this.canDeleteTreeFieldSpecified = value; + this.RaisePropertyChanged("canDeleteTreeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=29)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisObjectType : object, System.ComponentModel.INotifyPropertyChanged { + + private cmisPropertiesType propertiesField; + + private cmisAllowableActionsType allowableActionsField; + + private cmisObjectType[] relationshipField; + + private cmisObjectType[] childField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public cmisPropertiesType properties { + get { + return this.propertiesField; + } + set { + this.propertiesField = value; + this.RaisePropertyChanged("properties"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public cmisAllowableActionsType allowableActions { + get { + return this.allowableActionsField; + } + set { + this.allowableActionsField = value; + this.RaisePropertyChanged("allowableActions"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("relationship", IsNullable=true, Order=2)] + public cmisObjectType[] relationship { + get { + return this.relationshipField; + } + set { + this.relationshipField = value; + this.RaisePropertyChanged("relationship"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute("child", IsNullable=true, Order=3)] + public cmisObjectType[] child { + get { + return this.childField; + } + set { + this.childField = value; + this.RaisePropertyChanged("child"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=4)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisContentStreamType : object, System.ComponentModel.INotifyPropertyChanged { + + private string lengthField; + + private string mimeTypeField; + + private string filenameField; + + private string uriField; + + private byte[] streamField; + + private System.Xml.XmlElement[] anyField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string length { + get { + return this.lengthField; + } + set { + this.lengthField = value; + this.RaisePropertyChanged("length"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=1)] + public string mimeType { + get { + return this.mimeTypeField; + } + set { + this.mimeTypeField = value; + this.RaisePropertyChanged("mimeType"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=2)] + public string filename { + get { + return this.filenameField; + } + set { + this.filenameField = value; + this.RaisePropertyChanged("filename"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=3)] + public string uri { + get { + return this.uriField; + } + set { + this.uriField = value; + this.RaisePropertyChanged("uri"); + } + } + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary", Order=4)] + public byte[] stream { + get { + return this.streamField; + } + set { + this.streamField = value; + this.RaisePropertyChanged("stream"); + } + } + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=5)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; + + protected void RaisePropertyChanged(string propertyName) { + System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged; + if ((propertyChanged != null)) { + propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyInteger : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="integer", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyHtml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDateTime : cmisProperty { + + private System.DateTime valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public System.DateTime value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyString : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyXml : cmisProperty { + + private System.Xml.XmlElement[] anyField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlAnyElementAttribute(Order=0)] + public System.Xml.XmlElement[] Any { + get { + return this.anyField; + } + set { + this.anyField = value; + this.RaisePropertyChanged("Any"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyDecimal : cmisProperty { + + private decimal valueField; + + private bool valueFieldSpecified; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public decimal value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool valueSpecified { + get { + return this.valueFieldSpecified; + } + set { + this.valueFieldSpecified = value; + this.RaisePropertyChanged("valueSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyId : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private string hrefField; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified, DataType="anyURI")] + public string href { + get { + return this.hrefField; + } + set { + this.hrefField = value; + this.RaisePropertyChanged("href"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + /// + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3053")] + [System.SerializableAttribute()] + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.ComponentModel.DesignerCategoryAttribute("code")] + [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://www.cmis.org/2008/05")] + public partial class cmisPropertyUri : cmisProperty { + + private string valueField; + + private enumPropertyType propertyTypeField; + + private bool propertyTypeFieldSpecified; + + private System.Xml.XmlAttribute[] anyAttrField; + + /// + [System.Xml.Serialization.XmlElementAttribute(DataType="anyURI", Order=0)] + public string value { + get { + return this.valueField; + } + set { + this.valueField = value; + this.RaisePropertyChanged("value"); + } + } + + /// + [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)] + public enumPropertyType propertyType { + get { + return this.propertyTypeField; + } + set { + this.propertyTypeField = value; + this.RaisePropertyChanged("propertyType"); + } + } + + /// + [System.Xml.Serialization.XmlIgnoreAttribute()] + public bool propertyTypeSpecified { + get { + return this.propertyTypeFieldSpecified; + } + set { + this.propertyTypeFieldSpecified = value; + this.RaisePropertyChanged("propertyTypeSpecified"); + } + } + + /// + [System.Xml.Serialization.XmlAnyAttributeAttribute()] + public System.Xml.XmlAttribute[] AnyAttr { + get { + return this.anyAttrField; + } + set { + this.anyAttrField = value; + this.RaisePropertyChanged("AnyAttr"); + } + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getAllVersions", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getAllVersions { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + public string repositoryId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=1)] + public string versionSeriesId; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=2)] + public string filter; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=3)] + public bool includeAllowableActions; + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=4)] + public bool includeRelationships; + + public getAllVersions() { + } + + public getAllVersions(string repositoryId, string versionSeriesId, string filter, bool includeAllowableActions, bool includeRelationships) { + this.repositoryId = repositoryId; + this.versionSeriesId = versionSeriesId; + this.filter = filter; + this.includeAllowableActions = includeAllowableActions; + this.includeRelationships = includeRelationships; + } + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + [System.ServiceModel.MessageContractAttribute(WrapperName="getAllVersionsResponse", WrapperNamespace="http://www.cmis.org/2008/05", IsWrapped=true)] + public partial class getAllVersionsResponse { + + [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://www.cmis.org/2008/05", Order=0)] + [System.Xml.Serialization.XmlElementAttribute("object", IsNullable=true)] + public cmisObjectType[] @object; + + public getAllVersionsResponse() { + } + + public getAllVersionsResponse(cmisObjectType[] @object) { + this.@object = @object; + } + } + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public interface VersioningServicePortChannel : WcfTestClient.VersioningService.VersioningServicePort, System.ServiceModel.IClientChannel { + } + + [System.Diagnostics.DebuggerStepThroughAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] + public partial class VersioningServicePortClient : System.ServiceModel.ClientBase, WcfTestClient.VersioningService.VersioningServicePort { + + public VersioningServicePortClient() { + } + + public VersioningServicePortClient(string endpointConfigurationName) : + base(endpointConfigurationName) { + } + + public VersioningServicePortClient(string endpointConfigurationName, string remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public VersioningServicePortClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : + base(endpointConfigurationName, remoteAddress) { + } + + public VersioningServicePortClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : + base(binding, remoteAddress) { + } + + public void checkOut(string repositoryId, ref string documentId, out bool contentCopied) { + base.Channel.checkOut(repositoryId, ref documentId, out contentCopied); + } + + public void checkIn(string repositoryId, ref string documentId, bool major, WcfTestClient.VersioningService.cmisPropertiesType properties, WcfTestClient.VersioningService.cmisContentStreamType contentStream, string checkinComment) { + base.Channel.checkIn(repositoryId, ref documentId, major, properties, contentStream, checkinComment); + } + + public void cancelCheckOut(string repositoryId, string documentId) { + base.Channel.cancelCheckOut(repositoryId, documentId); + } + + public WcfTestClient.VersioningService.cmisObjectType getPropertiesOfLatestVersion(string repositoryId, string versionSeriesId, bool majorVersion, string filter) { + return base.Channel.getPropertiesOfLatestVersion(repositoryId, versionSeriesId, majorVersion, filter); + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + WcfTestClient.VersioningService.getAllVersionsResponse WcfTestClient.VersioningService.VersioningServicePort.getAllVersions(WcfTestClient.VersioningService.getAllVersions request) { + return base.Channel.getAllVersions(request); + } + + public cmisObjectType[] getAllVersions(string repositoryId, string versionSeriesId, string filter, bool includeAllowableActions, bool includeRelationships) { + WcfTestClient.VersioningService.getAllVersions inValue = new WcfTestClient.VersioningService.getAllVersions(); + inValue.repositoryId = repositoryId; + inValue.versionSeriesId = versionSeriesId; + inValue.filter = filter; + inValue.includeAllowableActions = includeAllowableActions; + inValue.includeRelationships = includeRelationships; + WcfTestClient.VersioningService.getAllVersionsResponse retVal = ((WcfTestClient.VersioningService.VersioningServicePort)(this)).getAllVersions(inValue); + return retVal.@object; + } + + public void deleteAllVersions(string repositoryId, string versionSeriesId) { + base.Channel.deleteAllVersions(repositoryId, versionSeriesId); + } + } +} diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/Reference.svcmap b/source/test/dotnet/CmisWS/Service References/VersioningService/Reference.svcmap new file mode 100644 index 0000000000..c4d362a8ea --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/Reference.svcmap @@ -0,0 +1,30 @@ + + + + false + true + + false + false + false + + + true + Auto + true + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/VersioningService.wsdl b/source/test/dotnet/CmisWS/Service References/VersioningService/VersioningService.wsdl new file mode 100644 index 0000000000..c097fec240 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/VersioningService.wsdl @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/VersioningServicePort.wsdl b/source/test/dotnet/CmisWS/Service References/VersioningService/VersioningServicePort.wsdl new file mode 100644 index 0000000000..dacfe19251 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/VersioningServicePort.wsdl @@ -0,0 +1,1534 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/WcfCmisWSTests.VersioningService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/VersioningService/WcfCmisWSTests.VersioningService.cmisObjectType.datasource new file mode 100644 index 0000000000..8ca72be4c5 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/WcfCmisWSTests.VersioningService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfCmisWSTests.VersioningService.cmisObjectType, Service References.VersioningService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/WcfTestClient.VersioningService.cmisObjectType.datasource b/source/test/dotnet/CmisWS/Service References/VersioningService/WcfTestClient.VersioningService.cmisObjectType.datasource new file mode 100644 index 0000000000..dc79d6da8a --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/WcfTestClient.VersioningService.cmisObjectType.datasource @@ -0,0 +1,10 @@ + + + + WcfTestClient.VersioningService.cmisObjectType, Service References.VersioningService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/configuration.svcinfo b/source/test/dotnet/CmisWS/Service References/VersioningService/configuration.svcinfo new file mode 100644 index 0000000000..8ad07fa491 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/configuration.svcinfo @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Service References/VersioningService/configuration91.svcinfo b/source/test/dotnet/CmisWS/Service References/VersioningService/configuration91.svcinfo new file mode 100644 index 0000000000..7f5b47e930 --- /dev/null +++ b/source/test/dotnet/CmisWS/Service References/VersioningService/configuration91.svcinfo @@ -0,0 +1,280 @@ + + + + + + + VersioningServiceSoapBinding + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + Transport + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + VersioningServiceSoapBinding1 + + + 00:01:00 + + + 00:01:00 + + + 00:10:00 + + + 00:01:00 + + + False + + + False + + + StrongWildcard + + + 65536 + + + 524288 + + + 65536 + + + Text + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 32 + + + 8192 + + + 16384 + + + 4096 + + + 16384 + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + None + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Basic256 + + + System.Text.UTF8Encoding + + + Buffered + + + True + + + + + + + + + https://localhost:8443/alfresco/cmis/VersioningService + + + + + + basicHttpBinding + + + VersioningServiceSoapBinding + + + VersioningService.VersioningServicePort + + + System.ServiceModel.Configuration.AddressHeaderCollectionElement + + + <Header /> + + + System.ServiceModel.Configuration.IdentityElement + + + System.ServiceModel.Configuration.UserPrincipalNameElement + + + + + + System.ServiceModel.Configuration.ServicePrincipalNameElement + + + + + + System.ServiceModel.Configuration.DnsElement + + + + + + System.ServiceModel.Configuration.RsaElement + + + + + + System.ServiceModel.Configuration.CertificateElement + + + + + + System.ServiceModel.Configuration.CertificateReferenceElement + + + My + + + LocalMachine + + + FindBySubjectDistinguishedName + + + + + + False + + + VersioningServicePort + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/Source/AbstractCmisServicesHelper.cs b/source/test/dotnet/CmisWS/Source/AbstractCmisServicesHelper.cs new file mode 100644 index 0000000000..28a616d313 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/AbstractCmisServicesHelper.cs @@ -0,0 +1,720 @@ +using System; +using System.Text; +using NUnit.Framework; +using System.ServiceModel; +using System.Collections.Generic; +using WcfTestClient.ObjectService; +using WcfTestClient.DiscoveryService; +using WcfTestClient.NavigationService; +using WcfTestClient.RepositoryService; +using WcfTestClient.VersioningService; +using WcfTestClient.MultiFilingService; + +/// +/// author: Dmitry Velichkevich +/// +namespace WcfCmisWSTests { + public abstract class AbstractCmisServicesHelper { + public const int MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH = 1; + + public const string TEXTUAL_ZERO = "0"; + + public const string ANY_PROPERTY_FILTER = "*"; + + public const string DOCUMENT_TYPE = "document"; + public const string FOLDER_TYPE = "folder"; + + public const string NAME_PROPERTY = "Name"; + public const string OBJECT_IDENTIFIER_PROPERTY = "ObjectId"; + + public const string TEXT_DOCUMENT_POSTFIX = ".txt"; + public const string TEXT_DOCUMENT_MIMETYPE = "plain/text"; + + public const string DEFAULT_ENCODING = "utf-8"; + + public const string TEST_DOCUMENT_CONTENT_ENTRY_TEXT = "Test document Content Entry"; + + public static CmisTypesConverter NAVIGATION_CONVERTER = + new NavigationServiceToObjectServiceTypesConverter(); + public static CmisTypesConverter VERSIONING_CONVERTER = + new VersioningServiceToObjectServiceTypesConverter(); + + private const int ARRAY_BASED_STRUCTURE_BEING_INDEX = 0; + private const int SAMPLE_LENGTH_MINUS_ONE_ODDS = 2; + + private const int MAXIMUM_ODD_OBJECTS_AMOUNT = 5; + private const int NEAR_ZERO_RANDOM_MAXIMUM = 3; + + private const string DELIMETER = "/"; + + private const string DEFAULT_ADMIN_USERNAME = "admin"; + private const string DEFAULT_ADMIN_PASSWORD = "admin"; + + private const string CHECKED_OUT_PROPERTY = "IsVersionSeriesCheckedOut"; + private const string LATEST_VERSION_PROPERTY = "IsLatestVersion"; + + private const string FOLDER_NAME_PREFIX = "TestFolder ("; + private const string DOCUMENT_NAME_PREFIX = "TestDocument ("; + + private const string CMIS_OBJECTS_DELETION_FAILED_MESSAGE_PATTERN = "{0} with Id {1} was not deleted"; + + private const string CMIS_HTTP_BINDING_CONFIGURATION_NAME = "cmisUnsecureHttpBinding"; + + private const string SECURE_HTTP_SCHEMA = "https"; + + private static string DEFAULT_REQUEST_URL_BEGIN = "http://localhost:8080"; + private const string COMMON_SERVICE_URL_PATTERN = "{0}/alfresco/cmis/{1}?wsdl"; + private const string REPOSITORY_SERVICE_NAME = "RepositoryService"; + private const string OBJECT_SERVICE_NAME = "ObjectService"; + private const string NAVIGATION_SERVICE_NAME = "NavigationService"; + private const string MULTIFILING_SERVICE_NAME = "MultiFilingService"; + private const string VERSIONING_SERVICE_NAME = "VersioningService"; + private const string DISCOVERY_SERVICE_NAME = "DiscoveryService"; + + private static byte[] testDocumentContentEntry = Encoding.GetEncoding(DEFAULT_ENCODING) + .GetBytes(TEST_DOCUMENT_CONTENT_ENTRY_TEXT); + + private static string userName = DEFAULT_ADMIN_USERNAME; + private static string password = DEFAULT_ADMIN_PASSWORD; + + public static RepositoryServicePortClient createRepositoryServiceClient() { + + EndpointAddress serviceAddress = new EndpointAddress(string.Format(COMMON_SERVICE_URL_PATTERN, + new object[] {DEFAULT_REQUEST_URL_BEGIN, REPOSITORY_SERVICE_NAME})); + + RepositoryServicePortClient result = new RepositoryServicePortClient(createBindingFromConfig( + serviceAddress), serviceAddress); + + result.ChannelFactory.Endpoint.Behaviors.Add(new SoapRequestHeaderProcessorAttribute(UserName, Password)); + + return result; + } + + public static ObjectServicePortClient createObjectServiceClient() { + + EndpointAddress serviceAddress = new EndpointAddress(string.Format(COMMON_SERVICE_URL_PATTERN, + new object[] {DEFAULT_REQUEST_URL_BEGIN, OBJECT_SERVICE_NAME})); + + ObjectServicePortClient result = new ObjectServicePortClient(createBindingFromConfig(serviceAddress, true), + serviceAddress); + + result.ChannelFactory.Endpoint.Behaviors.Add(new SoapRequestHeaderProcessorAttribute(UserName, Password)); + + return result; + } + + public static ObjectServicePortClient createObjectServiceClient(string customUserName, string customPassword) { + + userName = customUserName; + password = customPassword; + + WcfTestClient.ObjectService.ObjectServicePortClient result = createObjectServiceClient(); + + userName = DEFAULT_ADMIN_USERNAME; + password = DEFAULT_ADMIN_PASSWORD; + + return result; + } + + public static NavigationServicePortClient createNavigationServiceClient() { + + EndpointAddress serviceAddress = new EndpointAddress(string.Format(COMMON_SERVICE_URL_PATTERN, + new object[] {DEFAULT_REQUEST_URL_BEGIN, NAVIGATION_SERVICE_NAME})); + + NavigationServicePortClient result = new NavigationServicePortClient(createBindingFromConfig( + serviceAddress), serviceAddress); + + result.ChannelFactory.Endpoint.Behaviors.Add(new SoapRequestHeaderProcessorAttribute(UserName, Password)); + + return result; + } + + public static VersioningServicePortClient createVersioningServiceClient() { + + EndpointAddress serviceAddress = new EndpointAddress(string.Format(COMMON_SERVICE_URL_PATTERN, + new object[] {DEFAULT_REQUEST_URL_BEGIN, VERSIONING_SERVICE_NAME})); + + VersioningServicePortClient result = new VersioningServicePortClient(createBindingFromConfig( + serviceAddress), serviceAddress); + + result.ChannelFactory.Endpoint.Behaviors.Add(new SoapRequestHeaderProcessorAttribute(UserName, Password)); + + return result; + } + + public static DiscoveryServicePortClient createDiscoveryServiceClient() { + + EndpointAddress serviceAddress = new EndpointAddress(string.Format(COMMON_SERVICE_URL_PATTERN, + new object[] {DEFAULT_REQUEST_URL_BEGIN, DISCOVERY_SERVICE_NAME})); + + DiscoveryServicePortClient result = new DiscoveryServicePortClient(createBindingFromConfig( + serviceAddress), serviceAddress); + + result.ChannelFactory.Endpoint.Behaviors.Add(new SoapRequestHeaderProcessorAttribute(UserName, Password)); + + return result; + } + + public static MultiFilingServicePortClient createMultiFilingServiceClient() { + + EndpointAddress serviceAddress = new EndpointAddress(string.Format(COMMON_SERVICE_URL_PATTERN, + new object[] {DEFAULT_REQUEST_URL_BEGIN, MULTIFILING_SERVICE_NAME})); + + MultiFilingServicePortClient result = new MultiFilingServicePortClient(createBindingFromConfig( + serviceAddress), serviceAddress); + + result.ChannelFactory.Endpoint.Behaviors.Add(new SoapRequestHeaderProcessorAttribute(UserName, Password)); + + return result; + } + + public static string getAndAssertRepositoryId() { + + RepositoryServicePortClient client = createRepositoryServiceClient(); + + WcfTestClient.RepositoryService.cmisRepositoryEntryType[] repositories = client.getRepositories(); + + assertRepositoriesResponse(repositories); + + return repositories[0].repositoryID; + } + + public static string getAndAssertRootFolder() { + + return performManipulationsAndAssertionWrapping(new RootFolderReceiverStrategy()); + } + + public static string generateObjectName(string postfix) { + + bool document = ((postfix != null) && (postfix.Length >= MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH)); + + return ((document) ? (DOCUMENT_NAME_PREFIX):(FOLDER_NAME_PREFIX)) + DateTime.Now.Ticks.ToString() + ")" + + ((document) ? (postfix):(string.Empty)); + } + + public static WcfTestClient.ObjectService.cmisPropertiesType createCmisObjectProperties(string documentName) { + + WcfTestClient.ObjectService.cmisPropertiesType result = + new WcfTestClient.ObjectService.cmisPropertiesType(); + + WcfTestClient.ObjectService.cmisPropertyString nameProperty = + new WcfTestClient.ObjectService.cmisPropertyString(); + nameProperty.value = documentName; + nameProperty.name = NAME_PROPERTY; + result.Items = new WcfTestClient.ObjectService.cmisProperty[] {nameProperty}; + + return result; + } + + public static byte[] getTestDocumentContentEntry() { + + return testDocumentContentEntry; + } + + public static WcfTestClient.ObjectService.cmisContentStreamType createCmisDocumentContent(string documentName, + string mimeType, byte[] contentEntry) { + + WcfTestClient.ObjectService.cmisContentStreamType result = + new WcfTestClient.ObjectService.cmisContentStreamType(); + result.filename = documentName; + result.length = contentEntry.Length.ToString(); + result.mimeType = mimeType; + result.stream = contentEntry; + + return result; + } + + public static string createAndAssertDocument(string documentName, string parentFolder, string mimeType, + byte[] contentEntry) { + + return performManipulationsAndAssertionWrapping(new DocumentCreatorStrategy(documentName, parentFolder, + mimeType, enumVersioningState.major, contentEntry)); + } + + public static string createAndAssertDocument(string documentName, string parentFolder, string mimeType, + enumVersioningState versioningState, byte[] contentEntry) { + + return performManipulationsAndAssertionWrapping(new DocumentCreatorStrategy(documentName, parentFolder, + mimeType, versioningState, contentEntry)); + } + + public static string createAndAssertFolder(string folderName, string parentFolder) { + + return performManipulationsAndAssertionWrapping(new FolderCreatorStrategy(folderName, parentFolder)); + } + + public static string[] createAndAssertFileFolderHierarchy(int depth, int minimalChildrenAmount, + int maximumChildrenAmount, bool withoutDocuments) { + + List hierarchyObjects = new List(); + Queue> folders = createAndInitializeFoldersQueue(hierarchyObjects); + + Random randomCounter = new Random(); + + while((folders.Count > 0) && (folders.Peek().Key <= (depth - 1))) { + createObjectsForCurrentLevel(minimalChildrenAmount, maximumChildrenAmount, withoutDocuments, + hierarchyObjects, folders, randomCounter, folders.Dequeue()); + } + + return hierarchyObjects.ToArray(); + } + + public static WcfTestClient.ObjectService.cmisPropertiesType getObjectProperties(string objectId, + bool assertResults) { + + WcfTestClient.ObjectService.ObjectServicePortClient client = createObjectServiceClient(); + + WcfTestClient.ObjectService.cmisObjectType result = client.getProperties( + getAndAssertRepositoryId(), objectId, + enumReturnVersion.latest, ANY_PROPERTY_FILTER, + false, false); + + if(assertResults) { + assertrObjectProperties(result); + } + + return (result != null) ? (result.properties):(null); + } + + public static object searchPropertyAndGetValueByName(WcfTestClient.ObjectService.cmisProperty[] properties, + string propertyName) { + + foreach(WcfTestClient.ObjectService.cmisProperty property in properties) { + if ((property.name != null) && property.name.Equals(propertyName)) { + return determinePropertyValue(property); + } + } + + return null; + } + + public static void deleteAndAssertDocument(string documentId) { + + WcfTestClient.ObjectService.ObjectServicePortClient client = createObjectServiceClient(); + + client.deleteObject(getAndAssertRepositoryId(), documentId); + + assertObjectAbsence(documentId, DOCUMENT_TYPE); + } + + public static void deleteAndAssertFolder(string folderId, bool notEmptyBehaviour) { + + WcfTestClient.ObjectService.ObjectServicePortClient client = createObjectServiceClient(); + + try { + client.deleteObject(getAndAssertRepositoryId(), folderId); + + determineAssertionFailed(notEmptyBehaviour, "Not empty folder was deleted"); + } catch (Exception e) { + determineAssertionFailed(!notEmptyBehaviour, e.Message); + } + + assertObjectAbsence(folderId, FOLDER_TYPE); + } + + public static void assertDocumentParents(string documentId, string[] expectedParentsIds) { + + performParentsReceivingWrapping(new ObjectParentsReceiverStrategy(documentId), expectedParentsIds); + } + + public static void assertFolderParents(string folderId, string[] expectedParentsIds, bool allParents) { + + performParentsReceivingWrapping(new FolderParentsReceiverStrategy(folderId, allParents), expectedParentsIds); + } + + public static void deleteAndAssertHierarchy(string[] hierarchyObjectsIds) { + + WcfTestClient.ObjectService.ObjectServicePortClient client = createObjectServiceClient(); + + string[] undeletedObjectsIds = client.deleteTree(getAndAssertRepositoryId(), hierarchyObjectsIds[0], + enumUnfileNonfolderObjects.delete, true); + + Assert.IsNotNull(undeletedObjectsIds); + Assert.AreEqual(undeletedObjectsIds.Length, ARRAY_BASED_STRUCTURE_BEING_INDEX); + + foreach(string objectId in hierarchyObjectsIds) { + assertObjectAbsence(objectId, null); + } + } + + public static string[] addOneMoreParent(string documentId, string parentFolderId) { + + string repositoryId = getAndAssertRepositoryId(); + + string[] result = receiveOldParentsList(parentFolderId, createNavigationServiceClient().getObjectParents( + repositoryId, documentId, ANY_PROPERTY_FILTER, false, false)); + + createMultiFilingServiceClient().addObjectToFolder(repositoryId, documentId, parentFolderId); + + return result; + } + + public static KeyValuePair> createMultiFilledDocument( + string primaryFolderId) { + + string documentId = createAndAssertDocument(generateObjectName(TEXT_DOCUMENT_POSTFIX), primaryFolderId, + TEXT_DOCUMENT_MIMETYPE, testDocumentContentEntry); + + string folderId = createAndAssertFolder(generateObjectName(null), primaryFolderId); + + return new KeyValuePair>(folderId, new KeyValuePair(documentId, addOneMoreParent(documentId, folderId))); + } + + public static string checkOutAndAssert(string documentId) { + + bool copied; + + createVersioningServiceClient().checkOut(getAndAssertRepositoryId(), ref documentId, out copied); + + assertCheckedOutDocument(documentId, copied); + + return documentId; + } + + public static void assertCheckedOutDocument(string documentId, bool copied) { + + Assert.IsNotNull(documentId); + Assert.IsTrue(copied && (bool)searchPropertyAndGetValueByName(getObjectProperties(documentId, true).Items, + CHECKED_OUT_PROPERTY)); + } + + public static void cancelCheckOutAndAssert(string checkedOutDocumentId) { + + createVersioningServiceClient().cancelCheckOut(getAndAssertRepositoryId(), checkedOutDocumentId); + + assertObjectAbsence(checkedOutDocumentId, null); + } + + public static void getAndAssertLatestVersionProperties(string versionSeriesId, string name, + string expectedVersionSuffix, bool onlyLatest) { + + VersioningServicePortClient client = createVersioningServiceClient(); + + WcfTestClient.VersioningService.cmisObjectType response = client.getPropertiesOfLatestVersion( + getAndAssertRepositoryId(), versionSeriesId, false, ANY_PROPERTY_FILTER); + + asserLatestVersionProperties(versionSeriesId, name, expectedVersionSuffix, onlyLatest, response); + } + + public static void assertActualIdsFromObjectsWithSpecified(WcfTestClient.NavigationService.cmisObjectType[] + actualObjects, string[] expectedIds) { + + bool value; + + Dictionary expectedIdsMap = createExpectedParentsIdsMap(expectedIds); + + foreach (WcfTestClient.NavigationService.cmisObjectType actualParent in actualObjects) { + Assert.IsTrue(expectedIdsMap.TryGetValue((string)searchPropertyAndGetValueByName( + NAVIGATION_CONVERTER.convertProperties(actualParent.properties.Items), + OBJECT_IDENTIFIER_PROPERTY), out value)); + } + } + + public static string UserName { + get { + + return userName; + } + } + + public static string Password { + get { + + return password; + } + } + + private AbstractCmisServicesHelper() { + } + + private static BasicHttpBinding createBindingFromConfig(EndpointAddress serviceAddress, bool mtomEncoding) { + + BasicHttpBinding result = createBindingFromConfig(serviceAddress); + + result.MessageEncoding = (mtomEncoding) ? (WSMessageEncoding.Mtom):(WSMessageEncoding.Text); + + return result; + } + + private static BasicHttpBinding createBindingFromConfig(EndpointAddress serviceAddress) { + + BasicHttpBinding result = new BasicHttpBinding(CMIS_HTTP_BINDING_CONFIGURATION_NAME); + + if(serviceAddress.Uri.Scheme.ToLower().Equals(SECURE_HTTP_SCHEMA)) { + result.Security.Mode = BasicHttpSecurityMode.Transport; + } + + return result; + } + + private static string performManipulationsAndAssertionWrapping(CmisManipulationsStrategy< + string> createVisitor) { + + string result = null; + + try { + result = createVisitor.performManipulations(); + + Assert.IsNotNull(result); + Assert.IsTrue(result.Length > MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH); + } catch(Exception e) { + Assert.Fail(e.Message); + } + + return result; + } + + private static void performParentsReceivingWrapping(CmisManipulationsStrategy< + WcfTestClient.NavigationService.cmisObjectType[]> receiver, string[] expectedParentsIds) { + + WcfTestClient.NavigationService.cmisObjectType[] actualParents = receiver.performManipulations(); + + Assert.IsTrue(actualParents != null); + Assert.AreEqual(expectedParentsIds.Length, actualParents.Length); + + assertActualIdsFromObjectsWithSpecified(actualParents, expectedParentsIds); + } + + private static void assertRepositoriesResponse(WcfTestClient.RepositoryService.cmisRepositoryEntryType[] + repositories) { + + Assert.IsNotNull(repositories); + Assert.IsNotNull(repositories[0]); + Assert.IsTrue(repositories[0].repositoryID.Length > MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH); + } + + private static void assertrObjectProperties(WcfTestClient.ObjectService.cmisObjectType result) { + + Assert.IsNotNull(result); + Assert.IsNotNull(result.properties); + Assert.IsNotNull(result.properties.Items); + Assert.IsTrue(result.properties.Items.Length >= MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH); + Assert.IsNotNull(searchPropertyAndGetValueByName(result.properties.Items, NAME_PROPERTY)); + } + + private static void assertObjectAbsence(string objectId, string objectName) { + + try { + getObjectProperties(objectId, false); + + Assert.Fail(string.Format(CMIS_OBJECTS_DELETION_FAILED_MESSAGE_PATTERN, new object[] {objectName, + objectId})); + } catch (Exception) { + } + } + + private static object determinePropertyValue(WcfTestClient.ObjectService.cmisProperty property) { + + if(property is WcfTestClient.ObjectService.cmisPropertyString) { + return ((WcfTestClient.ObjectService.cmisPropertyString)property).value; + } + + if(property is WcfTestClient.ObjectService.cmisPropertyBoolean) { + return ((WcfTestClient.ObjectService.cmisPropertyBoolean)property).value; + } + + if(property is WcfTestClient.ObjectService.cmisPropertyDateTime) { + return ((WcfTestClient.ObjectService.cmisPropertyDateTime)property).value; + } + + if(property is WcfTestClient.ObjectService.cmisPropertyDecimal) { + return ((WcfTestClient.ObjectService.cmisPropertyDecimal)property).value; + } + + if(property is WcfTestClient.ObjectService.cmisPropertyId) { + return ((WcfTestClient.ObjectService.cmisPropertyId)property).value; + } + + if(property is WcfTestClient.ObjectService.cmisPropertyInteger) { + return ((WcfTestClient.ObjectService.cmisPropertyInteger)property).value; + } + + if(property is WcfTestClient.ObjectService.cmisPropertyUri) { + return ((WcfTestClient.ObjectService.cmisPropertyUri)property).value; + } + + return null; + } + + private static void determineAssertionFailed(bool assertionCondition, string message) { + + if(assertionCondition) { + Assert.Fail(message); + } + } + + private static System.Collections.Generic.Dictionary createExpectedParentsIdsMap( + string[] expectedIds) { + + System.Collections.Generic.Dictionary result = + new System.Collections.Generic.Dictionary(); + + foreach (string key in expectedIds) { + result.Add(key, false); + } + + return result; + } + + private static Queue> createAndInitializeFoldersQueue( + List hierarchyObjects) { + + Queue> result = new Queue>(); + + result.Enqueue(new KeyValuePair(MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH, createAndAssertFolder( + generateObjectName(null), getAndAssertRootFolder()))); + hierarchyObjects.Add(result.Peek().Value); + + return result; + } + + private static void createObjectsForCurrentLevel(int minimalChildrenAmount, int maximumChildrenAmount, + bool withoutDocuments, List hierarchyObjects, + Queue> folders, Random randomCounter, + KeyValuePair currentParent) { + + for(int i = 0; i < generateBoundedChildrenAmount(randomCounter, minimalChildrenAmount, + maximumChildrenAmount); i++) { + hierarchyObjects.Add(createDeterminedObject(withoutDocuments, folders, randomCounter, currentParent)); + } + } + + private static int generateBoundedChildrenAmount(Random randomCounter, int minimalChildrenAmount, + int maximumChildrenAmount) { + + int result = randomCounter.Next(MAXIMUM_ODD_OBJECTS_AMOUNT); + + result = ((minimalChildrenAmount < 0) && ((minimalChildrenAmount + result) < 0)) ? (0): + (result + minimalChildrenAmount); + + return ((maximumChildrenAmount > 0) && (result > maximumChildrenAmount)) ? (maximumChildrenAmount): + (result); + } + + private static string createDeterminedObject(bool withoutDocuments, Queue> folders, + Random randomCounter, KeyValuePair currentParent) { + + bool folder = withoutDocuments || (randomCounter.Next(NEAR_ZERO_RANDOM_MAXIMUM) == 0); + + CmisManipulationsStrategy objectCreator = (folder) ? ((CmisManipulationsStrategy) + new FolderCreatorStrategy(generateObjectName(null), currentParent.Value)): + ((CmisManipulationsStrategy)new DocumentCreatorStrategy(generateObjectName( + TEXT_DOCUMENT_POSTFIX), currentParent.Value, TEXT_DOCUMENT_MIMETYPE, + enumVersioningState.major, testDocumentContentEntry)); + + string objectId = objectCreator.performManipulations(); + + if(folder) { + folders.Enqueue(new KeyValuePair((currentParent.Key + 1), objectId)); + } + + return objectId; + } + + private static string[] receiveOldParentsList(string parentFolderId, + WcfTestClient.NavigationService.cmisObjectType[] parents) { + + string[] result = new string[parents.Length + 1]; + + int index = 0; + + foreach(WcfTestClient.NavigationService.cmisObjectType parent in parents) { + result[index++] = searchPropertyAndGetValueByName(NAVIGATION_CONVERTER.convertProperties( + parent.properties.Items), OBJECT_IDENTIFIER_PROPERTY).ToString(); + } + + result[index] = parentFolderId; + + return result; + } + + private static void asserLatestVersionProperties(string versionSeriesId, string name, + string expectedVersionSuffix, bool onlyLatest, WcfTestClient.VersioningService.cmisObjectType response) { + + Assert.IsNotNull(response); + Assert.IsTrue((bool)searchPropertyAndGetValueByName(VERSIONING_CONVERTER.convertProperties( + response.properties.Items), LATEST_VERSION_PROPERTY)); + Assert.AreEqual(name, searchPropertyAndGetValueByName( + VERSIONING_CONVERTER.convertProperties(response.properties.Items), NAME_PROPERTY)); + + assertVersionId(versionSeriesId, expectedVersionSuffix, response, onlyLatest); + } + + private static void assertVersionId(string sourceId, string expectedVersionNumber, + WcfTestClient.VersioningService.cmisObjectType response, bool onlyLatest) { + + sourceId = (onlyLatest) ? (sourceId.Substring(0, sourceId.LastIndexOf(DELIMETER))):(sourceId); + + string latestVersionId = (string)searchPropertyAndGetValueByName( + VERSIONING_CONVERTER.convertProperties(response.properties.Items), OBJECT_IDENTIFIER_PROPERTY); + + Assert.AreEqual(sourceId, latestVersionId); + + if(expectedVersionNumber != null) { + Assert.IsTrue(latestVersionId.EndsWith(expectedVersionNumber)); + } + } + + private class ObjectParentsReceiverStrategy: CmisManipulationsStrategy< + WcfTestClient.NavigationService.cmisObjectType[]> { + private string objectId; + + string CmisManipulationsStrategy.getName() { + + return null; + } + + public ObjectParentsReceiverStrategy(string objectId) { + + this.objectId = objectId; + } + + WcfTestClient.NavigationService.cmisObjectType[] CmisManipulationsStrategy< + WcfTestClient.NavigationService.cmisObjectType[]>.performManipulations() { + + return createNavigationServiceClient().getObjectParents(getAndAssertRepositoryId(), objectId, + ANY_PROPERTY_FILTER, false, false); + } + } + + private class FolderParentsReceiverStrategy: CmisManipulationsStrategy< + WcfTestClient.NavigationService.cmisObjectType[]> { + private bool allParents; + private string folderId; + + string CmisManipulationsStrategy.getName() { + + return null; + } + + public FolderParentsReceiverStrategy(string folderId, bool allParents) { + + this.folderId = folderId; + this.allParents = allParents; + } + + WcfTestClient.NavigationService.cmisObjectType[] CmisManipulationsStrategy< + WcfTestClient.NavigationService.cmisObjectType[]>.performManipulations() { + + return createNavigationServiceClient().getFolderParent(getAndAssertRepositoryId(), folderId, + ANY_PROPERTY_FILTER, false, false, allParents); + } + } + + private class RootFolderReceiverStrategy: CmisManipulationsStrategy { + string CmisManipulationsStrategy.getName() { + + return string.Empty; + } + + string CmisManipulationsStrategy.performManipulations() { + + return createRepositoryServiceClient().getRepositoryInfoWrapper(getAndAssertRepositoryId()) + .rootFolderId; + } + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/CmisManipulationsStrategy.cs b/source/test/dotnet/CmisWS/Source/CmisManipulationsStrategy.cs new file mode 100644 index 0000000000..1122b85c91 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/CmisManipulationsStrategy.cs @@ -0,0 +1,10 @@ +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public interface CmisManipulationsStrategy { + string getName(); + + R performManipulations(); + } +} diff --git a/source/test/dotnet/CmisWS/Source/CmisTypesConverter.cs b/source/test/dotnet/CmisWS/Source/CmisTypesConverter.cs new file mode 100644 index 0000000000..ab655994b3 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/CmisTypesConverter.cs @@ -0,0 +1,8 @@ +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public interface CmisTypesConverter { + R convertProperties(S sourceData); + } +} diff --git a/source/test/dotnet/CmisWS/Source/DiscoveryServiceClientTest.cs b/source/test/dotnet/CmisWS/Source/DiscoveryServiceClientTest.cs new file mode 100644 index 0000000000..38c8044ed5 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/DiscoveryServiceClientTest.cs @@ -0,0 +1,36 @@ +using System; +using NUnit.Framework; +using WcfTestClient.DiscoveryService; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + [TestFixture] + public class DiscoveryServiceClientTest { + private const string TEXTUAL_TEN = "10"; + private const string SAMPLE_QUERY = "SELECT * FROM DOCUMENT"; + + [Test] + public void testCmisSqlFeature() { + + try { + assertQuering(AbstractCmisServicesHelper.createDiscoveryServiceClient()); + } catch(Exception e) { + Assert.Fail(e.Message); + } + } + + private static void assertQuering(DiscoveryServicePortClient client) { + + bool hasMoreElements; + + cmisObjectType[] response = client.query(SAMPLE_QUERY, false, TEXTUAL_TEN, + AbstractCmisServicesHelper.TEXTUAL_ZERO, false, null, out hasMoreElements); + + Assert.IsTrue((response != null) && (response[0] != null)); + Assert.IsTrue(hasMoreElements); + Assert.AreEqual(response.Length, int.Parse(TEXTUAL_TEN)); + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/DocumentCreatorStrategy.cs b/source/test/dotnet/CmisWS/Source/DocumentCreatorStrategy.cs new file mode 100644 index 0000000000..d26a5a17ec --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/DocumentCreatorStrategy.cs @@ -0,0 +1,38 @@ +using WcfTestClient.ObjectService; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public class DocumentCreatorStrategy: CmisManipulationsStrategy { + private string objectName; + private string objectParent; + private string objectMimeType; + private enumVersioningState versioningState; + private byte[] objectContentEntry; + + public DocumentCreatorStrategy(string objectName, string objectParent, string objectMimeType, + enumVersioningState versioningState, byte[] objectContentEntry) { + + this.objectName = objectName; + this.objectParent = objectParent; + this.objectMimeType = objectMimeType; + this.versioningState = versioningState; + this.objectContentEntry = objectContentEntry; + } + + string CmisManipulationsStrategy.getName() { + + return objectName; + } + + string CmisManipulationsStrategy.performManipulations() { + + return AbstractCmisServicesHelper.createObjectServiceClient().createDocument( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), AbstractCmisServicesHelper.DOCUMENT_TYPE, + AbstractCmisServicesHelper.createCmisObjectProperties(objectName), objectParent, + AbstractCmisServicesHelper.createCmisDocumentContent(objectName, objectMimeType, + objectContentEntry), versioningState); + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/FolderCreatorStrategy.cs b/source/test/dotnet/CmisWS/Source/FolderCreatorStrategy.cs new file mode 100644 index 0000000000..ff9a1f9e0b --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/FolderCreatorStrategy.cs @@ -0,0 +1,27 @@ +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public class FolderCreatorStrategy: CmisManipulationsStrategy { + private string objectName; + private string objectParent; + + string CmisManipulationsStrategy.getName() { + + return objectName; + } + + public FolderCreatorStrategy(string objectName, string objectParent) { + + this.objectName = objectName; + this.objectParent = objectParent; + } + + string CmisManipulationsStrategy.performManipulations() { + + return AbstractCmisServicesHelper.createObjectServiceClient().createFolder( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), AbstractCmisServicesHelper.FOLDER_TYPE, + AbstractCmisServicesHelper.createCmisObjectProperties(objectName), objectParent); + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/MultiFilingServiceClientTest.cs b/source/test/dotnet/CmisWS/Source/MultiFilingServiceClientTest.cs new file mode 100644 index 0000000000..bdb2605df1 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/MultiFilingServiceClientTest.cs @@ -0,0 +1,42 @@ +using NUnit.Framework; +using System.Collections.Generic; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + [TestFixture] + public class MultiFilingServiceClientTest { + [Test] + public void testParentAdding() { + + KeyValuePair> multifilledDocument = + AbstractCmisServicesHelper.createMultiFilledDocument( + AbstractCmisServicesHelper.getAndAssertRootFolder()); + + AbstractCmisServicesHelper.assertDocumentParents(multifilledDocument.Value.Key, + multifilledDocument.Value.Value); + + AbstractCmisServicesHelper.deleteAndAssertDocument(multifilledDocument.Value.Key); + AbstractCmisServicesHelper.deleteAndAssertFolder(multifilledDocument.Key, false); + } + + [Test] + public void testParentAddingAndRemoving() { + + KeyValuePair> multifilledDocument = + AbstractCmisServicesHelper.createMultiFilledDocument( + AbstractCmisServicesHelper.getAndAssertRootFolder()); + + AbstractCmisServicesHelper.createMultiFilingServiceClient().removeObjectFromFolder( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), + multifilledDocument.Value.Key, multifilledDocument.Key); + + AbstractCmisServicesHelper.assertDocumentParents(multifilledDocument.Value.Key, + new string[] {AbstractCmisServicesHelper.getAndAssertRootFolder()}); + + AbstractCmisServicesHelper.deleteAndAssertFolder(multifilledDocument.Key, false); + AbstractCmisServicesHelper.deleteAndAssertDocument(multifilledDocument.Value.Key); + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/NavigationServiceClientTest.cs b/source/test/dotnet/CmisWS/Source/NavigationServiceClientTest.cs new file mode 100644 index 0000000000..2af6481b84 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/NavigationServiceClientTest.cs @@ -0,0 +1,173 @@ +using System; +using NUnit.Framework; +using System.Collections.Generic; +using WcfTestClient.NavigationService; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + [TestFixture] + public class NavigationServiceClientTest { + private const int SINGLE_VALUE = 1; + private const int PAIR_VALUE = 2; + private const int OPTIMAL_MINIMAL_CHILDREN_AMOUNT = 3; + private const int OPTIMAL_HIERARCHY_DEPTH = 4; + private const int OPTIMAL_FOLDERS_DEPTH_AMOUNT = 5; + private const int OPTIMAL_MAXIMUM_CHILDREN_AMOUNT = 6; + private const int OPTIMAL_CHILDREN_AMOUNT = 7; + private const int MAXIMUM_CHECKEDOUT_DOCS_AMOUNT = 13; + + private const string FULL_PARENTS_HIERARCHY = "-1"; + + [Test] + public void testDocumentParentsReceving() { + + string rootFolderId = AbstractCmisServicesHelper.getAndAssertRootFolder(); + + assertSingleParentReceiving(rootFolderId); + assertMultiFilledParentsReceving(rootFolderId); + } + + [Test] + public void testFolderParentsReceiving() { + + assertSingleParentReceiving(); + assertAllParentsReceiving(); + } + + [Test] + public void testChildrenReceiving() { + + string[] hierarchy = AbstractCmisServicesHelper.createAndAssertFileFolderHierarchy(PAIR_VALUE, + OPTIMAL_CHILDREN_AMOUNT, 0, false); + + bool hasMoreElements; + + AbstractCmisServicesHelper.assertActualIdsFromObjectsWithSpecified( + AbstractCmisServicesHelper.createNavigationServiceClient().getChildren( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), hierarchy[0], + enumTypesOfFileableObjects.any, AbstractCmisServicesHelper.ANY_PROPERTY_FILTER, + false, false, AbstractCmisServicesHelper.TEXTUAL_ZERO, + AbstractCmisServicesHelper.TEXTUAL_ZERO, out hasMoreElements), + createObjectsCopy(hierarchy, null, SINGLE_VALUE, (hierarchy.Length - SINGLE_VALUE))); + + AbstractCmisServicesHelper.deleteAndAssertHierarchy(hierarchy); + } + + [Test] + public void testDescendantsReceiving() { + + string[] hierarchy = AbstractCmisServicesHelper.createAndAssertFileFolderHierarchy( + OPTIMAL_HIERARCHY_DEPTH, OPTIMAL_MINIMAL_CHILDREN_AMOUNT, OPTIMAL_MAXIMUM_CHILDREN_AMOUNT, false); + + AbstractCmisServicesHelper.assertActualIdsFromObjectsWithSpecified( + AbstractCmisServicesHelper.createNavigationServiceClient().getDescendants( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), hierarchy[0], + enumTypesOfFileableObjects.any, FULL_PARENTS_HIERARCHY, + AbstractCmisServicesHelper.ANY_PROPERTY_FILTER, false, false), + createObjectsCopy(hierarchy, null, SINGLE_VALUE, (hierarchy.Length - SINGLE_VALUE))); + + AbstractCmisServicesHelper.deleteAndAssertHierarchy(hierarchy); + } + + [Test] + public void testCheckedOutDocumentsReceving() { + + string[] hierarchy = createCheckedOutDocumentsHierarchy(SINGLE_VALUE + new Random().Next( + MAXIMUM_CHECKEDOUT_DOCS_AMOUNT)); + + bool hasMoreElements; + + AbstractCmisServicesHelper.assertActualIdsFromObjectsWithSpecified( + AbstractCmisServicesHelper.createNavigationServiceClient().getCheckedoutDocs( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), hierarchy[0], + AbstractCmisServicesHelper.ANY_PROPERTY_FILTER, false, false, + AbstractCmisServicesHelper.TEXTUAL_ZERO, AbstractCmisServicesHelper.TEXTUAL_ZERO, + out hasMoreElements), createObjectsCopy(hierarchy, null, + SINGLE_VALUE, (hierarchy.Length - SINGLE_VALUE))); + + Assert.IsFalse(hasMoreElements); + + AbstractCmisServicesHelper.deleteAndAssertHierarchy(hierarchy); + } + + private static void assertSingleParentReceiving(string rootFolderId) { + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), rootFolderId, + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + AbstractCmisServicesHelper.assertDocumentParents(documentId, new string[] {rootFolderId}); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + private static void assertMultiFilledParentsReceving(string rootFolderId) { + + KeyValuePair> multifilledDocument = + AbstractCmisServicesHelper.createMultiFilledDocument(rootFolderId); + + AbstractCmisServicesHelper.assertDocumentParents(multifilledDocument.Value.Key, + multifilledDocument.Value.Value); + + AbstractCmisServicesHelper.deleteAndAssertDocument(multifilledDocument.Value.Key); + AbstractCmisServicesHelper.deleteAndAssertFolder(multifilledDocument.Key, false); + } + + private static void assertSingleParentReceiving() { + + string[] hierarchy = AbstractCmisServicesHelper.createAndAssertFileFolderHierarchy(PAIR_VALUE, + SINGLE_VALUE, SINGLE_VALUE, true); + AbstractCmisServicesHelper.assertFolderParents(hierarchy[hierarchy.Length - SINGLE_VALUE], + createObjectsCopy(hierarchy, null, 0, (hierarchy.Length - SINGLE_VALUE)), false); + AbstractCmisServicesHelper.deleteAndAssertHierarchy(hierarchy); + } + + private static void assertAllParentsReceiving() { + + string[] hierarchy = AbstractCmisServicesHelper.createAndAssertFileFolderHierarchy( + OPTIMAL_FOLDERS_DEPTH_AMOUNT, SINGLE_VALUE, SINGLE_VALUE, true); + AbstractCmisServicesHelper.assertFolderParents(hierarchy[hierarchy.Length - SINGLE_VALUE], + createObjectsCopy(hierarchy, AbstractCmisServicesHelper.getAndAssertRootFolder(), 0, + (hierarchy.Length - SINGLE_VALUE)), true); + AbstractCmisServicesHelper.deleteAndAssertHierarchy(hierarchy); + } + + private static string[] createCheckedOutDocumentsHierarchy(int documentsAmount) { + + string[] hierarchy = new string[documentsAmount + SINGLE_VALUE]; + + hierarchy[0] = AbstractCmisServicesHelper.createAndAssertFolder( + AbstractCmisServicesHelper.generateObjectName(null), + AbstractCmisServicesHelper.getAndAssertRootFolder()); + + for(int i = 0; i < documentsAmount; i++) { + hierarchy[i + SINGLE_VALUE] = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), hierarchy[0], + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + WcfTestClient.ObjectService.enumVersioningState.checkedout, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + } + + return hierarchy; + } + + private static string[] createObjectsCopy(string[] source, string firstElemetn, int sourceBegin, + int elementsAmount) { + + int absentElment = (firstElemetn != null) ? (SINGLE_VALUE):(0); + + string[] result = new string[elementsAmount + absentElment]; + + result[0] = firstElemetn; + + Array.Copy(source, sourceBegin, result, absentElment, elementsAmount); + + return result; + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/NavigationServiceToObjectServiceTypesConverter.cs b/source/test/dotnet/CmisWS/Source/NavigationServiceToObjectServiceTypesConverter.cs new file mode 100644 index 0000000000..e01d2bde35 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/NavigationServiceToObjectServiceTypesConverter.cs @@ -0,0 +1,210 @@ +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public class NavigationServiceToObjectServiceTypesConverter: CmisTypesConverter + { + WcfTestClient.ObjectService.cmisProperty[] CmisTypesConverter + .convertProperties(WcfTestClient.NavigationService.cmisProperty[] sourceData) { + + WcfTestClient.ObjectService.cmisProperty[] result = + new WcfTestClient.ObjectService.cmisProperty[sourceData.Length]; + + int index = 0; + + foreach(WcfTestClient.NavigationService.cmisProperty property in sourceData) { + index = determineObjectServiceProperty(result, index, property); + } + + return result; + } + + private static int determineObjectServiceProperty(WcfTestClient.ObjectService.cmisProperty[] result, + int index, WcfTestClient.NavigationService.cmisProperty property) { + + if (property is WcfTestClient.NavigationService.cmisPropertyString) { + result[index++] = convertToStringObjectServiceProperty( + (WcfTestClient.NavigationService.cmisPropertyString)property); + } + + if (property is WcfTestClient.NavigationService.cmisPropertyBoolean) { + result[index++] = convertToBooleanObjectServiceProperty( + (WcfTestClient.NavigationService.cmisPropertyBoolean)property); + } + + if (property is WcfTestClient.NavigationService.cmisPropertyDateTime) { + result[index++] = convertToDateTimeObjectServiceProperty( + (WcfTestClient.NavigationService.cmisPropertyDateTime)property); + } + + if (property is WcfTestClient.NavigationService.cmisPropertyDecimal) { + result[index++] = convertToDecimalObjectServiceProperty( + (WcfTestClient.NavigationService.cmisPropertyDecimal)property); + } + + if (property is WcfTestClient.NavigationService.cmisPropertyId) { + result[index++] = convertToIdObjectServiceProperty( + (WcfTestClient.NavigationService.cmisPropertyId)property); + } + + if (property is WcfTestClient.NavigationService.cmisPropertyInteger) { + result[index++] = convertToIntegerObjectServiceProperty( + (WcfTestClient.NavigationService.cmisPropertyInteger)property); + } + + if (property is WcfTestClient.NavigationService.cmisPropertyUri) { + result[index++] = convertToUriObjectServiceProperty( + (WcfTestClient.NavigationService.cmisPropertyUri)property); + } + + return index; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToStringObjectServiceProperty( + WcfTestClient.NavigationService.cmisPropertyString source) { + + WcfTestClient.ObjectService.cmisPropertyString result = + new WcfTestClient.ObjectService.cmisPropertyString(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToBooleanObjectServiceProperty( + WcfTestClient.NavigationService.cmisPropertyBoolean source) { + + WcfTestClient.ObjectService.cmisPropertyBoolean result = + new WcfTestClient.ObjectService.cmisPropertyBoolean(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToDateTimeObjectServiceProperty( + WcfTestClient.NavigationService.cmisPropertyDateTime source) { + + WcfTestClient.ObjectService.cmisPropertyDateTime result = + new WcfTestClient.ObjectService.cmisPropertyDateTime(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToDecimalObjectServiceProperty( + WcfTestClient.NavigationService.cmisPropertyDecimal source) { + + WcfTestClient.ObjectService.cmisPropertyDecimal result = + new WcfTestClient.ObjectService.cmisPropertyDecimal(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToIdObjectServiceProperty( + WcfTestClient.NavigationService.cmisPropertyId source) { + + WcfTestClient.ObjectService.cmisPropertyId result = new WcfTestClient.ObjectService.cmisPropertyId(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToIntegerObjectServiceProperty( + WcfTestClient.NavigationService.cmisPropertyInteger source) { + + WcfTestClient.ObjectService.cmisPropertyInteger result = + new WcfTestClient.ObjectService.cmisPropertyInteger(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToUriObjectServiceProperty( + WcfTestClient.NavigationService.cmisPropertyUri source) { + + WcfTestClient.ObjectService.cmisPropertyUri result = new WcfTestClient.ObjectService.cmisPropertyUri(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.enumPropertyType convertToObjectServicePropertyTypeEnum( + WcfTestClient.NavigationService.enumPropertyType source) { + + switch (source) { + case WcfTestClient.NavigationService.enumPropertyType.boolean: { + return WcfTestClient.ObjectService.enumPropertyType.boolean; + } + + case WcfTestClient.NavigationService.enumPropertyType.datetime: { + return WcfTestClient.ObjectService.enumPropertyType.datetime; + } + + case WcfTestClient.NavigationService.enumPropertyType.html: { + return WcfTestClient.ObjectService.enumPropertyType.html; + } + + case WcfTestClient.NavigationService.enumPropertyType.id: { + return WcfTestClient.ObjectService.enumPropertyType.id; + } + + case WcfTestClient.NavigationService.enumPropertyType.integer: { + return WcfTestClient.ObjectService.enumPropertyType.integer; + } + + case WcfTestClient.NavigationService.enumPropertyType.uri: { + return WcfTestClient.ObjectService.enumPropertyType.uri; + } + + case WcfTestClient.NavigationService.enumPropertyType.xml: { + return WcfTestClient.ObjectService.enumPropertyType.xml; + } + } + + return WcfTestClient.ObjectService.enumPropertyType.@decimal; + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/ObjectServiceClientTest.cs b/source/test/dotnet/CmisWS/Source/ObjectServiceClientTest.cs new file mode 100644 index 0000000000..420a61b18d --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/ObjectServiceClientTest.cs @@ -0,0 +1,324 @@ +using System; +using System.Text; +using NUnit.Framework; +using WcfTestClient.ObjectService; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + [TestFixture] + public class ObjectServiceClientTest { + private const int TEST_HIERARCHY_DEPTH = 4; + private const int MINIMAL_TEST_OBJECTS_LEVEL_AMOUNT = 2; + + private const string DEFAULT_GUEST_USERNAME = "guest"; + private const string DEFAULT_GUEST_PASSWORD = "guest"; + + private const string REPLACED_CONTENT_ENTRY = "Replaced Content Entry"; + + private const string NAME_FOR_DOCUMENT_RENAMING = "Renamed Document.txt"; + private const string NAME_FOR_FOLDER_RENAMING = "Renamed Folder"; + + private const string CREATOR_PROPERTY_NAME = "CreatedBy"; + + [Test] + public void testDocumentCreationAndDeletion() { + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName(AbstractCmisServicesHelper + .TEXT_DOCUMENT_POSTFIX), AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testFolderCreationAndDeletion() { + + string folderId = AbstractCmisServicesHelper.createAndAssertFolder( + AbstractCmisServicesHelper.generateObjectName(null), + AbstractCmisServicesHelper.getAndAssertRootFolder()); + + AbstractCmisServicesHelper.deleteAndAssertFolder(folderId, false); + } + + [Test] + public void testPropertiesReceiving() { + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName(AbstractCmisServicesHelper. + TEXT_DOCUMENT_POSTFIX), AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + cmisPropertiesType properties = AbstractCmisServicesHelper.getObjectProperties(documentId, true); + + Assert.AreEqual(AbstractCmisServicesHelper.UserName, + AbstractCmisServicesHelper.searchPropertyAndGetValueByName(properties.Items, CREATOR_PROPERTY_NAME)); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testPropertiesUpdating() { + + string repositoryId = AbstractCmisServicesHelper.getAndAssertRepositoryId(); + string rootFolderId = AbstractCmisServicesHelper.getAndAssertRootFolder(); + + ObjectServicePortClient client = AbstractCmisServicesHelper.createObjectServiceClient(); + + assertObjectPropertiesUpdating(repositoryId, new DocumentCreatorStrategy( + AbstractCmisServicesHelper.generateObjectName(AbstractCmisServicesHelper + .TEXT_DOCUMENT_POSTFIX), rootFolderId, AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + enumVersioningState.major, AbstractCmisServicesHelper.getTestDocumentContentEntry()), + client, NAME_FOR_DOCUMENT_RENAMING); + + assertObjectPropertiesUpdating(repositoryId, new FolderCreatorStrategy( + AbstractCmisServicesHelper.generateObjectName(null), rootFolderId), client, + NAME_FOR_FOLDER_RENAMING); + } + + [Test] + public void testContentStreamReceiving() { + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + receiveAndAssertContentStream(documentId, AbstractCmisServicesHelper.createObjectServiceClient(), + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testContentStreamDeletion() { + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + deleteAndAssertContentStream(documentId, AbstractCmisServicesHelper.getAndAssertRepositoryId(), + AbstractCmisServicesHelper.createObjectServiceClient()); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testAllowableActionsReceving() { + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + string repositoryId = AbstractCmisServicesHelper.getAndAssertRepositoryId(); + + assertAdminActionsReceiving(repositoryId, documentId); + + assertGuestActionsReceiving(repositoryId, documentId); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testContentStreamSending() { + + string documentName = AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX); + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument(documentName, + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + ObjectServicePortClient client = AbstractCmisServicesHelper.createObjectServiceClient(); + + setAndAssertNewContent(documentName, documentId, client); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testObjectMoving() { + + string rootFolderId = AbstractCmisServicesHelper.getAndAssertRootFolder(); + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), rootFolderId, + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + string folderId = AbstractCmisServicesHelper.createAndAssertFolder( + AbstractCmisServicesHelper.generateObjectName(null), rootFolderId); + + performAndAssertDocumentMoving(documentId, folderId); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + AbstractCmisServicesHelper.deleteAndAssertFolder(folderId, false); + } + + [Test] + public void testNotEmptyFolderDeletion() { + + string folderId = AbstractCmisServicesHelper.createAndAssertFolder( + AbstractCmisServicesHelper.generateObjectName(null), + AbstractCmisServicesHelper.getAndAssertRootFolder()); + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), folderId, + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + AbstractCmisServicesHelper.deleteAndAssertFolder(folderId, true); + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + AbstractCmisServicesHelper.deleteAndAssertFolder(folderId, false); + } + + [Test] + public void testTreeCreationAndDeletion() { + + AbstractCmisServicesHelper.deleteAndAssertHierarchy( + AbstractCmisServicesHelper.createAndAssertFileFolderHierarchy( + TEST_HIERARCHY_DEPTH, MINIMAL_TEST_OBJECTS_LEVEL_AMOUNT, 0, true)); + } + + private static void assertObjectPropertiesUpdating(string repositoryId, + CmisManipulationsStrategy objectCreator, ObjectServicePortClient client, + string expectedChangedObjectName) { + + string objectId = objectCreator.performManipulations(); + + assertPropertiesUpdating(repositoryId, client, objectId, objectCreator.getName(), + expectedChangedObjectName); + + performObjectDeletionAndAssertion(objectCreator, objectId); + } + + private static void performObjectDeletionAndAssertion(CmisManipulationsStrategy objectCreator, + string objectId) { + + if (objectCreator is DocumentCreatorStrategy) { + AbstractCmisServicesHelper.deleteAndAssertDocument(objectId); + } + + if(objectCreator is FolderCreatorStrategy) { + AbstractCmisServicesHelper.deleteAndAssertFolder(objectId, false); + } + } + + private static void assertPropertiesUpdating(string repositoryId, ObjectServicePortClient client, + string objectId, string expectedName, string expectedChangedName) { + + Assert.AreEqual(expectedName, AbstractCmisServicesHelper.searchPropertyAndGetValueByName( + AbstractCmisServicesHelper.getObjectProperties(objectId, true).Items, + AbstractCmisServicesHelper.NAME_PROPERTY)); + + client.updateProperties(repositoryId, ref objectId, null, + AbstractCmisServicesHelper.createCmisObjectProperties(expectedChangedName)); + + Assert.AreEqual(expectedChangedName, AbstractCmisServicesHelper.searchPropertyAndGetValueByName( + AbstractCmisServicesHelper.getObjectProperties(objectId, true).Items, + AbstractCmisServicesHelper.NAME_PROPERTY)); + } + + private static void receiveAndAssertContentStream(string documentId, ObjectServicePortClient client, + byte[] expectedContent) { + + cmisContentStreamType result = client.getContentStream( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), documentId); + + Assert.AreEqual(expectedContent.Length, result.stream.Length); + Assert.AreEqual(Encoding.GetEncoding(AbstractCmisServicesHelper.DEFAULT_ENCODING). + GetString(expectedContent), Encoding.GetEncoding(AbstractCmisServicesHelper. + DEFAULT_ENCODING).GetString(result.stream)); + } + + private void deleteAndAssertContentStream(string documentId, string repositoryId, + ObjectServicePortClient client) { + + receiveAndAssertContentStream(documentId, client, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + client.deleteContentStream(repositoryId, documentId); + + try { + client.getContentStream(repositoryId, documentId); + + Assert.Fail("Content stream was not deleted"); + } catch(Exception) { + } + } + + private static void assertAdminActionsReceiving(string repositoryId, string documentId) { + + ObjectServicePortClient client = AbstractCmisServicesHelper.createObjectServiceClient(); + + cmisAllowableActionsType response = client.getAllowableActions(repositoryId, documentId); + + Assert.IsNotNull(response); + Assert.IsTrue(response.canDelete); + Assert.IsTrue(response.canDeleteContent); + Assert.IsTrue(response.canCheckout); + Assert.IsTrue(response.canUpdateProperties); + Assert.IsFalse(response.canGetAllVersions); + Assert.IsFalse(response.canCheckin); + Assert.IsFalse(response.canCancelCheckout); + } + + private static void assertGuestActionsReceiving(string repositoryId, string documentId) { + + ObjectServicePortClient client = AbstractCmisServicesHelper.createObjectServiceClient( + DEFAULT_GUEST_USERNAME, DEFAULT_GUEST_PASSWORD); + + cmisAllowableActionsType response = client.getAllowableActions(repositoryId, documentId); + + Assert.IsNotNull(response); + Assert.IsFalse(response.canDelete); + Assert.IsFalse(response.canDeleteContent); + Assert.IsFalse(response.canCheckout); + Assert.IsFalse(response.canUpdateProperties); + Assert.IsFalse(response.canGetAllVersions); + Assert.IsFalse(response.canCheckin); + Assert.IsFalse(response.canCancelCheckout); + } + + private static void setAndAssertNewContent(string documentName, string documentId, + ObjectServicePortClient client) { + + try { + client.setContentStream(AbstractCmisServicesHelper.getAndAssertRepositoryId(), ref documentId, + true, AbstractCmisServicesHelper.createCmisDocumentContent(documentName, + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + Encoding.GetEncoding(AbstractCmisServicesHelper.DEFAULT_ENCODING) + .GetBytes(REPLACED_CONTENT_ENTRY))); + + receiveAndAssertContentStream(documentId, client, Encoding.GetEncoding( + AbstractCmisServicesHelper.DEFAULT_ENCODING).GetBytes(REPLACED_CONTENT_ENTRY)); + } catch(Exception e) { + Assert.Fail(e.Message); + } + } + + private static void performAndAssertDocumentMoving(string documentId, string folderId) { + + ObjectServicePortClient client = AbstractCmisServicesHelper.createObjectServiceClient(); + + client.moveObject(AbstractCmisServicesHelper.getAndAssertRepositoryId(), documentId, folderId, null); + + AbstractCmisServicesHelper.assertDocumentParents(documentId, new string[] {folderId}); + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/RepositoryServiceClientTest.cs b/source/test/dotnet/CmisWS/Source/RepositoryServiceClientTest.cs new file mode 100644 index 0000000000..69e610288b --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/RepositoryServiceClientTest.cs @@ -0,0 +1,100 @@ +using System; +using NUnit.Framework; +using WcfTestClient.RepositoryService; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + [TestFixture] + public class RepositoryServiceClientTest { + [Test] + public void testGetRepositories() { + + try { + AbstractCmisServicesHelper.getAndAssertRepositoryId(); + } catch (Exception e) { + Assert.Fail(e.Message); + } + } + + [Test] + public void testGetRepositoryInfo() { + + try { + RepositoryServicePortClient client = AbstractCmisServicesHelper.createRepositoryServiceClient(); + + assertRepositoryInfoReponse(client.getRepositoryInfoWrapper(AbstractCmisServicesHelper. + getAndAssertRepositoryId())); + } catch (Exception e) { + Assert.Fail(e.Message); + } + } + + [Test] + public void testGetTypes() { + + try { + assertGetTypesResponse(AbstractCmisServicesHelper.createRepositoryServiceClient()); + } catch (Exception e) { + Assert.Fail(e.Message); + } + } + + [Test] + public void testGetTypeDefinition() { + + try { + RepositoryServicePortClient client = AbstractCmisServicesHelper.createRepositoryServiceClient(); + + string typeId = assertGetTypesResponse(client); + + Assert.IsNotNull(typeId); + Assert.IsTrue(typeId.Length > AbstractCmisServicesHelper.MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH); + + getTypeDefinitionResponse response = client.getTypeDefinitionWrapper(AbstractCmisServicesHelper. + getAndAssertRepositoryId(), typeId); + + Assert.IsNotNull(response, typeId); + } catch (Exception e) { + Assert.Fail(e.Message); + } + } + + private static void assertRepositoryInfoReponse(getRepositoryInfoResponse repositoryInfo) { + + Assert.IsNotNull(repositoryInfo); + assertCapabilities(repositoryInfo); + } + + private string assertGetTypesResponse(RepositoryServicePortClient client) { + + bool hasMoreElements; + + cmisTypeDefinitionType[] types = client.getTypes(AbstractCmisServicesHelper.getAndAssertRepositoryId(), + AbstractCmisServicesHelper.DOCUMENT_TYPE, false, AbstractCmisServicesHelper.TEXTUAL_ZERO, + AbstractCmisServicesHelper.TEXTUAL_ZERO, out hasMoreElements); + Assert.IsNotNull(types); + Assert.IsTrue((types.Length >= AbstractCmisServicesHelper.MINIMAL_ARRAY_LIKE_STRUCTURES_LENGTH) + && types[0].fileable && hasMoreElements); + + return types[new Random().Next(types.Length)].typeId; + } + + private static void assertCapabilities(getRepositoryInfoResponse repositoryInfo) { + + Assert.IsFalse(repositoryInfo.capabilities.capabilityUnfiling); + Assert.IsFalse(repositoryInfo.capabilities.capabilityPWCSearchable); + Assert.IsFalse(repositoryInfo.capabilities.capabilityVersionSpecificFiling); + Assert.IsFalse(repositoryInfo.capabilities.capabilityAllVersionsSearchable); + + Assert.IsTrue(repositoryInfo.capabilities.capabilityMultifiling); + Assert.IsTrue(repositoryInfo.capabilities.capabilityPWCUpdateable); + + Assert.AreEqual(enumCapabilityJoin.nojoin, repositoryInfo.capabilities.capabilityJoin); + Assert.AreEqual(enumCapabilityQuery.none, repositoryInfo.capabilities.capabilityQuery); + Assert.AreEqual(enumCapabilityFullText.fulltextandstructured, + repositoryInfo.capabilities.capabilityFullText); + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/SecurityMessageHeader.cs b/source/test/dotnet/CmisWS/Source/SecurityMessageHeader.cs new file mode 100644 index 0000000000..5f39cfe141 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/SecurityMessageHeader.cs @@ -0,0 +1,129 @@ +using System; +using System.Xml; +using System.ServiceModel.Channels; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public class SecurityMessageHeader: MessageHeader { + private const int MINIMAL_ALLOWED_STRING_LENGTH = 1; + private const int TIME_TOKEN_POSITION = 3; + private const int LAST_DATE_TOKEN_POSITION = 2; + + private const int EXPIRE_ODDS = 4167; + + private const string DOT = "."; + private const char DOT_SYMBOL = '.'; + private const string MINUS = "-"; + private const string BREAK = " "; + private const char BREAK_SYMBOL = ' '; + private const string TIME_SPECIFICATOR = "T"; + private const string DATE_TIME_ZONE_SPECIFICATOR = "Z"; + + private const string SECURITY_HEADER_NAME = "Security"; + private const string SECURITY_HEADER_NAME_SPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-w" + + "ssecurity-secext-1.0.xsd"; + private const string SECURITY_HEADER_ENTRY = "\n \n" + + " {1}\n {2}\n" + + " \n \n {4}\n {5}\n IGRKG/ABNywDNZ1/lxxarA==\n {6}\n \n"; + + private string value; + + public static MessageHeader CreateHeader(string userName, string password) { + + string formattedSecurityHeader = string.Format(SECURITY_HEADER_ENTRY, new object[] { + DateTime.Now.TimeOfDay.Ticks, formatDate(), formatDate(new DateTime(DateTime.Now.Ticks + EXPIRE_ODDS). + ToLocalTime().ToString()), DateTime.Now.TimeOfDay.Ticks, userName, password, formatDate()}); + + return new SecurityMessageHeader(formattedSecurityHeader); + } + + protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion) { + + writer.WriteRaw(value); + } + + public override string Actor { + + get { + return string.Empty; + } + } + + public override bool IsReferenceParameter { + + get { + return true; + } + } + + public override bool MustUnderstand { + + get { + return true; + } + } + + public override bool Relay { + + get { + return false; + } + } + + public override string ToString() { + + return base.ToString(); + } + + public override string Namespace { + + get { + return SECURITY_HEADER_NAME_SPACE; + } + } + + public override string Name { + + get { + return SECURITY_HEADER_NAME; + } + } + + private SecurityMessageHeader(string value) { + + this.value = value; + } + + private static string formatDate() { + + return formatDate(DateTime.Now.ToLocalTime().ToString()); + } + + private static string formatDate(string sourceDate) { + + if (!(sourceDate is string) || (sourceDate.Length < MINIMAL_ALLOWED_STRING_LENGTH)) { + sourceDate = DateTime.Now.ToLocalTime().ToString(); + } + + return reverseDate(sourceDate) + DOT + DateTime.Now.Millisecond + DATE_TIME_ZONE_SPECIFICATOR; + } + + private static string reverseDate(string sample) { + + string[] dateFields = sample.Split(new char[] {DOT_SYMBOL, BREAK_SYMBOL}); + + int i = LAST_DATE_TOKEN_POSITION; + + return dateFields[i--] + MINUS + dateFields[i--] + MINUS + dateFields[i] + TIME_SPECIFICATOR + + dateFields[TIME_TOKEN_POSITION]; + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/SoapRequestHeaderProcessorAttribute.cs b/source/test/dotnet/CmisWS/Source/SoapRequestHeaderProcessorAttribute.cs new file mode 100644 index 0000000000..1e4f4263a7 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/SoapRequestHeaderProcessorAttribute.cs @@ -0,0 +1,35 @@ +using System; +using System.ServiceModel.Channels; +using System.ServiceModel.Dispatcher; +using System.ServiceModel.Description; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public class SoapRequestHeaderProcessorAttribute: Attribute, IEndpointBehavior { + private string userName; + private string password; + + public SoapRequestHeaderProcessorAttribute(string userName, string password) { + + this.userName = userName; + this.password = password; + } + + void IEndpointBehavior.ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { + + clientRuntime.MessageInspectors.Add(new SoapRequestMassagesInspector(userName, password)); + } + + void IEndpointBehavior.AddBindingParameters(ServiceEndpoint endpoint, + BindingParameterCollection bindingParameters) { + } + + void IEndpointBehavior.ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { + } + + void IEndpointBehavior.Validate(ServiceEndpoint endpoint) { + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/SoapRequestMassagesInspector.cs b/source/test/dotnet/CmisWS/Source/SoapRequestMassagesInspector.cs new file mode 100644 index 0000000000..f3fe8f5221 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/SoapRequestMassagesInspector.cs @@ -0,0 +1,31 @@ +using System.ServiceModel; +using System.ServiceModel.Channels; +using System.ServiceModel.Dispatcher; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public class SoapRequestMassagesInspector: IClientMessageInspector { + private string userName; + private string password; + + public SoapRequestMassagesInspector(string userName, string password) { + + this.userName = userName; + this.password = password; + } + + object IClientMessageInspector.BeforeSendRequest(ref Message request, IClientChannel channel) { + + request.Headers.Clear(); + + request.Headers.Add(SecurityMessageHeader.CreateHeader(userName, password)); + + return null; + } + + void IClientMessageInspector.AfterReceiveReply(ref Message reply, object correlationState) { + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/VersioninServiceClientTest.cs b/source/test/dotnet/CmisWS/Source/VersioninServiceClientTest.cs new file mode 100644 index 0000000000..47caab1e65 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/VersioninServiceClientTest.cs @@ -0,0 +1,171 @@ +using System.Text; +using NUnit.Framework; +using WcfTestClient.VersioningService; + +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + [TestFixture] + public class VersioningServiceClientTest { + private const int EXPECTED_VERSIONS_AMOUNT = 3; + private const int DIFFERENT_VERSIONS_AMOUNT = EXPECTED_VERSIONS_AMOUNT - 1; + + private const string CHECKIN_COMMENT = "Checked In with NUnit"; + private const string CHECKIN_CONTENT_TEXT = "Check In test result entry"; + + private const string COMMON_VERSION_SUFFIX = "/1."; + + private const string EXPECTED_VERSION_NUMBER = COMMON_VERSION_SUFFIX + "1"; + + private static byte[] checkinContentEntry = Encoding.GetEncoding( + AbstractCmisServicesHelper.DEFAULT_ENCODING).GetBytes(CHECKIN_CONTENT_TEXT); + + [Test] + public void testDocumentCheckoutingAndCheckoutCanceling() { + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument( + AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX), + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + AbstractCmisServicesHelper.cancelCheckOutAndAssert( + AbstractCmisServicesHelper.checkOutAndAssert(documentId)); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testLatestVersionPropertiesReceiving() { + + string documentName = AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX); + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument(documentName, + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + AbstractCmisServicesHelper.getAndAssertLatestVersionProperties(documentId, documentName, null, false); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + + } + + [Test] + public void testAllVersionsDeletion() { + + string documentName = AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX); + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument(documentName, + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + assertAllVersionsDeletion(documentName, documentId, + AbstractCmisServicesHelper.createVersioningServiceClient()); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testDocumentCheckIning() { + + string documentName = AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX); + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument(documentName, + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + WcfTestClient.ObjectService.enumVersioningState.checkedout, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + documentId = assertCheckIning(documentName, documentId); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + [Test] + public void testAllVersionsReceiving() { + + string documentName = AbstractCmisServicesHelper.generateObjectName( + AbstractCmisServicesHelper.TEXT_DOCUMENT_POSTFIX); + + string documentId = AbstractCmisServicesHelper.createAndAssertDocument(documentName, + AbstractCmisServicesHelper.getAndAssertRootFolder(), + AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE, + WcfTestClient.ObjectService.enumVersioningState.checkedout, + AbstractCmisServicesHelper.getTestDocumentContentEntry()); + + documentId = assertCheckIning(documentName, documentId); + + assertVersionsReceiving(documentId, AbstractCmisServicesHelper.createVersioningServiceClient()); + + AbstractCmisServicesHelper.deleteAndAssertDocument(documentId); + } + + private static void assertAllVersionsDeletion(string documentName, string documentId, + VersioningServicePortClient client) { + + client.deleteAllVersions(AbstractCmisServicesHelper.getAndAssertRepositoryId(), documentId); + + AbstractCmisServicesHelper.getAndAssertLatestVersionProperties(documentId, documentName, null, true); + } + + private static string assertCheckIning(string documentName, string documentId) { + + AbstractCmisServicesHelper.assertCheckedOutDocument(documentId, true); + + AbstractCmisServicesHelper.createVersioningServiceClient().checkIn( + AbstractCmisServicesHelper.getAndAssertRepositoryId(), ref documentId, false, + null, createVersioningContentStream(documentName), CHECKIN_COMMENT); + + AbstractCmisServicesHelper.getAndAssertLatestVersionProperties(documentId, documentName, + EXPECTED_VERSION_NUMBER, false); + + return documentId; + } + + private static void assertVersionsReceiving(string documentId, VersioningServicePortClient client) { + + cmisObjectType[] response = client.getAllVersions(AbstractCmisServicesHelper.getAndAssertRepositoryId(), + documentId, AbstractCmisServicesHelper.ANY_PROPERTY_FILTER, false, false); + + Assert.IsNotNull(response); + Assert.AreEqual(EXPECTED_VERSIONS_AMOUNT, response.Length); + + assertOlderVersions(response); + } + + private static void assertOlderVersions(cmisObjectType[] response) { + + Assert.IsTrue(((string)AbstractCmisServicesHelper.searchPropertyAndGetValueByName( + AbstractCmisServicesHelper.VERSIONING_CONVERTER.convertProperties( + response[0].properties.Items), AbstractCmisServicesHelper + .OBJECT_IDENTIFIER_PROPERTY)).EndsWith(COMMON_VERSION_SUFFIX + 1)); + + for (int currentVersionNumber = (DIFFERENT_VERSIONS_AMOUNT - 1); currentVersionNumber > 0; + currentVersionNumber--) { + Assert.IsTrue(((string)AbstractCmisServicesHelper.searchPropertyAndGetValueByName( + AbstractCmisServicesHelper.VERSIONING_CONVERTER.convertProperties( + response[DIFFERENT_VERSIONS_AMOUNT - currentVersionNumber].properties.Items), + AbstractCmisServicesHelper.OBJECT_IDENTIFIER_PROPERTY)).EndsWith( + COMMON_VERSION_SUFFIX + currentVersionNumber)); + } + } + + private static cmisContentStreamType createVersioningContentStream(string documentName) { + + cmisContentStreamType result = new cmisContentStreamType(); + result.filename = documentName; + result.length = checkinContentEntry.Length.ToString(); + result.mimeType = AbstractCmisServicesHelper.TEXT_DOCUMENT_MIMETYPE; + result.stream = checkinContentEntry; + + return result; + } + } +} diff --git a/source/test/dotnet/CmisWS/Source/VersioningServiceToObjectServiceTypesConverter.cs b/source/test/dotnet/CmisWS/Source/VersioningServiceToObjectServiceTypesConverter.cs new file mode 100644 index 0000000000..7e89341816 --- /dev/null +++ b/source/test/dotnet/CmisWS/Source/VersioningServiceToObjectServiceTypesConverter.cs @@ -0,0 +1,210 @@ +namespace WcfCmisWSTests { + /// + /// author: Dmitry Velichkevich + /// + public class VersioningServiceToObjectServiceTypesConverter: CmisTypesConverter + { + WcfTestClient.ObjectService.cmisProperty[] CmisTypesConverter + .convertProperties(WcfTestClient.VersioningService.cmisProperty[] sourceData) { + + WcfTestClient.ObjectService.cmisProperty[] result = + new WcfTestClient.ObjectService.cmisProperty[sourceData.Length]; + + int index = 0; + + foreach (WcfTestClient.VersioningService.cmisProperty property in sourceData) { + index = determineObjectServiceProperty(result, index, property); + } + + return result; + } + + private static int determineObjectServiceProperty(WcfTestClient.ObjectService.cmisProperty[] result, + int index, WcfTestClient.VersioningService.cmisProperty property) { + + if (property is WcfTestClient.VersioningService.cmisPropertyString) { + result[index++] = convertToStringObjectServiceProperty( + (WcfTestClient.VersioningService.cmisPropertyString)property); + } + + if (property is WcfTestClient.VersioningService.cmisPropertyBoolean) { + result[index++] = convertToBooleanObjectServiceProperty( + (WcfTestClient.VersioningService.cmisPropertyBoolean)property); + } + + if (property is WcfTestClient.VersioningService.cmisPropertyDateTime) { + result[index++] = convertToDateTimeObjectServiceProperty( + (WcfTestClient.VersioningService.cmisPropertyDateTime)property); + } + + if (property is WcfTestClient.VersioningService.cmisPropertyDecimal) { + result[index++] = convertToDecimalObjectServiceProperty( + (WcfTestClient.VersioningService.cmisPropertyDecimal)property); + } + + if (property is WcfTestClient.VersioningService.cmisPropertyId) { + result[index++] = convertToIdObjectServiceProperty( + (WcfTestClient.VersioningService.cmisPropertyId)property); + } + + if (property is WcfTestClient.VersioningService.cmisPropertyInteger) { + result[index++] = convertToIntegerObjectServiceProperty( + (WcfTestClient.VersioningService.cmisPropertyInteger)property); + } + + if (property is WcfTestClient.VersioningService.cmisPropertyUri) { + result[index++] = convertToUriObjectServiceProperty( + (WcfTestClient.VersioningService.cmisPropertyUri)property); + } + + return index; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToStringObjectServiceProperty( + WcfTestClient.VersioningService.cmisPropertyString source) { + + WcfTestClient.ObjectService.cmisPropertyString result = + new WcfTestClient.ObjectService.cmisPropertyString(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToBooleanObjectServiceProperty( + WcfTestClient.VersioningService.cmisPropertyBoolean source) { + + WcfTestClient.ObjectService.cmisPropertyBoolean result = + new WcfTestClient.ObjectService.cmisPropertyBoolean(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToDateTimeObjectServiceProperty( + WcfTestClient.VersioningService.cmisPropertyDateTime source) { + + WcfTestClient.ObjectService.cmisPropertyDateTime result = + new WcfTestClient.ObjectService.cmisPropertyDateTime(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToDecimalObjectServiceProperty( + WcfTestClient.VersioningService.cmisPropertyDecimal source) { + + WcfTestClient.ObjectService.cmisPropertyDecimal result = + new WcfTestClient.ObjectService.cmisPropertyDecimal(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToIdObjectServiceProperty( + WcfTestClient.VersioningService.cmisPropertyId source) { + + WcfTestClient.ObjectService.cmisPropertyId result = new WcfTestClient.ObjectService.cmisPropertyId(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToIntegerObjectServiceProperty( + WcfTestClient.VersioningService.cmisPropertyInteger source) { + + WcfTestClient.ObjectService.cmisPropertyInteger result = + new WcfTestClient.ObjectService.cmisPropertyInteger(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.cmisProperty convertToUriObjectServiceProperty( + WcfTestClient.VersioningService.cmisPropertyUri source) { + + WcfTestClient.ObjectService.cmisPropertyUri result = new WcfTestClient.ObjectService.cmisPropertyUri(); + + result.AnyAttr = source.AnyAttr; + result.index = source.index; + result.name = source.name; + result.propertyType = convertToObjectServicePropertyTypeEnum(source.propertyType); + result.propertyTypeSpecified = source.propertyTypeSpecified; + result.value = source.value; + + return result; + } + + private static WcfTestClient.ObjectService.enumPropertyType convertToObjectServicePropertyTypeEnum( + WcfTestClient.VersioningService.enumPropertyType source) { + + switch (source) { + case WcfTestClient.VersioningService.enumPropertyType.boolean: { + return WcfTestClient.ObjectService.enumPropertyType.boolean; + } + + case WcfTestClient.VersioningService.enumPropertyType.datetime: { + return WcfTestClient.ObjectService.enumPropertyType.datetime; + } + + case WcfTestClient.VersioningService.enumPropertyType.html: { + return WcfTestClient.ObjectService.enumPropertyType.html; + } + + case WcfTestClient.VersioningService.enumPropertyType.id: { + return WcfTestClient.ObjectService.enumPropertyType.id; + } + + case WcfTestClient.VersioningService.enumPropertyType.integer: { + return WcfTestClient.ObjectService.enumPropertyType.integer; + } + + case WcfTestClient.VersioningService.enumPropertyType.uri: { + return WcfTestClient.ObjectService.enumPropertyType.uri; + } + + case WcfTestClient.VersioningService.enumPropertyType.xml: { + return WcfTestClient.ObjectService.enumPropertyType.xml; + } + } + + return WcfTestClient.ObjectService.enumPropertyType.@decimal; + } + } +} diff --git a/source/test/dotnet/CmisWS/WcfCmisWSTests.csproj b/source/test/dotnet/CmisWS/WcfCmisWSTests.csproj new file mode 100644 index 0000000000..34b38ad72e --- /dev/null +++ b/source/test/dotnet/CmisWS/WcfCmisWSTests.csproj @@ -0,0 +1,271 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {55907DD1-87C0-4544-AFBC-4B9761E2CFBA} + Library + Properties + WcfCmisWSTests + WcfCmisWSTests + v3.5 + 512 + + + true + full + false + build\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + 3.5 + + + 3.0 + + + 3.0 + + + 3.5 + + + 3.5 + + + + + + + + + + + + + + + + + + + + True + True + Reference.svcmap + + + True + True + Reference.svcmap + + + True + True + Reference.svcmap + + + True + True + Reference.svcmap + + + True + True + Reference.svcmap + + + True + True + Reference.svcmap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WCF Proxy Generator + Reference.cs + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + + + + + + + + + + + WCF Proxy Generator + Reference.cs + + + Reference.svcmap + + + Reference.svcmap + + + Reference.svcmap + + + + + + + + + + + WCF Proxy Generator + Reference.cs + + + Reference.svcmap + + + + + + + + + + + + + + + WCF Proxy Generator + Reference.cs + + + Reference.svcmap + + + + + + + + + + + WCF Proxy Generator + Reference.cs + + + Reference.svcmap + + + + + + + + + + + + + WCF Proxy Generator + Reference.cs + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/WcfCmisWSTests.sln b/source/test/dotnet/CmisWS/WcfCmisWSTests.sln new file mode 100644 index 0000000000..fb212c9bcf --- /dev/null +++ b/source/test/dotnet/CmisWS/WcfCmisWSTests.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WcfCmisWSTests", "WcfCmisWSTests.csproj", "{55907DD1-87C0-4544-AFBC-4B9761E2CFBA}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {55907DD1-87C0-4544-AFBC-4B9761E2CFBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55907DD1-87C0-4544-AFBC-4B9761E2CFBA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55907DD1-87C0-4544-AFBC-4B9761E2CFBA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55907DD1-87C0-4544-AFBC-4B9761E2CFBA}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/test/dotnet/CmisWS/WcfCmisWSTests.suo b/source/test/dotnet/CmisWS/WcfCmisWSTests.suo new file mode 100644 index 0000000000000000000000000000000000000000..f4f4eb6dbcc64a7d8e295b5b2782505722f2e489 GIT binary patch literal 51712 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 Jlh + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/build.bat b/source/test/dotnet/CmisWS/build.bat new file mode 100644 index 0000000000..c65f615d59 --- /dev/null +++ b/source/test/dotnet/CmisWS/build.bat @@ -0,0 +1,16 @@ +@echo off + +set SDK_LOCATION=c:\WINDOWS\Microsoft.NET\Framework +set COMPILER=%SDK_LOCATION%\v3.5\MSBuild.exe + +if not exist %COMPILER% goto reportErrorAndExit + +%COMPILER% WcfCmisWSTests.csproj + +goto end + +:reportErrorAndExit +echo --- CRITICAL ENVIRONMENT ERROR: .NET v3.5 compiler ("%COMPILER%") was not found at "%SDK_LOCATION%" location! Please, install .NET v3.5 SDK or reconfigure SDK_LOCATION variable +:end + +pause \ No newline at end of file diff --git a/source/test/dotnet/CmisWS/readme.txt b/source/test/dotnet/CmisWS/readme.txt new file mode 100644 index 0000000000..7ba977c3b1 --- /dev/null +++ b/source/test/dotnet/CmisWS/readme.txt @@ -0,0 +1,45 @@ +COMPILATION + + To compile "WcfCmisWSTests" project you need: + 1) install .NET SDK v3.5 to your system; + 2) copy full "WcfCmisWSTests" project to some directory (e.g.: "C:\WcfCmisWSTests"); + 3) check if the .NET SDK location and "SDK_LOCATION" variable value in the "build.bat" file are the same + and introduce neccessary corrections; + 4) run "build.bat" file. + After compilation finished "build" folder should be created in the project directory. This folder will + contain all neccessary for tests execution libraries and configuration files. + "WcfCmisWSTests.dll" library is the library that design for execution in the NUnit. + + NOTE: this tests were developed under NUnit 2.4.5 version. + +TESTS RUNNING + + To run tests you may use one of the next two methods: + I. 1) launch "NUnit.exe" executable; + 2) choose "File" > "Open project..." menu and in file dialog select "WcfCmisWSTests.dll" file and + click "Open" button; + 3) in the left side of the main "NUnit" window select neccessary test tree node. + NOTE: select most top node to select all tests; you can make right click on that tree and click on + "Show CheckBoxes" menu item to select not grouped tests; + 4) After "Run" button clicking "NUnit" will start test execution. "Run" button became disable and + "Stop" button - enabled. During tests execution "NUnit" will mark tests nodes in the tree with + icons those will be conform to passing status (see "NUnit" documentation for more details). After + "Run" button became enabled again you can see for errors and/or warnings reports and some other log + information if any clicking on the tabs placed in the below of main "NUnit" window. + II. 1) launch system command line console ("Start" > "Run...", type "cmd" in the appeared window and click + "Ok"); + 2) if system environment not configured with "NUnit" home path navigate with "cd" system command to + "NUnit" home folder; + 3) type "nunit-console.exe", break and full path to "WcfCmisWSTests.dll" file (e.g.: nunit-console.exe + C:\WcfCmisWSTests\build\WcfCmisWSTests.dll); + 4)* type break. Now you can introduce some options for "NUnit" system and report generation. For + example, to store testing results to the xml you can add "xml=C:\test-report.xml". For more details + about "NUnit" conlose options see "NUnit" documentation or execute "nunit-console.exe" without any + parameters; + 5) press "Enter" key. After "NUnit" finish tests execution you can see generated report. + + * This step is optional and may be skipped. + + NOTE: by default "NUnit" save testing results in the "TestResult.xml" or ".xml" + file in the "NUnit" home directory. Also some information about tests execution will be displayed in + the console window.